sl-firmware created pull request seb/saltylab-firmware#53

sl-firmware
Sat, 28 Feb 2026 23:20:45 -0500

53#feat: rosbridge WebSocket for web UI (port 9090)#

Summary

docker-compose.yml — new rosbridge service on port 9090 (host networking, depends on saltybot-ros2 + stm32-bridge + csi-cameras)

rosbridge.launch.py — rosbridge_websocket + 4× image_transport/republish nodes (JPEG 75% compressed cameras)

rosbridge_params.yaml — topic whitelist + WebSocket settings

SENSORS.md — rosbridge connection section with roslibjs snippet, topic table, bandwidth tips

package.xml — added exec_depends for rosbridge_server, image_transport, image_transport_plugins

Topic whitelist

/map                              nav_msgs/OccupancyGrid
/scan                             sensor_msgs/LaserScan
/tf  /tf_static                   tf2_msgs/TFMessage
/saltybot/imu                     sensor_msgs/Imu
/saltybot/balance_state           std_msgs/String
/cmd_vel                          geometry_msgs/Twist
/person/*                         (custom — person detection)
/camera/*/image_raw/compressed    sensor_msgs/CompressedImage

Compressed image transport

Four image_transport/republish nodes compress the raw CSI camera streams:

/camera/<name>/image_raw (640×480 YUYV, ~900 KB/frame) →

/camera/<name>/image_raw/compressed (JPEG 75%, ~15–25 KB/frame)

Packages already installed in saltybot/ros2-humble:jetson-orin:

ros-humble-rosbridge-server

ros-humble-image-transport-plugins

Browser connection

var ros = new ROSLIB.Ros({ url: 'ws://jetson.local:9090' });

Test plan

docker compose up -d rosbridge

ss -tlnp | grep 9090 — confirm WebSocket listening

Connect from browser console with roslibjs

Subscribe to /scan and verify data arrives

Subscribe to /camera/front/image_raw/compressed at throttle_rate 200ms

Subscribe to /map and verify OccupancyGrid received