---
title: The teleop_tools arrive in ROS 2 Dashing!
description: The teleop_tools package has landed to ROS 2 Dashing code base! We will
  see in this post what is it, why was it ported and how to use it.
url: https://canonical.com/blog/the-teleop_tools-arrive-in-ros-2-dashing?format=md
---

1. [Blog](https://canonical.com/blog)
2. Article

---

[Jeremie Deray](https://canonical.com/blog/author/artivis "More about Jeremie Deray")

5 September 2019

# The teleop\_tools arrive in ROS 2 Dashing!

[robotics](https://canonical.com/blog/tag/robotics)
[ROS2](https://canonical.com/blog/tag/ros2)

---

Share the article
> Please note that this blog post has old information that may no longer be correct. We invite you to read the content as a starting point but please search for more updated information in the [ROS documentation](https://docs.ros.org/).

After exploring some [ROS 2 subtleties](https://ubuntu.com/blog/components-vs-plugins-in-ros-2) and implementing some [CLI](https://ubuntu.com/blog/ros-2-command-line-interface) 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](https://github.com/artivis/ros2_playground/tree/master/demo_plugin_component). 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.

## mouse\_teleop

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,

## key\_teleop

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](http://wiki.ros.org/key_teleop)

How to use,

```
$ ros2 run key_teleop key_teleop
```

The following interface should appear in your terminal,

## joy\_teleop

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](http://docs.ros.org/melodic/api/sensor_msgs/html/msg/Joy.html) message (e.g. published by a `joy`node), 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](http://wiki.ros.org/joy_teleop)

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

```
joy_teleop:
  ros__parameters:
    move:
      type: topic
      interface_type:  geometry_msgs/msg/Twist
      topic_name: cmd_vel
      axis_mappings:
        linear-x:
          axis: 1
          scale: 0.5
        angular-z:
          axis: 2
          scale: 0.5

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

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

How to use,

```
ros2 launch joy_teleop joy_teleop.launch.py
```

Note that the package provides a [configuration file example](https://github.com/ros-teleop/teleop_tools/blob/dashing-devel/joy_teleop/config/joy_teleop_example.yaml) to get you started.

## Conclusion

`teleop_tools` [just landed](https://github.com/ros-teleop/teleop_tools/pull/35) 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](https://discourse.ros.org/t/twist-mux-teleop-tools-porting-to-ros2/9448/8) and (hopefully not so many) tickets on [github](https://github.com/ros-teleop/teleop_tools)!

[Get in touch

Interested in running Ubuntu in your organization?](https://ubuntu.com/about/contact-us/form)

## Sign up for our newsletter

Get the latest Canonical news and updates in your inbox.

Work email:

\*I agree to receive information about Canonical's
products and services.

By submitting this form, I confirm that I have read and agree to [Canonical's Privacy Policy](https://canonical.com/legal/dataprivacy).

Sign up

## Share on

---

## Related posts

[### Extending ROS Noetic Support with ESM-Enabled Content Snaps](https://canonical.com/blog/extending-ros-noetic-support-with-esm-enabled-content-snaps)

Canonical has now extended its ESM (Expanded Security Maintenance) for ROS coverage to ROS Noetic content-sharing snaps. With ESM for ROS now available in both deb and snap...

[Florencia Cabral Berenfus](https://canonical.com/blog/author/flor-cabral)

17 December 2025

[### Discover your fully open source robotics observability at ROSCon 2025](https://canonical.com/blog/roscon-2025)

Another year, another ROSCon! This year we’re heading to Singapore, and Canonical is once again thrilled to sponsor this important community event. Just like last year in...

[Gabriel Aguiar Noury](https://canonical.com/blog/author/g-aguiar-noury)

22 October 2025

[### Canonical is now a platinum member in the Open Source Robotics Alliance](https://canonical.com/blog/osra-membership)

Ubuntu is the home of ROS. The very first ROS distribution, Box Turtle, launched on Ubuntu 8.04 LTS, Hardy Heron, and since then, Ubuntu and ROS have grown hand in hand. With...

[Gabriel Aguiar Noury](https://canonical.com/blog/author/g-aguiar-noury)

20 August 2025

[### ROS Noetic is EOL – take action to maintain fleet security](https://canonical.com/blog/ros-noetic-is-eol-take-action-to-maintain-fleet-security)

As of May 2025, the Robot Operating System (ROS) Noetic Ninjemys officially reached its end of life (EOL). First released in 2020 as the final ROS (1) distribution, ROS Noetic...

[Florencia Cabral Berenfus](https://canonical.com/blog/author/flor-cabral)

8 August 2025
