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(default1000000) — must match the controller firmware.urdf_path(default"") — the URDF used formove_poseIK; empty falls back to the SDK's packaged model.ik_pos_tol(default0.05m) — 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) androbonix_api. The SDK wheel ships in therobot-beingbeyond-d1deployment repo undertools/func_verify/lib/— justpip installthat whl.- Serial permissions:
sudo chmod 666 /dev/ttyUSB0, or add your user todialout. scripts/start.shdefaults to$HOME/miniconda3/envs/bb_d1_robonix/bin/python3; override withBLOCK_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_poseonly commands a pose when IK converges withinik_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