Remote Teleop
Provides a widget for remotely controlling/joysticking a robot including a low-latency video stream of one or more cameras. Establishes a direct connection to the robot using WebRTC, always preferring local connections over proxied ones.
The capability supports publishing messages on ROS topics of type geometry_msgs/Twist
or sensor_msgs/Joy
(resp. geometry_msgs/msg/Twist
and sensor_msgs/msg/Joy
in ROS 2). The video stream is provided by the WebRTC Video capability, more details on the supported video sources can be found there. Once installed, the device page on the Transitive Robotics Portal can be used to select available parameters and obtain an HTML snippet to embed the parameterized widget into other web applications.
The widget can be customized using CSS. In the default configuration the joystick is below the video, which makes it convenient to use as a soft-joystick when walking with the robot, but using CSS it can also be placed as an overlay on the video, e.g., in the lower left or right corner.
The capability also supports game controllers, e.g., XBox controllers, plugged into the same machine where the web page with the front-end widget is open. This is particularly powerful when using Joy
topics, as it transmits all the axes and buttons the controller has to offer. Combined with joy_teleop
running on the robot, this enables the user to control multiple degrees of freedom of the robot, e.g., arms, forks of a fork-lift, and direction of a snow-blower. The buttons can be configured to turn things on and off on the robot such as mowers, snow-blowers, or lights. See below for an example config for joy_teleop
.
Disclaimer
Please be aware of the dangers of remotely controlling a robot. By using this capability you assume complete responsibility for the safe operation of the robot you are controlling using this capability and accept and agree to our Terms of Service.
Dependencies
Please see the Dependencies section for WebRTC Video capability, the capability that this one is based on.
Features
- Supports both
Twist
andJoy
topics - Supports both ROS 1 and ROS 2
- On-screen soft-joystick
- 🎮 Gamepad support
Safety Features
- uses the same connection for video and control, preventing control without working video
- dead-person switch: only sends movement commands when user actively drags the joystick. Stops when:
- network drops
- client-side disruptions occur (e.g., a popup appears)
- stops sending commands when connection lag increases beyond 500 ms.
Testing
One very easy way to test this capability is using turtlesim
(ros2 run turtlesim turtlesim_node
) together with joy_teleop
using the following config.yml
, which seems to work well for Xbox controllers. This uses Button LB
as dead-person switch, and the A
button clears:
joy_teleop:
ros__parameters:
turtle1:
type: topic
interface_type: geometry_msgs/msg/Twist
topic_name: turtle1/cmd_vel
deadman_buttons: [4]
axis_mappings:
linear-x:
axis: 1
scale: -1
offset: 0
angular-z:
axis: 0
scale: -1
offset: 0
clear:
type: service
interface_type: std_srvs/srv/Empty
service_name: clear
buttons: [0]
Latest version: 0.4.4, published: 8/26/2023, 6:35:09 PM