Discuss A “Standardized” Robot “Language” For GoPiGo3

A request has been made to discuss the applicability of a proposal for a standardized robot language to the GoPiGo3 robot.

  1. Read what it is
  2. Optional: Follow tutorial to install “it”, understand what “it” is and is not.
  3. Just read the tutorial 1, for a hint to what it is, and what it is not
  4. Optional: To understand how it does “it” read Tutorial 2

Note: The “Try it in three commands” does not succeed on Raspberry Pi 5 w/ Ubuntu 26.04

Now we are ready to have an informed discussion.

1 Like

That’s going to be a next week project for me. Not this week.

2 Likes

Suggest holding off till the issues I reported get fixed…

1 Like

URML “Educational Profile” ROBOT REQUIREMENTS

The “Universal Robot [Machine] Language” educational robot profile states the following requirements:

An educational-profile manifest must declare:

  • mobility with a ground drive_type
    • (GoPiGo3: differential)
  • declared_locations for every place a program references. Pose-based motion is discouraged: a student edits a named station list, not coordinates.
    • (GoPiGo3: Possible by requiring a camera and AprilTag/Color/Shaped/StopLight_w_TurnSignal signs)

An educational-profile manifest should declare:

  • perception.object_vocabulary — the closed set of classes lessons use; an undeclared detect target fails closed (the robot stops and reports) rather than guessing.
    • **(GoPiGo3: requires PiCam or advanced object detection device - no stock robot object perception)
  • provenance: when the platform is procured by a public institution under rules that reach classroom hardware.
    • **(GoPiGo3: Interesting topic. I do not know what schools would demand.)

How Could GoPiGo3 “Loosely Comply”:

  • declared_locations: (The GoPiGo3 lacks any fixed frame)
    • only “current location” and a virtual “relative to current location” are possible with the stock GoPiGo3
    • “[Forward|Backward] x [inches, cm]”: virtual relative to current location
    • " X,Y relative to current position" (discouraged, but an useful teaching concept)
    • " x [inches | cm] along a theta heading" (discouraged, but useful teaching concept - rho theta coordinate systems)
    • “Tag x”: a virtual “place” impossible as a declared location in the robot “frame”
  • perception.object_vocabulary:
    • “obstacle”: sensed by ultrasound or time-of-flight ranger, or camera with line cross detection
    • “aprilTag”: with PiCam and OpenCV
    • “stoplight”: with PiCam and custom OpenCV module
    • “[color] ball”: with PiCam and TFLite
    • “human”: with PiCam and TFLite

Additionally URML proposes the following “Robot Primitives”:

I can think of the GoPiGo3 loosely providing functionality for:

  • move_to (only relative position,heading to current position[new 0,0],heading[0])
  • wait (time)
  • wait_for (“no obstacle, obstacle, no obstacle” sequence)
  • detect (obstacle)
  • scan (with servo mounted distance sensor, I wrote a scan map display years ago)
  • measure (range)
  • capture (with PiCamera)
  • report (battery voltage, motor_status,read_info() possible)

All of which could probably be invoked by a speech grammar to the Vosk reco engine, faster and perhaps more reliably. Personally I find the concept of attempting to build the framework required to obtain a URML compliance mark from the URML organization will be non-useful complexity to the GoPiGo3 target users. It has been educational to understand what software architecture would be needed to introduce URML between a user and the robot.

1 Like

Actually, I went back to review the issues - my bad! I was trying to jump ahead instead of just doing the tutorials as written. I closed those issues and intend to revisit the Tutorials verbatim. Tut 4 demonstrates an example of doing your own thing, but “Drafting a GoPiGo3 URML” needs to start only after finishing all the Tutorials as written. I am alway impatient when learning anything.

Ido responded to my thoughts here, there - and I responded there if anyone is interested in my fears around Large Language Models in education.

2 Likes

Limited Success With Ollama And QWEN2.5:0.5b LLM

Although the URML app appears to have an issue that it is not spitting out the behavior field, I was able to configure the OpenAI LLM Bridge to connect the URML app to my Ollama server running the qwen2.5:0.5b LLM on my Pi5.

The qwen2.5:0.5b model took 4 minutes for the first step, but it appears to have properly run the URML “tools”

(.venv) ubuntu@u26llpi5:~/U26LLPi5/systests/urml/my-first-robot$ urml translate "Bring me the red mug from the kitchen."     --manifest manifest.yaml     --envelope envelope.yaml     --profile home     --provider openai --model "qwen2.5:0.5b"
urml: translation failed: validator rejected the LLM's emission in all 4 attempt(s).

  ERROR [argument.missing_required] behavior
    field: behavior
    Field required

The Tutorials say there should be 5 sections in the prompt to the LLM but there are only 4 sections being emitted, so this result is consistent with the LLM working properly and the URML app issue I have reported.

