The teleop_tools arrive in ROS 2 Dashing!

Jeremie Deray

on 5 September 2019

Ubuntu & ROS 2

After exploring some ROS 2 subtleties and implementing some CLI tools we felt were missing, the time has come to get our hands even more dirty.

What better way to learn than by doing?

C’est en forgeant qu’on devient forgeron

Humm, pardon my french,

Practice makes perfect

To enter the realm of ROS 2 and discover its wording, its patterns, its colors, we decided it was time to do something a little larger than yet another publisher demo. Don’t get me wrong, these kinds of examples are great and often are a goto when the new things aren’t totally mastered yet. But dealing with an actual package better highlights the various intricacies of the code – how the pieces fit together and possibly blow up in your face.

We will leave covering the differences between ROS 1 and ROS 2 to past and future posts.  Here instead we will advertise a ROS 2 port of a very useful set of ROS 1 tools: the teleop_tools package.

teleop_tools, tools for tele-operation

As its name suggests, the teleop_tools package is a collection of tools for tele-operating a robot. The three main components are mouse_teleop, key_teleop and joy_teleop.

First allow me to briefly motivate why this particular package was chosen for this exercise. First, I personally use at least two of the three tools on a (very) regular basis. They do a simple job but do it well. If you have never used them, give them a look, they are worth it. Especially if you are a ROS 2 user, there aren’t many such tools just yet and after testing these you may wonder why you’d bother with any others. Second, they aren’t overly complex, but their functionality covers a lot of the main aspects of ROS 2: parameters, topics, services, actions, etc. Combining these two facts, this package is an ideal candidate for better learning ROS 2 while bringing something very useful to the community.


Is your 12 000 dpi gamer mouse getting dusty? QtCreator isn’t quite the thrill of a FPS game? Mourn no more, for the mouse_teleop package allows you to send twist commands over a topic with your mouse!

How to use,

$ ros2 run mouse_teleop mouse_teleop

The following GUI should appear,

mouse_teleop gui


This package offers a very simple terminal-based interface to send twist commands at the tip of the four arrow keys of a keyboard.

ROS 1 wiki page

How to use,

$ ros2 run key_teleop key_teleop

The following interface should appear in your terminal,

key_teleop interface


The joy_teleop package is likely the more interesting of the three tools as it offers extended functionality compared to the previous two. Listening to a sensor_msgs/msg/Joy message (e.g. published by a joynode), it supports mapping different actions to each button (or buttons combination) of a remote controller through a configuration file. Mapped actions can be any of the three basic ROS 2 interfaces,

  • publishing to a topic
  • requesting a service
  • sending an action goal

ROS 1 wiki page

A brief example of a joy_teleop configuration file is given below, showcasing each of the three interfaces.

      type: topic
     interface_type:  geometry_msgs/msg/Twist
      topic_name: cmd_vel
          axis: 1
          scale: 0.5
          axis: 2
         scale: 0.5

      type: service
      interface_type: example_interfaces/srv/AddTwoInts
      service_name: add_two_ints
        a: 11
        b: 31
     buttons: [10]

      type: action
      interface_type: action_tutorials/action/Fibonacci
      action_name: fibonacci
        order: 5
     buttons: [4, 5, 6, 7]

How to use,

ros2 launch joy_teleop

Note that the package provides a configuration file example to get you started.


teleop_tools just landed in ROS 2 Dashing, so it’s not available in the ROS Debian repositories just yet. If you’d like to use it now you can always build it from source, but it should be released soon. Overall the experience was successful– I learned more of the ins and outs of ROS 2, and now there’s another incredibly useful set of tools available to the community!

Do you know of any other tools such as teleop_tools that you are deeply missing in your new ROS 2 habits? Please let us know or feel free to share any other feedback and (hopefully not so many) tickets on github!

Talk to us today

Interested in running Ubuntu Desktop in your organisation?

Newsletter signup

Select topics you’re
interested in

In submitting this form, I confirm that I have read and agree to Canonical’s Privacy Notice and Privacy Policy.

Are you building a robot on top of Ubuntu and looking for a partner? Talk to us!

Contact Us

Related posts

The State of Robotics – May 2020

With several countries finally emerging from lockdowns and markets showing signs of economic recovery, we’ve seen the newscycle steadily shift its focus away...

How to set up TurtleBot3 in minutes with snaps (2/2)

Welcome to part two of our TurtleBot3 set up, namely the turtlebot3c project. In part one, we rearranged the launch files and configuration files of the...

The State of Robotics – April 2020

*Information and resources around robotics during the COVID-19 pandemic can be found at the end of this article.* So, we’ve passed the first quarter of 2020....