Show EOL distros:
Package Summary
The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts and Blaise Gassend
- License: BSD
- Repository: ros-pkg
- Source: svn https://code.ros.org/svn/ros-pkg/stacks/joystick_drivers/tags/joystick_drivers-1.4.2
Package Summary
The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts and Blaise Gassend
- License: BSD
- Source: svn https://code.ros.org/svn/ros-pkg/stacks/joystick_drivers/branches/electric_devel
Package Summary
The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts and Blaise Gassend
- License: BSD
- Source: git https://github.com/ros-drivers/joystick_drivers.git (branch: joystick_drivers-1.8)
Package Summary
ROS driver for a generic Linux joystick. The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Maintainer status: maintained
- Maintainer: Jonathan Bohren <jbo AT jhu DOT edu>
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts, Blaise Gassend
- License: BSD
- Bug / feature tracker: https://github.com/ros-drivers/joystick_drivers/issues
- Source: git https://github.com/ros-drivers/joystick_drivers.git (branch: joystick_drivers-1.9)
Package Summary
ROS driver for a generic Linux joystick. The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Maintainer status: maintained
- Maintainer: Jonathan Bohren <jbo AT jhu DOT edu>
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts, Blaise Gassend
- License: BSD
- Bug / feature tracker: https://github.com/ros-drivers/joystick_drivers/issues
- Source: git https://github.com/ros-drivers/joystick_drivers.git (branch: hydro-devel)
Package Summary
ROS driver for a generic Linux joystick. The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Maintainer status: maintained
- Maintainer: Jonathan Bohren <jbo AT jhu DOT edu>
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts, Blaise Gassend
- License: BSD
- Bug / feature tracker: https://github.com/ros-drivers/joystick_drivers/issues
- Source: git https://github.com/ros-drivers/joystick_drivers.git (branch: indigo-devel)
Package Summary
ROS driver for a generic Linux joystick. The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Maintainer status: maintained
- Maintainer: Jonathan Bohren <jbo AT jhu DOT edu>
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts, Blaise Gassend
- License: BSD
- Bug / feature tracker: https://github.com/ros-drivers/joystick_drivers/issues
- Source: git https://github.com/ros-drivers/joystick_drivers.git (branch: indigo-devel)
Package Summary
ROS driver for a generic Linux joystick. The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Maintainer status: maintained
- Maintainer: Jonathan Bohren <jbo AT jhu DOT edu>
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts, Blaise Gassend
- License: BSD
- Bug / feature tracker: https://github.com/ros-drivers/joystick_drivers/issues
- Source: git https://github.com/ros-drivers/joystick_drivers.git (branch: indigo-devel)
Package Summary
ROS driver for a generic Linux joystick. The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Maintainer status: maintained
- Maintainer: Jonathan Bohren <jbo AT jhu DOT edu>
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts, Blaise Gassend
- License: BSD
- Bug / feature tracker: https://github.com/ros-drivers/joystick_drivers/issues
- Source: git https://github.com/ros-drivers/joystick_drivers.git (branch: indigo-devel)
Package Summary
ROS driver for a generic Linux joystick. The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Maintainer status: developed
- Maintainer: Jonathan Bohren <jbo AT jhu DOT edu>
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts, Blaise Gassend
- License: BSD
- Bug / feature tracker: https://github.com/ros-drivers/joystick_drivers/issues
- Source: git https://github.com/ros-drivers/joystick_drivers.git (branch: melodic-devel)
Package Summary
ROS driver for a generic Linux joystick. The joy package contains joy_node, a node that interfaces a generic Linux joystick to ROS. This node publishes a "Joy" message, which contains the current state of each one of the joystick's buttons and axes.
- Maintainer status: maintained
- Maintainer: Jonathan Bohren <jbo AT jhu DOT edu>
- Author: Morgan Quigley, Brian Gerkey, Kevin Watts, Blaise Gassend
- License: BSD
- Bug / feature tracker: https://github.com/ros-drivers/joystick_drivers/issues
- Source: git https://github.com/ros-drivers/joystick_drivers.git (branch: main)
Supported Hardware
This node should work with any joystick that is supported by Linux.
API Stability
The ROS API of this node should be considered stable.
Nodes
joy_node
Provides a generic Linux joystick node.Subscribed Topics
joy/set_feedback (sensor_msgs/JoyFeedbackArray)- Force feedback control.
Published Topics
joy (sensor_msgs/Joy)- Outputs the joystick state.
Parameters
~dev (str, default: "/dev/input/js0")- Linux joystick device from which to read joystick events.
- Amount by which the joystick has to move before it is considered to be off-center. This parameter is specified relative to an axis normalized between -1 and 1. Thus, 0.1 means that the joystick has to move 10% of the way to the edge of an axis's range before that axis will output a non-zero value. Linux does its own deadzone processing, so in many cases this value can be set to zero.
- Rate in Hz at which a joystick that has a non-changing state will resend the previously sent message.
- Axis events that are received within coalesce_interval (seconds) of each other are sent out in a single ROS message. Since the kernel sends each axis motion as a separate event, coalescing greatly reduces the rate at which messages are sent. This option can also be used to limit the rate of outgoing messages. Button events are always sent out immediately to avoid missing button presses.
- When this parameter is false, each button and axis will report a value of 0 until it gets pressed/touched. This might be a problem e.g. for the trigger axes which should report 1.0 in their default untouched position. Setting this parameter to true forces the driver to read the actual joystick button values on startup and report the correct values even before the buttons/axes were touched. There is a small probability that reading out the initial state will not work for some combinations of gamepads and kernel versions, and that is why this parameter is false by default.
- The device to use for accessing force feedback function. It is usually one of /dev/input/event* devices. You can use udevadm monitor command when plugging in the gamepad to tell the right event file name.
Using this Package
For an example of using joy_node to control a teleoperation node with a joystick, see the tutorials.
In some cases, multiple joysticks may control a single robot. For example, a user may use the default joystick to drive a robot, but a second user may wish to use a different kind. Since the button mappings on each joystick may be different, it will be necessary to remap buttons on one joystick so they can match. See the Joystick Remapper package for details.
If you need to use the trigger axes (LT, RT), consider setting ~default_trig_val to true. If this parameter is not set, the triggers report a value of 0.0 until they are touched, which is wrong (because the value should be 1.0).
Force feedback
Most gamepads offer a force feedback function that can vibrate the gamepad. For it to work correctly, you have to specify correctly the ~dev_ff parameter (on Noetic, when this parameter is empty, an autodetection algorithm tries to guess it).
Once the force feedback device is correctly set, you can control the force feedback using the joy/set_feedback topic. Before trying it out, make sure the jumping gamepad on your table will not destroy anything. An example usage can look like this:
rostopic pub -1 /joy/set_feedback sensor_msgs/JoyFeedbackArray "array: [ {type: 1, id: 0, intensity: 1.0} ]"
The intensity field specifies the strength of the vibrations. 0 is no vibration, 1 is maximum.
Finding the correct force feedback device
If you do not know the correct value of the ~dev_ff parameter, here are a few tips to figure it out.
The name of the file you pass to ~dev_ff parameter can change between reconnects of the gamepad or reboots of your computer. To get a reliable experience, a udev rule giving an explicit name to this device seems like to best solution. Treat the tips in this section just as something you want to use in the initial development phase when you are testing and developing a feature.
One way is to look into folder /dev/input/by-id.
ls -la /dev/input/by-id/
The output can look like this:
lrwxrwxrwx 1 root root 10 Aug 12 19:08 usb-Chicony_Electronics_Co._Ltd._Integrated_Camera_0001-event-if00 -> ../event14 ... lrwxrwxrwx 1 root root 10 Aug 19 16:02 usb-Microsoft_Controller_3039373132373036323336303438-event-joystick -> ../event18 lrwxrwxrwx 1 root root 6 Aug 19 16:02 usb-Microsoft_Controller_3039373132373036323336303438-joystick -> ../js0
The listing shows a few symbolic links, one of them pointing to your js0 device. The symlink will end with -joystick. Look for a similarly named file, just ending with -event-joystick. You can either directly pass this value to ~dev_ff (in this case /dev/input/by-id/usb-Microsoft_Controller_3039373132373036323336303438-event-joystick), or you can follow the symbolic link to one of the /dev/input/event* files and set the event file as the parameter value (which would be /dev/input/event18 in this example).
Some gamepads will not appear in the /dev/input/by-id listing - e.g. Xbox ONE gamepad connected via the wireless dongle and xow driver.
In this case, the easiest way to find the force feedback event device is to disconnect the gamepad (or dongle) and run
udevadm monitor
Here is an example output of this command after plugging the gamepad back:
KERNEL[181478.230525] add /devices/pci0000:00/0000:00:08.1/0000:06:00.4/usb6/6-2 (usb) ... KERNEL[181481.500440] add /devices/virtual/input/input24 (input) KERNEL[181481.500573] add /devices/virtual/input/input24/event18 (input) KERNEL[181481.500659] add /devices/virtual/input/input24/js0 (input) UDEV [181481.502263] add /devices/virtual/input/input24 (input) UDEV [181481.512791] add /devices/virtual/input/input24/js0 (input) UDEV [181481.551194] add /devices/virtual/input/input24/event18 (input)
You can see that I have connected a gamepad that appeared as /dev/input/js0 with the force feedback device being /dev/input/event18.
Application
Microsoft Xbox 360 Wireless Controller for Windows
Table of index number of /joy.buttons:
Index |
Button name on the actual controller |
0 |
A |
1 |
B |
2 |
X |
3 |
Y |
4 |
LB |
5 |
RB |
7 |
start |
8 |
power |
10 |
cross key up |
11 |
cross key down |
12 |
cross key left |
13 |
cross key right |
14 |
back |
Microsoft Xbox 360 Wireless Controller for Linux
Table of index number of /joy.buttons:
Index |
Button name on the actual controller |
0 |
A |
1 |
B |
2 |
X |
3 |
Y |
4 |
LB |
5 |
RB |
6 |
back |
7 |
start |
8 |
power |
9 |
Button stick left |
10 |
Button stick right |
Table of index number of /joy.axes:
Index |
Axis name on the actual controller |
0 |
Left/Right Axis stick left |
1 |
Up/Down Axis stick left |
2 |
Left/Right Axis stick right |
3 |
Up/Down Axis stick right |
4 |
RT |
5 |
LT |
6 |
cross key left/right |
7 |
cross key up/down |
Microsoft Xbox 360 Wired Controller for Linux
Table of index number of /joy.buttons:
Index |
Button name on the actual controller |
0 |
A |
1 |
B |
2 |
X |
3 |
Y |
4 |
LB |
5 |
RB |
6 |
back |
7 |
start |
8 |
power |
9 |
Button stick left |
10 |
Button stick right |
Table of index number of /joy.axes:
Index |
Axis name on the actual controller |
0 |
Left/Right Axis stick left |
1 |
Up/Down Axis stick left |
2 |
LT |
3 |
Left/Right Axis stick right |
4 |
Up/Down Axis stick right |
5 |
RT |
6 |
cross key left/right |
7 |
cross key up/down |
Logitech Wireless Gamepad F710 (DirectInput Mode)
Table of index number of /joy.buttons:
Index |
Button name on the actual controller |
0 |
X |
1 |
A |
2 |
B |
3 |
Y |
4 |
LB |
5 |
RB |
6 |
LT |
7 |
RT |
8 |
back |
9 |
start |
10 |
Button stick left |
11 |
Button stick right |
Table of index number of /joy.axes:
Index |
Axis name on the actual controller |
0 |
Left/Right Axis stick left |
1 |
Up/Down Axis stick left |
2 |
Left/Right Axis stick right |
3 |
Up/Down Axis stick right |
4 |
cross key left/right |
5 |
cross key up/down |