SLAM-Teleop is a specialized remote controller Android app designed for mobile robots, focusing on real-time SLAM (Simultaneous Localization and Mapping).
It provides a unified interface that combines precise joystick teleoperation with a live visual SLAM map, allowing operators to navigate and map simultaneously with ease. By rendering the robot’s occupancy grid and pose directly on the handheld device, slam-teleop eliminates the need for bulky laptop-based ground control stations (like Rviz) for routine mapping tasks.
The application leverages a direct native WebSocket connection to the ROS2 stack, ensuring low-latency telemetry and smooth control response without the overhead of heavy client libraries.
Features
- Zero Dependencies: No
roslib- uses native WebSocket + Rosbridge JSON protocol - Low Latency: Fire-and-forget UDP-like packet dropping for smooth joystick control
- MJPEG Video: Optional camera stream via WebView
- SDK 52 Compatible: Locked to Expo SDK 52
Setup
-
Install Dependencies
npm install -
Start the Server
npx expo start -
Run on Phone
- Install Expo Go from the App Store / Play Store
- Scan the QR Code
- Enter your Robot’s IP (default: 192.168.1.8) and click “Connect”
How It Works
This app communicates directly with rosbridge_server using the Rosbridge v2 JSON protocol over WebSocket:
// Advertise topic
{ op: 'advertise', topic: '/cmd_vel', type: 'geometry_msgs/Twist' }
// Publish velocity
{ op: 'publish', topic: '/cmd_vel', msg: { linear: {x: 0.5, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.2} } }
No external libraries needed - just native WebSocket API built into React Native.
Robot Setup
Ensure rosbridge_server is running on your robot:
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
Troubleshooting
- Network: Ensure phone and robot are on the same WiFi
- Port: Rosbridge default is
9090, video server is8080