skill-pick-vertical-grasp-rbnx
Robonix user-facing pick skill for the Piper + Orbbec Dabai DCW vertical-grasp
pipeline. It owns robonix/skill/pick/*.
Catalog name: robonix.skill.pick.vertical_grasp.
Capability surface
| Contract | Transport | Purpose |
|---|---|---|
robonix/skill/pick/driver |
gRPC | Lifecycle (CMD_INIT / lazy CMD_ACTIVATE) |
robonix/skill/pick/pick |
MCP | Pick one named object and leave it held |
robonix/skill/pick/put_down |
MCP | Put down the held object at the configured fixed pose |
pick accepts only an open-vocabulary object_name:
{"object_name": "comb"}
The call is synchronous, uses a fixed 60 s budget, and makes one grasp
attempt. put_down has an empty request.
Runtime paths
pilot / executor
-> pick_skill.pick(object_name) MCP
-> llm_detect.detect_object MCP
-> grasp_pose.grasp_request gRPC
-> roboarm_ik.execute_grasp (approach/grasp/lift) gRPC
-> return while holding the object
pilot / executor
-> pick_skill.put_down() MCP
-> roboarm_ik.put_down gRPC
Atlas resolves all endpoints. There is no legacy ROS-service or
/graspnet fallback in this skill.
Lifecycle and dependencies
At boot, CMD_INIT only parses configuration and the skill remains
INITIALIZED. On the first tool call, CMD_ACTIVATE resolves upstream
endpoints.
Pipeline mode requires:
service/perception/object_detect/detect_objectover MCP;service/perception/grasp_pose/grasp_requestover gRPC;service/manipulation/execute_graspover gRPC.
The following manipulation endpoints are optional during activation:
reset: observation-pose setup and failure recovery;teach_safe: optional post-pick parking while keeping the gripper closed;put_down: fixed-pose release used by theput_downtool.
If put_down is unavailable, picking can still succeed and leave the object
held, but the put_down tool returns an error. In vla mode,
robonix/skill/vla/execute over MCP replaces the three pipeline dependencies.
Pipeline mode
- If
resetis available, move to the calibrated observation pose. - Detect
object_namewithllm_detect. - Compute one vertical grasp pose with
grasp_pose(retry=0). - Execute approach, descend/close, and lift through
roboarm_ik. - Verify fresh gripper feedback on
/arm/joint_states_single. - On success, leave the object held. If configured, move to the teach-safe pose while keeping the gripper closed.
- On failure, run a best-effort reset for recovery.
The grasp z and approach distance come from grasp_pose; the skill does not
perform camera calibration or IK itself.
Configuration
mode: pipeline # pipeline or vla
vla_max_steps: 50 # used only in vla mode
gripper_open_width: 0.08 # metres
gripper_close_width: 0.0 # metres
gripper_grasp_threshold_width: 0.005 # measured width above this means held
gripper_feedback_timeout_s: 2.0
gripper_joint_states_topic: /arm/joint_states_single
park_at_teach_safe_after_pick: false
The deploy may override park_at_teach_safe_after_pick; other values shown
above are the implementation defaults.
Layout
skill-pick-vertical-grasp-rbnx/
├── package_manifest.yaml
├── capabilities/
│ ├── driver.v1.toml
│ ├── pick.v1.toml
│ ├── put_down.v1.toml
│ ├── lib/{pick,manipulation}/srv/
│ └── service/{perception,manipulation}/
├── pick_skill/atlas_bridge.py
└── scripts/{build,start}.sh
This is a pure-Python orchestration package. Its build is codegen-only; it does not vendor a ROS package.
Build and verification
bash scripts/build.sh
# With the deploy running:
rbnx caps | grep pick
rbnx ask "please pick up the comb"
After a successful pick, call put_down before requesting another object if
the object should be released.
License
MulanPSL-2.0.