A distributed system for remote robot teleoperation using ROS2, MQTT, and WebRTC. This project enables operators to control robots remotely and view live camera streams in a web dashboard with low latency.
The system is designed to scale from a single robot prototype to a large fleet of robots.
This project provides a complete pipeline:
Robot → MQTT Control → ROS2 → Web Dashboard Robot Camera → WebRTC Streaming → Web Dashboard
Operators can:
- Send control commands to robots
- Monitor telemetry data
- Watch live camera streams
- Manage multiple robots from a single interface
+---------------------+
| Web Dashboard |
| (React + WebRTC) |
+----------+----------+
|
WebSocket API
|
+----------v----------+
| Backend API |
| (FastAPI / Go) |
+----------+----------+
|
MQTT
|
+---------v--------+
| MQTT Broker |
| (EMQX) |
+---------+--------+
|
ROS2 Bridge
|
+---------v---------+
| Robot |
| ROS2 + Camera |
+---------+---------+
|
WebRTC Stream
|
Video Server
Robots subscribe to MQTT topics for control commands.
Example command flow:
Web Dashboard
↓
Backend API
↓
MQTT Broker
↓
ROS2 Node
↓
Robot Actuator
Supported commands:
- robot movement
- arm control
- system status
- task execution
Robots stream video using WebRTC for ultra-low latency viewing in the web dashboard.
Pipeline:
Robot Camera
↓
GStreamer Encoder
↓
WebRTC Publisher
↓
Streaming Server (SFU)
↓
Web Dashboard
Latency target:
150ms – 300ms
ros2-remote-robot/
│
├── robot/
│ ├── ros2_nodes/
│ │ ├── mqtt_bridge
│ │ ├── motion_controller
│ │ └── telemetry_node
│ │
│ ├── camera_stream/
│ │ └── webrtc_publisher
│ │
│ └── launch/
│
├── backend/
│ ├── api_server
│ ├── robot_manager
│ └── auth
│
├── dashboard/
│ ├── robot-control-ui
│ ├── video-viewer
│ └── telemetry-panel
│
├── infra/
│ ├── docker
│ ├── mqtt
│ └── streaming
│
└── docs/
- ROS2
- Python / C++
- GStreamer
- MQTT
- WebSocket
- JSON / Protobuf
- WebRTC
- SFU se