Ok, well second time different failure - looks like quen2.5:0.5b will be too small. I have run larger models in an Ollama server on my Mac and used them from robot Dave. Looks like that will be required here. Not sure how that would translate to a classroom environment…robot accessing the teacher’s laptop…uh, no.

2 Likes

Remote qwen2.5:3b Model also no cigars

I don’t have an Anthropic or OpenAI account to try, so I am attempting to use Ollama local or remote (on my Mac) as the LLM to run: urml translate "Bring me the red mug from the kitchen."

Both seem to take 4 minutes at 100% CPU (both Pi5 4 cores, and remote 4 cores of the 3.2GHz Intel I7) and end up rejecting the prompt (Tutorial 3).

I have the feeling a classroom of kids will not wait 4 minutes to see their GoPiGo3 interpret “Drive forward 3 feet then turn 180 and drive back 3 feet”.

ps.
Trying a “biggest yet” 7.5B model gemm4-nano:latest - takes 5.4GB memory - it also has been 4 minutes and ollama ps says “Stopping…” but the result has not come back still. No cigars here either.

Trying the even bigger 9.5GB model gemma4:e4b now. I’m collecting LLMs like kids are trading “Football Trading Cards”.

I wish I really understood all this - I think the URML prompt is about 5K words long, and I discovered the default Ollama Context is 4K, so it not so conveniently “forgets” the oldest part of the prompt.

Trying again with Ollama default context raised to 8K…

Trying again with an 11GB model and the context raised to 128K !!!

Success with qwen3.5:9b (11GB in memory, 128k context length)

1 Like

SUCCESS - Well it took 8 minutes at 100% CPU in 11GB

And 2nd try, it failed. How is AI not repeatable?

1 Like

Prototype GoPiGo3 URML “Runtime” Now Available

While the concept of a “Universal Robot Language” can seem esoteric, the URML project has just released a prototype URML runtime for the GoPiGo3.

Discussion on the scope and emergence is here.

Additionally, a discussion of how the GoPiGo robot “Lyrical Dave” has helped the URML dev team is here.

Update: The example mock GoPiGo3 runtime is available, not actually moving the physical bot yet.

2 Likes

First GoPiGo3 Robot runs “validated safe” URML Program

It was bound to happen, but didn’t expect it like this:

2 Likes

And then …

2 Likes

Unless you have an academic or business interest in certification of a way to use a robot API to be safe and reliable, the URML project adds unnecessary layer of complexity to programming robots.

I was hoping for a usable human - machine interface for the GoPiGo3 - it is not such for me. It is an interesting commercial robot concept which is demonstrable with a GoPiGo3, and the project has put the GoPiGo3 “on the map” in both a basic URML runtime and documenting what URML is and is not.

2 Likes

What Does It Look Like? (From my POV)

Steps to URML on the GoPiGo3

  1. Obviously, install GoPiGo3 API and URML

  2. Either have subscription to a commercial LLM,
    or set up a remote Ollama server with qwen3.5:9b LLM

  3. Create a prose statement expressing what you want your GoPiGo3 to do - Example:

  • “Announce ‘Driving forward 10 cm’, wait 10 seconds, drive forward 10 cm, then announce 'Wow that was fun. Lets do it again soon”
  1. Send it to the remote LLM writing (validated) output to “my.valid.urml.program.yaml”
  • wait 30 minutes for the first attempt to fail, then send it again and wait 7 minutes for successful translation.
    That’s just the way it is now - weird!
  1. Test run it:
./run_gopigo3.py -f my.valid.urml.program.yaml    
  1. Execute it on your real GoPiGo3:
./run_gopigo3.py -f my.valid.urml.program.yaml    --execute

