1、连接及属性配置
(1)、首先将无线手柄的usb接收器插到电脑上,输入命令检查手柄能否被识别:
$ ls /dev/input/
#显示如下输出:
by-id event0 event10 event2 event4 event6 event8 js0 mouse0
by-path event1 event11 event3 event5 event7 event9 mice mouse1
上面显示的js0即为无线手柄的接口。注意:有的电脑会出现js0,js1 。这个不用担心,拔出手柄的usb接收器后再看设备,缺少那个设备就是joystick的接口。一般默认的无线手柄接口是js0
(2)、使用 jstest 命令来检查它是否工作,及测试无线手柄每个键所对应的数字,
$ sudo jstest /dev/input/js0
结果如下图所示,该无线手柄有6个轴向输入,12个按键输入。可以分别按动按键来测试按键所对应的数字。(注意:手柄要选择direct 模式 也就是手柄前侧xd切换按钮那里)
(3)、用如下命令查看该接口所属群组及权限情况
$ ls -l /dev/input/js0
# 显示如下
crw-rw-r--+ 1 root root 13, 0 3月 2 11:43 /dev/input/js0
其默认的所有者和群组都是root 。
(4)、将js0的群组修改成dialout
$ sudo chgrp dialout /dev/input/js0
(5)、查看最终的修改结果如下
$ ls -l /dev/input/js0
#最终的权限及结果如下
crw-rw-r--+ 1 root dialout 13, 0 3月 2 11:43 /dev/input/js0
2、无线手柄驱动安装与配置
(1)、安装ros的joy包 和joystick_driver包
$ sudo apt-get install ros-indigo-joy
$ sudo apt-get install ros-indigo-joystick-drivers
(2)、打开新终端,运行roscore。然后在启动joy_node节点之前要先设定一下这个节点所读取的手柄设备:
# 打开新终端
$ rosparam set joy_node/dev "/dev/input/js0"
(3)、打开新终端,启动 joy_node节点
$ rosrun joy joy_node
如果所有配置都正确,则会出现如下输出:
[ INFO] [1551505586.552909590]: Opened joystick: /dev/input/js0. deadzone_: 0.050000.
(4)、测试能否用无线手柄向ROS发送消息,可以通过如下命令来查看节点发布的消息
$ rostopic echo /joy
按下无线手柄的按键,若显示类似如下的信息,则表示电脑能成功收到手柄发送的消息。在应用中只要节点订阅该话题既可以通过手柄来向该节点发布命令。
header:
seq: 1448
stamp:
secs: 1551506649
nsecs: 887291735
frame_id: ''
axes: [-0.0, -0.0, -0.0, -0.0, -0.0, -0.0]
buttons: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
---
header:
seq: 1449
stamp:
secs: 1551506650
nsecs: 23211942
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]
---
1、在 turtlebot_teleop 功能包中,launch 目录下有如下文件。
2、打开其中的 ps3_teleop.launch 文件,进行修改
# 在 turtlebot_teleop/launch 目录下执行
$ sudo vim ps3_teleop.launch
修改后的 ps3_teleop.launch 文件如下:
在文件中有一行参数 中,value="5"的意思就是:无线手柄的5号按键为其使能键。该值可以根据自己的需要自行设定。
(注意:也可以对 logitech.launch 文件进行修改,修改成上面一样。但是在下面启动无线手柄进行控制的时候,就应该用对应手柄的启动文件:roslaunch turtlebot_teleop logitech.launch)
3、将 Turtlebot2 与电脑用USB数据线相连,将罗技F710无线手柄的usb接收器接上电脑。打开 Turtlebot2 开关,等指示灯点亮之后,分别执行如下命令:
# 打开新终端,执行如下命令启动 Turtlebot2 机器人
$ roslaunch turtlebot_bringup minimal.launch
# 打开新终端,打开新终端,启动无线手柄来控制机器人运动。
$ roslaunch turtlebot_teleop ps3_teleop.launch
4、然后在按住无线手柄使能键的同时,通过操纵杆来控制机器人的运动。
注意:测试的时候发现只有执行 roslaunch turtlebot_bringup minimal.launch 命令来启动机器人的时候,才可以使用手柄进行控制。若只是使用启动底座kobuki的命令 roslaunch kobuki_node minimal.launch 时,则不能使用手柄进行控制。可能是turtlebot_bringup功能包中含有相应的驱动文件,而 kobuki_node 中没有包含该文件。
1、无线手柄轴向输入时的键号:
2、无线手柄按键输入时键号(按压时):
参考资料:
[1] 罗技F710无线手柄在ROS下的安装使用
[2] 罗技F710 无线手柄在ROS下的配置使用总结