移动机器人仿真或者实物控制中,经常要使用手柄来控制机器人,发布速度指令或其它的命令。以前用的时候会遇到过一些小问题,最近回忆记录一下。
一般的在ros中启动joy_node这个节点,系统默认设备是
/dev/input/js0
但是我的笔记本是/dev/input/js1
。如何查看新的设备呢?
在terminal中输入$ ls /dev/input
,可以看到类似这样的东西,代表输入的设备。
by-id event1 event12 event15 event2 event5 event8 js1 mouse1
by-path event10 event13 event16 event3 event6 event9 mice
event0 event11 event14 event17 event4 event7 js0 mouse0
我的电脑上手柄显示的设备为js0
。
输入命令$ ls -l /dev/input/js1
,可以查看设备的许可,如:
crw-rw-r--+ 1 root input 13, 1 4月 22 15:55 /dev/input/js1
一般来说手柄的权限是不需要设置的,如果需要开读写权限,可以输入
$ sudo chmod a+rw /dev/input/jsX
X对应具体的设备名称,一般是用不着的,但有些设备如相机,IMU连电脑需要开一下权限。
因为我的笔记本手柄的设备名称为/dev/input/js1
,所以在运行roscore后需要
rosparam set joy_node/dev "/dev/input/js1"
嫌麻烦可以用launch
<launch>
<node pkg="joy" type="joy_node" name="joy_node" output="screen">
<param name="dev" type="string" value="/dev/input/js1"/>
<param name="deadzone" value="0.12"/>
</node>
<launch>
两种方式,第一种,输入:
sudo jstest /dev/input/js1
,可以看到
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:of
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 Buttons: 0:off
1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off
按按手柄上的按键就能知道哪个对应哪个了。
第二种,看/joy
的消息,运行joy_node
节点,然后查看消息
rostopic echo /joy
可以看到:
header:
seq: 12
stamp:
secs: 1587565914
nsecs: 714403531
frame_id: ''
axes: [0.0, 0.0, 0.0, 0.0, -0.0, -0.0]
buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
按按手柄上的按键就明白了,最好拿张纸记一下。
可以用手柄控制小乌龟或者gazebo仿真中的小车会方便许多。这样按着按键车可以跑,松了按键车就能停下,避免一直开撞墙。