Skip to main content
Complete Chapter 2 before this experiment. A non-blocking mission keeps running on the robot while your Python program does other work. Here you will sample a camera and ask GRID cloud to detect an object. These detections are observations, not motion commands or proof that an inspection passed. Download this guide as a notebook

1. Connect and localize

Start in a project folder with a GRID development session:
Keep that CLI process running. Use its workspace .venv Python environment (or select that kernel if you use the downloadable notebook). Run the snippets in order in one Python session. Set your registered robot name and use the numbered selectors. The robot must have navigation enabled.
Choose a completed map and a saved mission on it. Start and verify the robot’s location in the viewer before attempting the observation loop.
Choose the saved mission you reviewed in the editor. Change MISSION_PAGE if needed.

2. Set the observation task

Choose an RGB camera, such as front_left on Vision60 or head_camera_left on R1Pro. Start with OBJECT = "door". The client uses credentials from the CLI session. Each run saves its images and records in a new folder.
This helper reads a camera image, calls the detector, and saves evidence. It also logs images and counts to the Telemetry UI when available.

3. Check one image while stationary

Confirm the full image shows the correct camera and surroundings. Zero detections is valid. A dark, stale, blurred, or wrong-camera image is not useful evidence. The helper checks for missing or nearly black images; you must check the rest.

4. Run the mission and detect objects

This cell moves the robot after RUN. It calls the camera and detector in sequence. Slow requests reduce the sampling rate. blocking=False lets the notebook continue while the robot executes the mission.
The finally block requests cancellation after completion, errors, or interruption, including a failure during mission start. Confirm that the physical robot stopped. Sensor, inference, and telemetry requests can delay cancellation. The time limit is checked between samples; it is not a hard stop deadline. Use the e-stop if needed. Inspect nav.result() and nav.events() after an error. A mission that ended did not necessarily succeed. Review saved samples even if navigation failed.

5. Review a saved image

The folder contains full images, detector boxes and scores, errors, and robot poses near each image read. Those poses are not object locations or synchronized capture poses. Select a sample to see its full image and numbered detection boxes.

6. Ask about one detection

Select a box that actually contains the object. Ask a question about the crop, then compare the answer with the full image. The answer is saved beside its sample reference. Change the question if you change the object. A crop can hide context or a false detection.
Repeated sightings are not unique objects. No detections does not prove absence. A model answer does not verify an inspection and never changes the robot’s route. The same camera and model calls work when the robot is stationary.

7. Finish

Run cleanup even after an error. Collect results first. If stopping cannot be confirmed, use the physical stop. Review camera images before sharing the folder.