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

Merged
seb merged 1 commits from sl-firmware/rosbridge into main 2026-03-01 00:22:22 -05:00
Collaborator

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
## 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 ```javascript 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
seb force-pushed sl-firmware/rosbridge from e78ec5a88c to 6420e07487 2026-03-01 00:22:10 -05:00 Compare
seb merged commit 226e653e7c into main 2026-03-01 00:22:22 -05:00
seb deleted branch sl-firmware/rosbridge 2026-03-01 00:22:23 -05:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#53
No description provided.