(gopigo3) ubuntu@U26LDave:~/LyricalDave/systests/urml/mygopigo3$ ./run_gopigo3.py -f remote.qwen3.5_9b.gopigo3_t1.program.urml.yaml --execute
[gopigo3 example] gopigo3 example, running on urml-validator 0.2.0, urml-ros2-runtime 0.2.0
[gopigo3 example] --execute: this WILL move a connected GoPiGo3. Clear space around the robot.
[gopigo3 example] backend: real (executing on hardware)
URML on a basic GoPiGo3 - running remote.qwen3.5_9b.gopigo3_t1.program.urml.yaml (Discussion #523).
gopigo3 example, running on urml-validator 0.2.0, urml-ros2-runtime 0.2.0
robot: gopigo3_basic   drive_type: differential   max drive: 2.0 m

[VALID] program file: remote.qwen3.5_9b.gopigo3_t1.program.urml.yaml
   executed 4 steps, success=True
   wheel + speech calls, in order:
     emit_speech  -> espeak 'Driving forward 10 centimeters'
     wait_passively
     drive_by     -> easygopigo3.drive_cm(10.0)
     emit_speech  -> espeak 'Wow that was fun. Lets do it again soon.'

OR Use Your Flight Simulator Machine With A Big GPU

I have strictly avoided any non flight-sim use of my “Flight Sim Machine with NVIDIA RTX 4070 12GB GPU”, but the Internet promised me that Ollama server takes 0 processor and very little memory when not processing requests…

Using the GPU reduced the 30 minute requests to 41 seconds!

Other option if you have it - Install Ollama server on M-Series Mac (not my 8 year old Intel MacMini)

1 Like

Thanks for all the work you put into this!

1 Like

Ido here, the author of URML.
Thank you for this, genuinely.
A careful public evaluation that says plainly where the project does and does not earn its keep is worth more to me than any endorsement, and your “what URML is and is not” framing is exactly right.

You have put your finger on the real boundary.
For someone who knows their robot and writes their own Python, URML is a layer you do not need, and I would not pretend otherwise.
Where it earns its place is narrower: when an LLM is turning plain English into actions, when safety or certification has to be checkable, or when you want one program to run on more than one robot.
For a fluent GoPiGo3 programmer doing none of those, the honest answer is that it is overhead.

The one place I would gently push: the audience where it helps most is the opposite of you, the novice or the classroom, where “say it in English, and the robot only does what it was declared able to do safely” is the whole point.
That is the thread I would most like to keep pulling with the GoPiGo community.

And thank you for putting the GoPiGo3 on the URML map.
Dave earned it!!

1 Like

Dave is lovin’ this URML stuff - lots of stuff to do during his “playtime”.

Still some things to work out. Dave is testing “orbits”:

Not sure why I am pursuing getting the URML project to have a GoPiGo3 runtime - perhaps because I miss being needed as a tester and developer.

Many people told me I would miss working after I retired (9 years ago), and I told them “forget it - I’m going to play with my robots!”

Here I am playing with my robots pretending to be a tester and developer, but w/o the pressure and egos.

I just submitted a pull request that fixes three issues with the GoPiGo3 runtime:

  1. Correct speak primitive to use espeak-ng (instead of the obsolete espeak)
  2. Implemented “wait_passively” so if you tell your robot to wait 5 seconds it will.
  3. Correct orbit direction: URML ccw=positive but EasyGoPiGo3.orbit() ccw=negative.

Since the URML project implements real production software process, I am sure my “backroom” fixes and process will be rejected at first, but perhaps with assistance the ideas will get through.

Next up - find out why I can’t read my ToF DI Distance Sensor.

1 Like

I would like to think on these lines some. Indeed I am not currently an educator, and no longer a novice user. I do have a career of experience with “say it in English and the [thing] only does what it was [designed] to do” having worked in:

  • creating regulated applications and “rule based expert systems” with speech recognition for:
    • “Big rig” vehicle inspection collection,
    • Several in-vehicle voice navigation interfaces,
    • multi-state utility company client interactive voice response systems,
    • government assistance management IVRs
    • baby formula vendor information and call center IVR,
    • physician, pharmacist and cancer patient drug therapy safety protocol adherence IVR,
    • interactive voice pilot associate in combat aircraft

and have taught neophytes system design concepts and programming languages as the capabilities of computers, languages, and human interfaces have matured over my now 60 years “bending computers to my will”.

I believe "the robot only does what it was declared able to do safely” does not square with my experience with any robot perhaps short of the no longer marketed Amazon Astro.

Educational robots allow students to dream up intents, and discover the reality of the robot’s abilities and limitations by positive and negative experiences, but do not, as a norm, “declare” any safe abilities. Every educational robot requires the instructor create a “safe playground around the robot’s sensory and effector abilities”. I am aware of only one educational robot to date - the failed iRobot Create3 with always active self-protection functions.

My second, even greater disconnect is with intimating “say it … and the robot … does… it” will soon be available in the educational robotics space. Educators need robust, reliable, predictable, supported tools to develop pedagogy. This is perhaps the toughest part for a robot vendor to meet at scale, profitably.

Specific Points for the GoPiGo3 with URML:

  • The GoPiGo3 has no “safe abilities” to map URML primitives to,
  • The “urml translate” tool is currently too fragile and too limited for educator and student use
  • The flow of “NLU->URML->GoPiGo3 API” will hinder students learning design, programming, and basic robotics concepts.

All my opinions, of course. I wish there were more opinions haunting these fora, but alas it has been a bit lonely here these days.

Thanks again, @cyclicalobsessive , for all the time you’ve been putting into this project! It’s invaluable to us

I just wanted to bring up the case here that educators do not always have the goal to teach robotics concepts. Our robots are used in classrooms to support math, for example. For example:
Absolute values:
https://edu.modrobotics.com/mod/page/view.php?id=161

or even Biology in college (at the Masters’ level)
https://edu.modrobotics.com/mod/book/view.php?id=156

So the use of the GoPiGo goes beyond teaching programming concepts and robotics.

1 Like