Skip to main content
Requires OS 0.7.0 or newer.
As the robot drives around, it keeps the views worth keeping — each one tied to a spot on the map and to when it was seen. That’s its spatial memory, and your skills can search it. Remembered views on the map, in the web app's Nav page You ask in plain language (“the kitchen”, “a banana”, “where you saw my airpods”), a vision model reviews everything remembered on this map, and you get back the best match — with an image, map coordinates, and a timestamp.

Declaring it

Like any other interface, one annotation:

Searching

A search takes a while — a model is reading through a lot of pictures. So begin() starts it and hands you back a reader, which you wait on with self.wait_for():
Waiting through self.wait_for() is what keeps Stop responsive — press it mid-search and the skill unwinds like any other. Give it a generous timeout; a well-travelled map can take a couple of minutes.

What comes back

A RecallVerdict: found=False is not an error. It means the search worked and the answer is “nowhere” — worth saying out loud. Check error separately:

Driving to what you found

Remembered coordinates are in the map frame, not relative to where the robot stands now — that’s what local_frame=False says.
verdict.theta is in radians, but navigate_to_position takes theta_degrees. Convert with math.degrees() if you want the robot to face the way it was facing — or leave it out, as above.

The shipped skill

search_memory already does the basic version, in full:
image= is the useful bit: it hands the remembered photo to the agent along with the words, so it can look at what was found rather than take the sentence on faith. (It writes its guidelines as a class docstring — the shorthand shipped skills use.) Add it to an agent and the robot will search before claiming it hasn’t seen something:

Where the memory lives

On the robot, one set per map — remembering is automatic while it drives. Browse or clear them from the web app’s Nav page, above.