A full Robonix deployment for the Wheeltec R550 mini_tank: 2D SLAM mapping
with N10P LiDAR + Orbbec Astra S RGB-D camera, rtabmap, Nav2 navigation, and VLM
pilot. All components boot via rbnx boot from a single robonix_manifest.yaml.
Publishes sensor_msgs/LaserScan with frame_id=laser. The
base_link → laser TF edge comes from the URDF via robot_state_publisher.
Self-heal: 3 retry attempts if no LaserScan appears within the sentinel
timeout — recovers from N10P stream-start failures without a manual power cycle.
The camera subscribes to RGB and depth topics with permanent subscriptions
(no transient ROS nodes at call time). snapshot / depth_snapshot return the
latest cached frame as a JPEG-encoded sensor_msgs/Image.
Intrinsics binds directly to the Astra S native CameraInfo topic — no relay
needed. Extrinsics are declared in package_manifest.yaml but not implemented:
the URDF + robot_state_publisher already provide the base_link → camera_link
TF edge.
Astra S native topics (published by wheeltec_camera.launch.py):
Topic
Type
/camera/color/image_raw
sensor_msgs/Image
/camera/color/camera_info
sensor_msgs/CameraInfo
/camera/depth/image_raw
sensor_msgs/Image
/camera/depth/camera_info
sensor_msgs/CameraInfo
/camera/depth/points
sensor_msgs/PointCloud2
/camera/ir/image_raw
sensor_msgs/Image
/camera/ir/camera_info
sensor_msgs/CameraInfo
Services
mapping — rtabmap SLAM
Capability
Transport
Topic / Notes
robonix/service/map/driver
gRPC
Lifecycle
robonix/service/map/occupancy_grid
topic_out
/map (OccupancyGrid)
robonix/service/map/pointcloud
topic_out
/rtabmap/cloud_map
robonix/service/map/pose
topic_out
/robonix/map/pose
robonix/service/map/odom
topic_out
/rtabmap/odom
Sensor providers: lidar2d → n10p_lslidar, odom → r550_chassis.
Web UI at http://<robot-ip>:8091.
nav2 — goal-based navigation
Capability
Transport
Topic / Notes
robonix/service/navigation/driver
gRPC
Lifecycle
robonix/service/navigation/navigate
gRPC + MCP
Start a NavigateToPose run
robonix/service/navigation/navigate/status
gRPC + MCP
Poll run state
robonix/service/navigation/navigate/cancel
gRPC + MCP
Cancel active run
Provider pins: map → mapping, odom → r550_chassis, scan → n10p_lslidar.
At Driver(CMD_INIT): resolves Atlas providers, materializes the deploy-owned
Nav2 YAML, spawns nav2_bringup, waits for navigate_to_pose action server,
then declares capabilities. Missing required providers return deferred.
The deploy-owned config/nav2_params.yaml must be created next to
robonix_manifest.yaml — copy and tune
service-navigation-rbnx/config/nav2_params.example.yml.
Wheeltec R550 mini_tank — Robonix Deploy Primitives
A full Robonix deployment for the Wheeltec R550 mini_tank: 2D SLAM mapping with N10P LiDAR + Orbbec Astra S RGB-D camera, rtabmap, Nav2 navigation, and VLM pilot. All components boot via
rbnx bootfrom a singlerobonix_manifest.yaml.Package inventory
./primitive-wheeltec-r550-chassis-rbnx/robot_descriptionrobot_description./primitive-wheeltec-r550-chassis-rbnx/r550_chassisr550_chassis./primitive-wheeltec-r550-chassis-rbnx/n10p_lslidarn10p_lslidar./astra_s_cameraastra_s_camera./service-map-rbnxmapping./service-navigation-rbnxnav2package_manifest.jetson-native.yamlsceneSystem layer
50051500615007150081500915009350107Dependency graph
Primitives
1. robot_description — URDF model
Launch:
ros2 launch turn_on_wheeltec_robot robot_mode_description_minibot.launch.py mini_tank:=truerobonix/primitive/robot_description/driverPublishes
/robot_description(TRANSIENT_LOCAL) and spawnsrobot_state_publisherso the full TF tree is available to downstream consumers.2. chassis — chassis driver + IMU + EKF
Launch:
base_serial.launch.py+wheeltec_ekf.launch.pyrobonix/primitive/chassis/driverrobonix/primitive/chassis/odom/odom_combined(EKF-fused)robonix/primitive/chassis/moverobonix/primitive/chassis/twist_in/cmd_velrobonix/primitive/imu/driverrobonix/primitive/imu/imu/imu_data(Madgwick-filtered)TF published:
base_footprint → base_link(z=0.03715),base_footprint → gyro_link.Data flow (internal + external):
3. lidar — LSLIDAR N10P
Launch:
ros2 launch turn_on_wheeltec_robot wheeltec_lidar.launch.pyrobonix/primitive/lidar/driverrobonix/primitive/lidar/lidar/scanPublishes
sensor_msgs/LaserScanwithframe_id=laser. Thebase_link → laserTF edge comes from the URDF viarobot_state_publisher.Self-heal: 3 retry attempts if no LaserScan appears within the sentinel timeout — recovers from N10P stream-start failures without a manual power cycle.
4. camera — Orbbec Astra S RGB-D
Launch:
ros2 launch turn_on_wheeltec_robot wheeltec_camera.launch.pyrobonix/primitive/camera/driverrobonix/primitive/camera/rgb/camera/color/image_rawrobonix/primitive/camera/depth/camera/depth/image_rawrobonix/primitive/camera/intrinsics/camera/color/camera_inforobonix/primitive/camera/snapshotrobonix/primitive/camera/depth_snapshotrobonix/primitive/camera/extrinsicsThe camera subscribes to RGB and depth topics with permanent subscriptions (no transient ROS nodes at call time). snapshot / depth_snapshot return the latest cached frame as a JPEG-encoded
sensor_msgs/Image.Intrinsics binds directly to the Astra S native CameraInfo topic — no relay needed. Extrinsics are declared in
package_manifest.yamlbut not implemented: the URDF +robot_state_publisheralready provide thebase_link → camera_linkTF edge.Astra S native topics (published by wheeltec_camera.launch.py):
/camera/color/image_raw/camera/color/camera_info/camera/depth/image_raw/camera/depth/camera_info/camera/depth/points/camera/ir/image_raw/camera/ir/camera_infoServices
mapping — rtabmap SLAM
robonix/service/map/driverrobonix/service/map/occupancy_grid/map(OccupancyGrid)robonix/service/map/pointcloud/rtabmap/cloud_maprobonix/service/map/pose/robonix/map/poserobonix/service/map/odom/rtabmap/odomSensor providers:
lidar2d → n10p_lslidar,odom → r550_chassis. Web UI athttp://<robot-ip>:8091.nav2 — goal-based navigation
robonix/service/navigation/driverrobonix/service/navigation/navigaterobonix/service/navigation/navigate/statusrobonix/service/navigation/navigate/cancelProvider pins:
map → mapping,odom → r550_chassis,scan → n10p_lslidar. AtDriver(CMD_INIT): resolves Atlas providers, materializes the deploy-owned Nav2 YAML, spawns nav2_bringup, waits fornavigate_to_poseaction server, then declares capabilities. Missing required providers returndeferred.The deploy-owned
config/nav2_params.yamlmust be created next torobonix_manifest.yaml— copy and tuneservice-navigation-rbnx/config/nav2_params.example.yml.TF tree (full runtime)
Boot order
Primitives boot in dependency order. Services use the Atlas defer-queue: nav2 waits for mapping, which waits for lidar + chassis.
Environment
Propagated by
rbnx bootfrom theenv:block inrobonix_manifest.yaml:VLM_BASE_URLVLM_API_KEYVLM_MODELLOGINFO)ROS_DISTROhumble)Pre-export these in your shell or replace
${VLM_*}with literal values in the manifest.Host prerequisites
/opt/ros/humble/setup.bashturn_on_wheeltec_robotworkspace on the ROS package pathros-humble-nav2-bringup+ plugins)rbnxCLI on PATHnumpy,PIL(Pillow),grpcioQuickstart
License
Apache-2.0 (matches robonix upstream).