Robot and gamepad
For simple control of a mobile robot, it is definitely worth using a gamepad. Even for people who have no experience with computer games, pad control will be very intuitive. It will enable precision and greater control over wheel speeds, which will increase safety for the robot itself and its surroundings. In this article, we will discuss how to control it easier than, for example, from the keyboard with
This article is based on a publicly available
joy2twist repository combining gamepad control in the Robot Operating System 2 (ROS 2).
Joy2Twist package creates a ROS 2 node, allowing control the ROS-powered mobile and manipulation robots with Logitech F710 gamepad. Joy2Twist node converts
sensor_msgs/Joy message to
geometry_msgs/Twist in order to provide velocity commands for the robot. Therefore, this package is compliant with any other gamepad controllers which are able to publish the
Quick start guide
Connect a gamepad USB receiver to the USB port of robot.
Make sure the gamepad is in DirectInput Mode (switch in front o the pad with letters D and X -> select D).
Download joy2twist Docker image in the robot:
docker pull husarion/joy2twist:humble
- Create a configuration file:
- Paste the content inside save quit
# This button mapping should be adjusted to the specific controller
# The following map is suited for Logitech F710
angular_z: 0 # Left joystick
linear_x: 3 # Right joystick
linear_y: 2 # Right joystick
dead_man_switch: 4 # LB
fast_mode: 7 # RT
slow_mode: 5 # RB
o> and then <
x> to save and quit.
Run the following Docker command:
docker run -d \
--name joy2twist \
--restart unless-stopped \
--device /dev/input \
--volume $PWD/joy2twist.yaml:/joy2twist.yaml \
ros2 launch joy2twist gamepad_controller.launch.py joy2twist_params_file:=/joy2twist.yaml
ROSbot demo quick start
Steps 1-3 are same as above.
Clone the joy2twist repository:
git clone https://github.com/husarion/joy2twist.git
- Create and modify if needed (see comments) the
.envfile based on the
cp .env.template .env
- Run the example:
docker compose -f compose.rosbot.yaml up
In case of any problems visit joy2twist repository for more information.
In order for your robot to work with the joy2twist package, it must work on the following ROS topics for full compatibility. The joy2twist ROS 2 node is translating
joy topic to
cmd_vel topic with the following interface:
Following parameters change the joystick's axes mapped to given robot axes of freedom. For more information about parameter values, refer to the joy package wiki page.
~axis_linear_x(int, default: 3)
~axis_linear_y(int, default: 2)
~axis_angular_z(int, default: 0)
The robot can be operated at 3 scales of speed depending on pressed buttons. It's possible to adjust velocity scaling factors using a config file. The Units are m/s for linear movement and rad/s for angular movement.
fast(float, default: 1)
regular(float, default: 0.5)
slow(float, default: 0.2)
|slow driving mode|
|fast driving mode|
Gamepad with ROS 2 - examples
The basic premise of the technology is that most gamepads operate on Bluetooth wireless transmission. Robots, on the other hand, can be equipped with Bluetooth receivers that allow for remote control using a device such as a gamepad. Depending on the robot model, control can include a variety of functions, such as movement, object manipulation, or even executing simple programming tasks.
In some examples and repositories a gamepad can be used to control the ROSbot. For example:
- Gamepad control without PC (ROSbot 2R / 2 PRO)
- Mapping the environment (ROSbot 2R / 2 PRO)
- Gamepad control without PC (ROSbot XL)
- Mapping the environment (ROSbot XL)
Left bumper (Enable Movement) is used as a dead man's switch, acting analogously to teach pendants in industrial robots. To make a move, this button must be pressed all the time.
In summary, controlling robots with gamepads is an interesting technology that can have many applications. It can be used for learning programming and robot control, as well as for improving safety in dangerous places or simply having fun. The joy2twist package is a great example of the application of the ROS environment in mobile robotics in practice.
by Jan Brzyk Husarion
Do you need any support with completing this project or have any difficulties with software or hardware? Feel free to describe your thoughts on our community forum: https://community.husarion.com/ or to contact with our support: firstname.lastname@example.org