PUDA Dobot Vision Validation
Goal
Prevent dobot-m1pro motion in the IMRE/MOF cell when the visible physical setup does not support the requested transfer. Before a physical command, capture a fresh passive frame from the IMRE-MOF IP camera, inspect the clean pixels, annotate the Dobot-relevant regions, compare expected and observed state, and keep the execution gate closed when the source, destination, approach, corridor, or neighbouring equipment cannot be verified.
This is a physical safety gate, not motion authorization. It does not replace protocol validation, live PUDA state, measured robot pose, controller alarms, homing, collision limits, fixture calibration, equipment interlocks, or operator approval.
When to Use
Use this skill before Dobot operations whose safety depends on visible setup, especially:
pick_from, place_to, safe_move, or home
- tube transfers involving the 4 × 6 tube rack (
A1–D6)
- BioShake positions (
A1–D6)
- Centrifuge 1 or Centrifuge 2 positions (
1–6)
- the CAP/QBot exchange region
- recovery after an interrupted or uncertain side-effecting action
- a validation-only request where no robot motion should occur
Do not use vision as proof that a coordinate is calibrated, a gripper contains a tube, a controller is alarm-free, or a centrifuge/BioShake is safe to access. Verify those separately.
Critical Gate
Before any physical Dobot motion:
- Identify the current site/project. Run
puda env current when supported; on CLI versions without env, run puda config list and record the environment/site identity from the configured project context.
- Confirm the exact machine ID is
dobot-m1pro and query live state. A stale idle record is not readiness.
- Extract the requested source, destination, addressable position, and required-clear path from the current request/protocol.
- Capture a fresh passive image with
scripts/capture_image.sh. Do not move the camera or robot merely to obtain evidence unless separately approved.
- Record the camera status/pose when available. The deployed reference pose is described in
references/dobot-workspace-visual-identification.md.
- Inspect the clean image before drawing overlays.
- Mark every visible Dobot-relevant region and classify source, destination, approach, corridor, neighbouring fixtures, and occlusions.
- Compare expected and observed state.
- Keep the gate closed unless every required visual condition is
OK and all non-visual prerequisites independently pass.
- Vision approval still does not authorize motion. Execute only after the user or approved workflow separately authorizes the robot command.
If a physical action was interrupted or timed out, do not replay it from the image alone. Treat its effect as unknown, reconstruct state from fresh image plus live machine evidence, and ask before executing a safe suffix.
Deployed Machine and Camera Profile
| Field |
Value |
| Site/environment |
IMRE/MOF; confirm from current PUDA project/configuration |
| Machine ID |
dobot-m1pro |
| Machine family |
4-axis Dobot M1Pro arm with tube gripper |
| Image source |
Passive IMRE-MOF IP-camera stream configured at runtime with DOBOT_VISION_RTSP_URL |
| Camera ID |
imre-mof-ipcam |
| Reference pose |
PTZ status azimuth 74.9°, elevation 57.3°, zoom 1× (camera units 749/573/10) |
| Calibration |
No metric camera-to-robot calibration is established by this skill |
| Workspace model |
Tube rack, BioShake, two centrifuges, CAP/QBot exchange region, Dobot base, and visible transfer corridor |
| Coordinate model |
Robot coordinates and named positions are authoritative; image pixels are not robot coordinates |
| Safety gate |
Any mismatch, uncertain identity, obstruction, clipped target, hidden gripper approach, or unverified corridor blocks motion |
Profile identity is (IMRE/MOF, dobot-m1pro, imre-mof-ipcam, camera_pose). Region polygons and reference appearance are valid only when the fresh frame visibly matches the reference pose. Never transfer pixel coordinates, credentials, occupancy, or calibration to another camera or site.
Dobot-Relevant Workspace Regions
| Region |
Machine-native positions |
Required visual checks |
TUBE-RACK |
A1–D6 |
full rack orientation, requested tube position, neighbouring clearance, no displaced tube |
BIOSHAKE |
A1–D6 |
target holder visible, BioShake not visibly obstructed, access path clear; live idle/interlock checked separately |
CENTRIFUGE-1 |
slots 1–6 |
rotor/holder and requested slot visible; lid/access and live stopped state checked separately |
CENTRIFUGE-2 |
slots 1–6 |
rotor/holder and requested slot visible; lid/access and live stopped state checked separately |
CAP-QBOT |
CAP exchange plus cap MTP A1–D6 |
exchange point visible, capper deck clear for robot access, no unexpected item in approach |
DOBOT-BASE |
fixed robot base |
base and adjacent cables/fixtures visibly normal; never treat base occupancy as an obstruction |
TRANSFER-CORRIDOR |
safe-height arm travel between regions |
no visible foreign object, raised lid, cable, fixture, or human intrusion; hidden portions remain unverified |
GRIPPER-APPROACH |
final vertical approach to source/destination |
end effector and target approach visible enough to establish clearance |
The camera frame can be self-occluded by the arm. If the arm hides the target, gripper, CAP point, or travel corridor, classify it not visible; do not infer clearance from an earlier frame.
Addressable Position Checks
For a requested position such as tube-rack B2 or Centrifuge 2 slot 3:
- Validate the name against the current Dobot position definition.
- Establish fixture orientation from physical geometry and a current authoritative reference.
- Crop the complete parent fixture from the fresh image.
- Keep a clean unannotated crop.
- Inspect the requested position and its immediate neighbours.
- Do not draw a full coordinate grid over tubes, centrifuge slots, BioShake positions, or cap wells.
- Report one of:
present — required tube/object is clearly visible at the requested position;
absent — position is clearly visible and empty;
needs confirmation — position is localized but exact state/identity is uncertain;
not visible — framing, occlusion, reflection, or resolution prevents checking it.
Completion criterion: the named position is valid, fixture orientation is established, and the position has an evidence-based status. needs confirmation and not visible keep the gate closed.
Vision Validation Workflow
1. Extract expected state
Record at minimum:
| Region/position |
Expected object/state |
Role |
Required? |
| source |
tube/object present and accessible |
pick |
yes |
| destination |
empty or correctly prepared |
place |
yes |
| transfer corridor |
clear |
motion path |
yes |
| neighbouring equipment |
safe access state |
interlock context |
yes |
Also record the expected gripper state and all non-visual prerequisites.
Completion criterion: every physical precondition has a named expected observation or is explicitly classified as non-visual.
2. Capture fresh passive evidence
Configure a credential-free local MediaMTX/RTSP endpoint at runtime and run:
export DOBOT_VISION_RTSP_URL='rtsp://<configured-local-stream>/<path>'
./puda-dobot-vision-validation/scripts/capture_image.sh \
/tmp/dobot-vision-$(date -u +%Y%m%dT%H%M%SZ).jpg
Record:
- UTC capture time from the host, not the camera overlay
- clean image path, size, dimensions, and SHA-256
- camera ID and measured PTZ pose/status when available
- whether capture was passive
The IMRE-MOF camera's on-image date/time overlay may be incorrect and must not be used as provenance.
Completion criterion: a fresh, valid, non-empty image exists with host UTC provenance and hash.
3. Inspect clean pixels conservatively
Before annotation, report:
- whether the entire requested source and destination fixtures are visible
- whether the requested position can be resolved
- whether the gripper approach is visible
- whether the visible transfer corridor is clear
- all unexpected occupied, displaced, raised, or obstructing objects
- all clipped, hidden, reflective, or ambiguous regions
Consult references/dobot-workspace-visual-identification.md. Historical images support morphology and pose matching only; they never prove current occupancy.
Completion criterion: every required and unexpected region is classified without expectation-biased guessing.
4. Annotate and verify
Create an annotated copy while preserving the clean original. Draw:
- the visible cell/workspace boundary;
- one perspective-aligned polygon per relevant fixture/region;
- source and destination labels;
EMPTY, OCCUPIED, OBSTRUCTED, or NOT VISIBLE state labels;
- a legend.
Use physical fixture boundaries, not the footprint of the occupying tube/object. Do not encode robot coordinates from image pixels. Independently inspect the annotated copy and reject overlays that clip targets, overlap unrelated fixtures, or obscure evidence.
The committed reference is assets/dobot-ipcamera-workspace-reference-annotated.jpg. It is a pose/morphology example, not current-run evidence.
5. Compare expected and observed
| Region/position |
Expected |
Observed |
Confidence |
Status |
| source |
required tube/object present |
current visual observation |
high/medium/low |
OK / needs confirmation / MISMATCH / not visible |
| destination |
prepared and accessible |
current visual observation |
high/medium/low |
status |
| corridor |
clear |
current visual observation |
high/medium/low |
status |
Every required region gets exactly one status:
OK: current pixels support the expected state with adequate confidence.
needs confirmation: visible but exact state or identity is uncertain.
MISMATCH: current state conflicts with the requested setup.
not visible: framing or occlusion prevents verification.
obstructed: an item or machine geometry blocks required inspection/access.
6. Gate execution
Continue only when:
- all required visual checks are
OK;
- source and destination are both visible and consistent;
- gripper approach and visible corridor are clear;
- live machine states and equipment interlocks independently pass;
- robot pose/controller state is current;
- the user or approved workflow separately authorizes execution.
Any needs confirmation, MISMATCH, not visible, or obstructed result keeps the gate closed. A setup change requires a new image and a new independent validation.
Output Format
Report:
- Profile and evidence — site, machine, camera pose, host UTC, clean/annotated paths and hashes.
- Visibility summary — source, destination, gripper approach, transfer corridor, and clipped/occluded regions.
- Expected-vs-observed table — one status per required region/position.
- Non-visual prerequisites — current machine state, measured pose, controller alarms, BioShake/centrifuge state, interlocks, and authorization.
- Gate decision —
PASS, BLOCKED, or NEEDS CONFIRMATION.
- Execution statement — explicitly state whether any command or motion occurred.
Current-Run Evidence Policy
Each validation is independent. Use only the current request/protocol, a fresh image, current machine/fixture definitions, and same-profile references for morphology. Never copy occupancy, tube presence, gripper state, clearance, or orientation from an earlier run.
The committed clean reference was captured passively on 2026-07-22T06:31:00Z at camera status 749/573/10. It shows the cell from the reference pose but does not establish any later state. Its SHA-256 and limitations are recorded in the visual-identification reference.
Common Pitfalls
- Using the camera's incorrect date/time overlay as capture time.
- Treating a broad overhead view as proof that the arm's full 3D swept volume is clear.
- Inferring a hidden source/destination behind the Dobot arm.
- Calling a tube position from rack occupancy without resolving the requested well.
- Treating visible centrifuge rotors as proof they are stopped or interlocked.
- Treating a visible BioShake as proof it is idle or unclamped.
- Using image pixels as robot coordinates or calibration.
- Reusing reference-image occupancy as current evidence.
- Automatically replaying an uncertain interrupted pick/place action.
- Moving the camera or robot merely to improve validation without separate approval.
- Executing because vision passed without separate motion authorization.
Verification Checklist
1---2name: puda-dobot-vision-validation3description: Use before IMRE/MOF Dobot M1Pro pick, place, home, or transfer workflows when visible workspace setup and clearance must be checked. Capture a fresh passive IP-camera frame, verify the source, destination, gripper approach, transfer corridor, and neighbouring fixtures, and keep execution blocked when anything is mismatched, occluded, or uncertain.4license: MIT5---67# PUDA Dobot Vision Validation89## Goal1011Prevent `dobot-m1pro` motion in the IMRE/MOF cell when the visible physical setup does not support the requested transfer. Before a physical command, capture a fresh passive frame from the IMRE-MOF IP camera, inspect the clean pixels, annotate the Dobot-relevant regions, compare expected and observed state, and keep the execution gate closed when the source, destination, approach, corridor, or neighbouring equipment cannot be verified.1213This is a **physical safety gate**, not motion authorization. It does not replace protocol validation, live PUDA state, measured robot pose, controller alarms, homing, collision limits, fixture calibration, equipment interlocks, or operator approval.1415## When to Use1617Use this skill before Dobot operations whose safety depends on visible setup, especially:1819- `pick_from`, `place_to`, `safe_move`, or `home`20- tube transfers involving the 4 × 6 tube rack (`A1`–`D6`)21- BioShake positions (`A1`–`D6`)22- Centrifuge 1 or Centrifuge 2 positions (`1`–`6`)23- the CAP/QBot exchange region24- recovery after an interrupted or uncertain side-effecting action25- a validation-only request where no robot motion should occur2627Do not use vision as proof that a coordinate is calibrated, a gripper contains a tube, a controller is alarm-free, or a centrifuge/BioShake is safe to access. Verify those separately.2829## Critical Gate3031Before any physical Dobot motion:32331. Identify the current site/project. Run `puda env current` when supported; on CLI versions without `env`, run `puda config list` and record the environment/site identity from the configured project context.342. Confirm the exact machine ID is `dobot-m1pro` and query live state. A stale `idle` record is not readiness.353. Extract the requested source, destination, addressable position, and required-clear path from the current request/protocol.364. Capture a **fresh passive image** with [`scripts/capture_image.sh`](scripts/capture_image.sh). Do not move the camera or robot merely to obtain evidence unless separately approved.375. Record the camera status/pose when available. The deployed reference pose is described in [`references/dobot-workspace-visual-identification.md`](references/dobot-workspace-visual-identification.md).386. Inspect the clean image before drawing overlays.397. Mark every visible Dobot-relevant region and classify source, destination, approach, corridor, neighbouring fixtures, and occlusions.408. Compare expected and observed state.419. Keep the gate closed unless every required visual condition is `OK` and all non-visual prerequisites independently pass.4210. Vision approval still does not authorize motion. Execute only after the user or approved workflow separately authorizes the robot command.4344If a physical action was interrupted or timed out, do not replay it from the image alone. Treat its effect as unknown, reconstruct state from fresh image plus live machine evidence, and ask before executing a safe suffix.4546## Deployed Machine and Camera Profile4748| Field | Value |49|---|---|50| Site/environment | IMRE/MOF; confirm from current PUDA project/configuration |51| Machine ID | `dobot-m1pro` |52| Machine family | 4-axis Dobot M1Pro arm with tube gripper |53| Image source | Passive IMRE-MOF IP-camera stream configured at runtime with `DOBOT_VISION_RTSP_URL` |54| Camera ID | `imre-mof-ipcam` |55| Reference pose | PTZ status azimuth `74.9°`, elevation `57.3°`, zoom `1×` (camera units 749/573/10) |56| Calibration | No metric camera-to-robot calibration is established by this skill |57| Workspace model | Tube rack, BioShake, two centrifuges, CAP/QBot exchange region, Dobot base, and visible transfer corridor |58| Coordinate model | Robot coordinates and named positions are authoritative; image pixels are not robot coordinates |59| Safety gate | Any mismatch, uncertain identity, obstruction, clipped target, hidden gripper approach, or unverified corridor blocks motion |6061Profile identity is `(IMRE/MOF, dobot-m1pro, imre-mof-ipcam, camera_pose)`. Region polygons and reference appearance are valid only when the fresh frame visibly matches the reference pose. Never transfer pixel coordinates, credentials, occupancy, or calibration to another camera or site.6263## Dobot-Relevant Workspace Regions6465| Region | Machine-native positions | Required visual checks |66|---|---|---|67| `TUBE-RACK` | `A1`–`D6` | full rack orientation, requested tube position, neighbouring clearance, no displaced tube |68| `BIOSHAKE` | `A1`–`D6` | target holder visible, BioShake not visibly obstructed, access path clear; live idle/interlock checked separately |69| `CENTRIFUGE-1` | slots `1`–`6` | rotor/holder and requested slot visible; lid/access and live stopped state checked separately |70| `CENTRIFUGE-2` | slots `1`–`6` | rotor/holder and requested slot visible; lid/access and live stopped state checked separately |71| `CAP-QBOT` | CAP exchange plus cap MTP `A1`–`D6` | exchange point visible, capper deck clear for robot access, no unexpected item in approach |72| `DOBOT-BASE` | fixed robot base | base and adjacent cables/fixtures visibly normal; never treat base occupancy as an obstruction |73| `TRANSFER-CORRIDOR` | safe-height arm travel between regions | no visible foreign object, raised lid, cable, fixture, or human intrusion; hidden portions remain unverified |74| `GRIPPER-APPROACH` | final vertical approach to source/destination | end effector and target approach visible enough to establish clearance |7576The camera frame can be self-occluded by the arm. If the arm hides the target, gripper, CAP point, or travel corridor, classify it `not visible`; do not infer clearance from an earlier frame.7778## Addressable Position Checks7980For a requested position such as tube-rack `B2` or Centrifuge 2 slot `3`:81821. Validate the name against the current Dobot position definition.832. Establish fixture orientation from physical geometry and a current authoritative reference.843. Crop the complete parent fixture from the fresh image.854. Keep a clean unannotated crop.865. Inspect the requested position and its immediate neighbours.876. Do not draw a full coordinate grid over tubes, centrifuge slots, BioShake positions, or cap wells.887. Report one of:89 - `present` — required tube/object is clearly visible at the requested position;90 - `absent` — position is clearly visible and empty;91 - `needs confirmation` — position is localized but exact state/identity is uncertain;92 - `not visible` — framing, occlusion, reflection, or resolution prevents checking it.9394Completion criterion: the named position is valid, fixture orientation is established, and the position has an evidence-based status. `needs confirmation` and `not visible` keep the gate closed.9596## Vision Validation Workflow9798### 1. Extract expected state99100Record at minimum:101102| Region/position | Expected object/state | Role | Required? |103|---|---|---|---|104| source | tube/object present and accessible | pick | yes |105| destination | empty or correctly prepared | place | yes |106| transfer corridor | clear | motion path | yes |107| neighbouring equipment | safe access state | interlock context | yes |108109Also record the expected gripper state and all non-visual prerequisites.110111Completion criterion: every physical precondition has a named expected observation or is explicitly classified as non-visual.112113### 2. Capture fresh passive evidence114115Configure a credential-free local MediaMTX/RTSP endpoint at runtime and run:116117```bash118export DOBOT_VISION_RTSP_URL='rtsp://<configured-local-stream>/<path>'119./puda-dobot-vision-validation/scripts/capture_image.sh \120 /tmp/dobot-vision-$(date -u +%Y%m%dT%H%M%SZ).jpg121```122123Record:124125- UTC capture time from the host, not the camera overlay126- clean image path, size, dimensions, and SHA-256127- camera ID and measured PTZ pose/status when available128- whether capture was passive129130The IMRE-MOF camera's on-image date/time overlay may be incorrect and must not be used as provenance.131132Completion criterion: a fresh, valid, non-empty image exists with host UTC provenance and hash.133134### 3. Inspect clean pixels conservatively135136Before annotation, report:137138- whether the entire requested source and destination fixtures are visible139- whether the requested position can be resolved140- whether the gripper approach is visible141- whether the visible transfer corridor is clear142- all unexpected occupied, displaced, raised, or obstructing objects143- all clipped, hidden, reflective, or ambiguous regions144145Consult [`references/dobot-workspace-visual-identification.md`](references/dobot-workspace-visual-identification.md). Historical images support morphology and pose matching only; they never prove current occupancy.146147Completion criterion: every required and unexpected region is classified without expectation-biased guessing.148149### 4. Annotate and verify150151Create an annotated copy while preserving the clean original. Draw:152153- the visible cell/workspace boundary;154- one perspective-aligned polygon per relevant fixture/region;155- source and destination labels;156- `EMPTY`, `OCCUPIED`, `OBSTRUCTED`, or `NOT VISIBLE` state labels;157- a legend.158159Use physical fixture boundaries, not the footprint of the occupying tube/object. Do not encode robot coordinates from image pixels. Independently inspect the annotated copy and reject overlays that clip targets, overlap unrelated fixtures, or obscure evidence.160161The committed reference is [`assets/dobot-ipcamera-workspace-reference-annotated.jpg`](assets/dobot-ipcamera-workspace-reference-annotated.jpg). It is a pose/morphology example, not current-run evidence.162163### 5. Compare expected and observed164165| Region/position | Expected | Observed | Confidence | Status |166|---|---|---|---|---|167| source | required tube/object present | current visual observation | high/medium/low | `OK` / `needs confirmation` / `MISMATCH` / `not visible` |168| destination | prepared and accessible | current visual observation | high/medium/low | status |169| corridor | clear | current visual observation | high/medium/low | status |170171Every required region gets exactly one status:172173- `OK`: current pixels support the expected state with adequate confidence.174- `needs confirmation`: visible but exact state or identity is uncertain.175- `MISMATCH`: current state conflicts with the requested setup.176- `not visible`: framing or occlusion prevents verification.177- `obstructed`: an item or machine geometry blocks required inspection/access.178179### 6. Gate execution180181Continue only when:182183- all required visual checks are `OK`;184- source and destination are both visible and consistent;185- gripper approach and visible corridor are clear;186- live machine states and equipment interlocks independently pass;187- robot pose/controller state is current;188- the user or approved workflow separately authorizes execution.189190Any `needs confirmation`, `MISMATCH`, `not visible`, or `obstructed` result keeps the gate closed. A setup change requires a new image and a new independent validation.191192## Output Format193194Report:1951961. **Profile and evidence** — site, machine, camera pose, host UTC, clean/annotated paths and hashes.1972. **Visibility summary** — source, destination, gripper approach, transfer corridor, and clipped/occluded regions.1983. **Expected-vs-observed table** — one status per required region/position.1994. **Non-visual prerequisites** — current machine state, measured pose, controller alarms, BioShake/centrifuge state, interlocks, and authorization.2005. **Gate decision** — `PASS`, `BLOCKED`, or `NEEDS CONFIRMATION`.2016. **Execution statement** — explicitly state whether any command or motion occurred.202203## Current-Run Evidence Policy204205Each validation is independent. Use only the current request/protocol, a fresh image, current machine/fixture definitions, and same-profile references for morphology. Never copy occupancy, tube presence, gripper state, clearance, or orientation from an earlier run.206207The committed clean reference was captured passively on `2026-07-22T06:31:00Z` at camera status 749/573/10. It shows the cell from the reference pose but does not establish any later state. Its SHA-256 and limitations are recorded in the visual-identification reference.208209## Common Pitfalls210211- Using the camera's incorrect date/time overlay as capture time.212- Treating a broad overhead view as proof that the arm's full 3D swept volume is clear.213- Inferring a hidden source/destination behind the Dobot arm.214- Calling a tube position from rack occupancy without resolving the requested well.215- Treating visible centrifuge rotors as proof they are stopped or interlocked.216- Treating a visible BioShake as proof it is idle or unclamped.217- Using image pixels as robot coordinates or calibration.218- Reusing reference-image occupancy as current evidence.219- Automatically replaying an uncertain interrupted pick/place action.220- Moving the camera or robot merely to improve validation without separate approval.221- Executing because vision passed without separate motion authorization.222223## Verification Checklist224225- [ ] Current PUDA project/site identity recorded.226- [ ] Exact machine ID `dobot-m1pro` selected.227- [ ] Expected source, destination, position, gripper state, and corridor extracted.228- [ ] Fresh passive IP-camera image captured and hashed.229- [ ] Host UTC used; camera overlay time ignored.230- [ ] Camera pose/status recorded and compared with the reference pose.231- [ ] Clean image retained before annotation.232- [ ] Source and destination fixtures fully visible.233- [ ] Requested position directly inspected without a full grid overlay.234- [ ] Gripper approach and visible transfer corridor checked.235- [ ] Occlusions and unseen portions explicitly reported.236- [ ] Annotated image independently checked against clean pixels.237- [ ] Live robot pose/state and equipment interlocks verified separately.238- [ ] Gate closed for uncertainty, mismatch, obstruction, or invisibility.239- [ ] Final report states whether any command or motion occurred.