Back to packages

robonix.primitive.beingbeyond.d1.arm

D1 6-DOF arm primitive — absolute joint control (rad) + Cartesian move_pose via the SDK's arm-only IK.

README

primitive-beingbeyond-d1-arm-rbnx

中文版

robonix.primitive.beingbeyond.d1.arm — Robonix primitive for the BeingBeyond D1 6-DOF arm and 2-DOF head pan/tilt. Talks to the beingbeyond_d1_sdk HeadArm serial link directly, with no ROS backend.

Capabilities

Contract Transport What it does
robonix/primitive/arm/driver gRPC lifecycle (CMD_INIT / ACTIVATE / DEACTIVATE / SHUTDOWN)
robonix/primitive/arm/info gRPC joint count, names, limits and other static facts
robonix/primitive/arm/move_joint gRPC absolute joint angles for the 6 arm joints (rad)
robonix/primitive/arm/get_state gRPC read the current joint angles / end-effector pose
robonix/primitive/arm/move_pose gRPC Cartesian pose, solved by the SDK's arm-only IK
robonix/primitive/arm/set_head gRPC position the head pan/tilt (yaw / pitch)

Only the 6 arm joints are exposed. The 2 head joints share the same serial port and are driven separately through set_head, holding their pose during move_joint. State is read over rpc — with no ROS backend there is no state_joint topic_out stream.

Configuration

Fields, units, defaults and failure conditions are in config.spec. The essentials:

  • dev (default /dev/ttyUSB0) — the HeadArm serial device. The arm and the head share this one port; do not open it from another process at the same time.
  • baudrate (default 1000000) — must match the controller firmware.
  • urdf_path (default "") — the URDF used for move_pose IK; empty falls back to the SDK's packaged model.
  • ik_pos_tol (default 0.05 m) — IK position tolerance; a solution exceeding it is rejected.

Every field also falls back to a matching D1_ARM_* env var.

Dependencies and permissions

  • Python 3.10 (the wheel is cp310 + manylinux_2_17_x86_64, so nothing else will install it).
  • beingbeyond_d1_sdk (≥ 0.2.0) and robonix_api. The SDK wheel ships in the robot-beingbeyond-d1 deployment repo under tools/func_verify/lib/ — just pip install that whl.
  • Serial permissions: sudo chmod 666 /dev/ttyUSB0, or add your user to dialout.
  • scripts/start.sh defaults to $HOME/miniconda3/envs/bb_d1_robonix/bin/python3; override with BLOCK_GRASP_PYTHON.

Build and run

bash scripts/build.sh     # rbnx codegen, generating the gRPC stubs
bash scripts/start.sh     # or let rbnx boot start it from a deployment manifest
rbnx caps -v | grep arm   # check all 6 capabilities registered and the provider is ACTIVE

Shutdown is handled by the Driver's CMD_SHUTDOWN (on_shutdown calls robot.close() to release the serial port). There is no cleanup beyond that, so no scripts/stop.sh is provided.

Safety

  • On a new robot, run the read-only paths first (get_state / info) and confirm the hardware e-stop independently halts the arm before commanding any motion.
  • Providers stop hardware output on input timeout, process exit, or CMD_SHUTDOWN.
  • move_pose only commands a pose when IK converges within ik_pos_tol; otherwise it returns an error without moving.

Layout

package_manifest.yaml   config.spec   README.md   README_CN.md
scripts/{build.sh, start.sh}
d1_arm/{__init__.py, main.py}

License

MulanPSL-2.0