Back to packages

robonix.skill.pick.vertical_grasp

Pick-up-a-named-object skill — orchestrates perception + manipulation services.

README

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_object over MCP;
  • service/perception/grasp_pose/grasp_request over gRPC;
  • service/manipulation/execute_grasp over 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 the put_down tool.

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

  1. If reset is available, move to the calibrated observation pose.
  2. Detect object_name with llm_detect.
  3. Compute one vertical grasp pose with grasp_pose (retry=0).
  4. Execute approach, descend/close, and lift through roboarm_ik.
  5. Verify fresh gripper feedback on /arm/joint_states_single.
  6. On success, leave the object held. If configured, move to the teach-safe pose while keeping the gripper closed.
  7. 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.