参考链接:创客智造-xbox360无线游戏杆控制turtlebot
我使用的游戏手柄是 北通 阿修罗TE BTP-2185。
进入正题
1.安装手柄驱动
安装方法与Xbox360手柄驱动一样。
sudo apt-add-repository ppa:rael-gc/ubuntu-xboxdrv
sudo apt-get update && sudo apt-get install ubuntu-xboxdrv
最近实验室网不好,在执行sudo apt-get update 的时候遇到了下面的情况
W: 无法下载 http://mirrors.163.com/ubuntu/dists/trusty-updates/universe/binary-amd64/Packages Hash 校验和不符E: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。
多试几次就OK了。
2. 手柄和接收器配对
- 将接收器插在电脑的USB接口上,并确保安装好手柄驱动程序
- 按手柄中间的大圆按钮(西瓜键),手柄打开并配对,配对成功后指示灯P 和X长亮。如果指示灯都在闪烁,说明正在配对。如果配对不成功,请参考相关用户手册。
3. 测试手柄
- 将接收器插在电脑上,并检查电脑是否发现设备。
ls /dev/input/js*
查看是否有显示或jsX,X为数字,这里会显示如下:
/dev/input/js0 /dev/input/js1 /dev/input/js2 /dev/input/js3 /dev/input/js4
这里显示了多个设备是因为接收器支持多个手柄,当然我们用到一个手柄就是js0了。
- 测试手柄是否可用
sudo jstest /dev/input/js0
显示如下:
Driver version is 2.1.0.
Joystick (Xbox 360 Wireless Receiver (XBOX)) has 6 axes (X, Y, Z, Rx, Ry, Rz)
and 15 buttons (BtnX, BtnY, BtnTL, BtnTR, BtnTR2, BtnSelect, BtnThumbL, BtnThumbR, ?, ?, ?, (null), (null), (null), (null)).
Testing ... (interrupt to exit)
Axes: 0: -5086 1: 0 2:-32767 3: -1291 4: 1066 5:-32767 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 12:off 13:off 14:off
当我们按手柄上不同的键时,对应的数据会变化,比如晃动左右摇杆。
- 设置权限,ROS的joy_node需要设备的访问权限
sudo chmod a+rw /dev/input/js0
- 配置需要使用的设备,执行该步骤时需要先启动roscore
rosparam set joy_node/dev "/dev/input/js0"
- 启动joy_node节点
rosrun joy joy_node
- 打开新的终端,查看topic
rostopic echo joy
则能看到如下所示的手柄发布的话题,尝试手柄的各个按键,查看话题内容是否变化。
header:seq: 429stamp:secs: 1415227355nsecs: 833352850frame_id: ''
axes: [0.19235174357891083, -0.0, 1.0, -0.04268254339694977, -0.048208002001047134, 1.0]
buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4. 使用手柄控制turtlebot
- 关闭前面打开的终端,重新打开一个终端,启动roscore
roscore
- 打开一个新终端启动turtlebot
roslaunch turtlebot_bringup minimal.launch
- 打开一个新终端,设置设备并启动手柄的launch文件
rosparam set /joystick/dev "/dev/input/js0"roslaunch turtlebot_teleop xbox360_teleop.launch
- 按住左边的LB按钮激活遥控杆并移动左遥控杆,Turtlebot动起来了,而且还跑得飞快有没有,那么怎么让它跑得慢一点呢?
5. 修改xbox360_teleop.launch文件中的相关参数
- 进入launch文件所在的目录
roscd turtlebot_teleop/launch/ && ls
- 使用gedit修改launch文件
sudo gedit xbox360_teleop.launch
显示如下:
<launch><!--Push the left frontal button labeled as 'LB' to activate cmd_vel publishing.Move the left stick around to control the velocity.--><!-- smooths inputs from cmd_vel_mux/input/teleop_raw to cmd_vel_mux/input/teleop --><include file="$(find turtlebot_teleop)/launch/includes/velocity_smoother.launch.xml"/><node pkg="turtlebot_teleop" type="turtlebot_teleop_joy" name="turtlebot_teleop_joystick"><param name="scale_angular" value="1.5"/><param name="scale_linear" value="0.5"/><param name="axis_deadman" value="4"/><param name="axis_linear" value="1"/><param name="axis_angular" value="0"/><remap from="turtlebot_teleop_joystick/cmd_vel" to="teleop_velocity_smoother/raw_cmd_vel"/></node><node pkg="joy" type="joy_node" name="joystick"/></launch>
其中scale_angular是设置角速度的,scale_linear是设置线速度的,那我们就把线速度设置成0.1吧。保存launch文件,重新启动手柄的launch文件,并用手柄控制,turtlebot开始慢慢移动了。