Robonix package wrapping the Intel RealSense D435i RGBD camera. Owns the primitive/camera/* namespace. Exposes the camera’s RGB + aligned-depth streams under generic contracts so that mapping, scene, and any vision skill can resolve topic names through atlas (no hardcoded /camera_435i/... paths on the consumer side).
Capability surface
Contract
Mode
Transport
Source / handler
robonix/primitive/camera/driver
rpc
gRPC
Driver(CMD_INIT, config_json) — lifecycle gate
robonix/primitive/camera/rgb
topic_out
ROS 2
/<cam>/color/image_raw (sensor_msgs/Image)
robonix/primitive/camera/depth
topic_out
ROS 2
/<cam>/aligned_depth_to_color/image_raw
robonix/primitive/camera/extrinsics
topic_out
ROS 2
latched TransformStamped (TODO: republish from /tf_static)
robonix/primitive/camera/snapshot
rpc
MCP
one-shot RGB capture (TODO)
robonix/primitive/camera/depth_snapshot
rpc
MCP
one-shot depth capture (TODO)
The D435i’s internal IMU is deliberately not registered under primitive/imu/imu — the Ranger Mini’s MID-360 IMU is canonical for that contract (better noise, co-located with the lidar for SLAM). The camera IMU is still published to /<cam>/imu for anyone who wants it directly.
Driver-init lifecycle
start.sh only brings up the atlas bridge process. The bridge opens a gRPC server on port REALSENSE_DRIVER_PORT (default 50232), registers the capability and declares only primitive/camera/driver on atlas, then blocks on heartbeat awaiting Driver(CMD_INIT, config_json).
When rbnx boot invokes Init it passes the manifest’s config: block as JSON. The handler parses config (camera name, RGB/depth profiles, align_depth, IMU on/off), spawns ros2 launch realsense2_camera rs_launch.py …, waits for the first frame on the configured RGB topic, declares primitive/camera/{rgb, depth} on atlas, and returns ok. Atlas only ever advertises endpoints we’ve confirmed are publishing.
To drive Init manually (without rbnx boot): from any robonix gRPC client, call PrimitiveCameraDriver.Driver with command=0 and config_json='{}' against 127.0.0.1:50232.
License
This package: Apache-2.0 (matches realsense-ros upstream).
realsense_camera_rbnx
Robonix package wrapping the Intel RealSense D435i RGBD camera. Owns the
primitive/camera/*namespace. Exposes the camera’s RGB + aligned-depth streams under generic contracts so that mapping, scene, and any vision skill can resolve topic names through atlas (no hardcoded/camera_435i/...paths on the consumer side).Capability surface
robonix/primitive/camera/driverDriver(CMD_INIT, config_json)— lifecycle gaterobonix/primitive/camera/rgb/<cam>/color/image_raw(sensor_msgs/Image)robonix/primitive/camera/depth/<cam>/aligned_depth_to_color/image_rawrobonix/primitive/camera/extrinsicsrobonix/primitive/camera/snapshotrobonix/primitive/camera/depth_snapshotThe D435i’s internal IMU is deliberately not registered under
primitive/imu/imu— the Ranger Mini’s MID-360 IMU is canonical for that contract (better noise, co-located with the lidar for SLAM). The camera IMU is still published to/<cam>/imufor anyone who wants it directly.Driver-init lifecycle
start.shonly brings up the atlas bridge process. The bridge opens a gRPC server on portREALSENSE_DRIVER_PORT(default 50232), registers the capability and declares onlyprimitive/camera/driveron atlas, then blocks on heartbeat awaitingDriver(CMD_INIT, config_json).When
rbnx bootinvokes Init it passes the manifest’sconfig:block as JSON. The handler parses config (camera name, RGB/depth profiles, align_depth, IMU on/off), spawnsros2 launch realsense2_camera rs_launch.py …, waits for the first frame on the configured RGB topic, declaresprimitive/camera/{rgb, depth}on atlas, and returns ok. Atlas only ever advertises endpoints we’ve confirmed are publishing.Layout
Config (passed via
Driver(CMD_INIT, config_json))rgb_topic/depth_topiccan be overridden directly if your launch uses a non-default namespace.Build / run standalone
To drive Init manually (without rbnx boot): from any robonix gRPC client, call
PrimitiveCameraDriver.Driverwithcommand=0andconfig_json='{}'against127.0.0.1:50232.License
This package: Apache-2.0 (matches realsense-ros upstream).