Robonix package wrapping the Orbbec Gemini 330-series (and other Orbbec) RGBD cameras. 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/... paths on the consumer side).
Uses the apt-installed ros-humble-orbbec-camera / ros-humble-orbbec-description packages — no source build needed.
start.sh only brings up the atlas bridge process. The bridge registers the
shared lifecycle Driver automatically; the package manifest must not declare
the deprecated camera-specific Driver contract. It then awaits
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, model, profiles, depth_registration, IMU on/off), spawns ros2 launch orbbec_camera orbbec_camera.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.
Leave device_preset empty to use the upstream driver’s working Default
preset. If set, it must be a named string preset rather than a numeric value.
On robots with more than one Orbbec camera, set either serial_number or
usb_port so the driver cannot bind a different camera due to USB enumeration
order. usb_port is the stable topology path reported by the Orbbec driver,
for example 2-3.
orbbec_camera_rbnx
Robonix package wrapping the Orbbec Gemini 330-series (and other Orbbec) RGBD cameras. 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/...paths on the consumer side).Uses the apt-installed
ros-humble-orbbec-camera/ros-humble-orbbec-descriptionpackages — no source build needed.Capability surface
robonix/lifecycle/driverDriver(CMD_INIT, config_json)lifecyclerobonix/primitive/camera/rgb/<cam>/color/image_raw(sensor_msgs/Image)robonix/primitive/camera/depth/<cam>/depth/image_raw(sensor_msgs/Image, 16UC1)robonix/primitive/camera/extrinsicsrobonix/primitive/camera/snapshotrobonix/primitive/camera/depth_snapshotDriver-init lifecycle
start.shonly brings up the atlas bridge process. The bridge registers the shared lifecycle Driver automatically; the package manifest must not declare the deprecated camera-specific Driver contract. It then awaitsDriver(CMD_INIT, config_json).When
rbnx bootinvokes Init it passes the manifest’sconfig:block as JSON. The handler parses config (camera name, model, profiles, depth_registration, IMU on/off), spawnsros2 launch orbbec_camera orbbec_camera.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))Leave
device_presetempty to use the upstream driver’s workingDefaultpreset. If set, it must be a named string preset rather than a numeric value.On robots with more than one Orbbec camera, set either
serial_numberorusb_portso the driver cannot bind a different camera due to USB enumeration order.usb_portis the stable topology path reported by the Orbbec driver, for example2-3.Supported
camera_modelvalues (from/opt/ros/humble/share/orbbec_camera/config/):gemini330_series— default, covers Gemini 335/336/330/335L/336L/330L/335Lg/335Legemini2,gemini2L,gemini210femto_bolt,femto_mega,femtoastra2,astragemini305,gemini345,gemini345_lg,gemini435_lelidar— Pulsar ME450 / SL450Build / run standalone
Prerequisites
License
Apache-2.0 (matches orbbec_camera upstream).