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
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.
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.
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.
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 !!!