原装和国产ps3手柄ros驱动程序
ps3手柄的ros驱动程序为joystick_drivers包中的ps3joy,这份驱动对索尼原装手柄支持较好,但是对国产ps3手柄的支持存在问题。我们在ps3joy的基础上进行了修改,增加了一个ps3joyfake_node.py脚本作为国产手柄的驱动,包源代码地址在这里:。下文以小强为例,演示这个包的安装步骤和简略的使用方法
安装步骤
ssh进入小强ros工作空间,下载源码后编译,完成安装 小强镜像中默认已经安装此软件包,可以跳过这一步骤。
ssh xiaoqiang@192.168.xxx.xxx
cd Documents/ros/src/
git clone https://gitee.com/BlueWhaleRobot/joystick_drivers.git
cd ..
catkin_make
# 如果提示下列错误
error spnav.h no such file
# 先安装下面这个包,然后重新执行catkin_make
sudo apt-get install libspnav-dev
快速使用方法
ps3joyfake_node.py
启动后,它会将蓝牙接收的手柄按键数据转换成标准的joy msg,同时以/joy
为话题在ros中发布,即ps3joyfake_node.py
一个文件相当于ps3joy.py + joy_node
两个文件,在实际使用中不必再开启joy_node
节点。
1.将手柄与usb蓝牙适配器进行绑定,只需绑定一次,下次直接跳过这个步骤
如果是手柄是和小强同时购买,那么我们已经提前为您配对,可以跳过此步骤。
将手柄通过usb数据线接入主机,usb蓝牙适配器也插上主机
sudo bash
rosrun ps3joy sixpair
此时会得到类似下图的输出,current和setting的mac地址一样说明绑定成功
Current Bluetooth master: 00:22:b0:d0:5a:09
Setting master bd_addr to 00:22:b0:d0:5a:09
# 如果出现下述错误
Current Bluetooth master: 00:1b:dc:00:07:3c
Unable to retrieve local bd_addr from `hcitool dev`.
Please enable Bluetooth or specify an address manually.
# 先运行
hciconfig hci0 reset
# 如果运行
hciconfig hci0 reset
# 出现错误
# Can't init device hci0: Operation not possible due to
# 运行
rfkill unblock all
# 然后运行
hciconfig hci0 reset
# 重新运行
rosrun ps3joy sixpair
绑定设置完成,断开手柄与主机的usb连接
ctrl+D 退出root模式
2.将手柄与usb蓝牙适配器配对
#确保蓝牙接收器已经插入主机usb口
sudo bash
rosrun ps3joy ps3joyfake_node.py
正常会出现下面的提示
root@xiaoqiang-desktop:~# rosrun ps3joy ps3joyfake_node.py
No inactivity timeout was set. (Run with --help for details.)
Waiting for connection. Disconnect your PS3 joystick from USB and press the pairing button.
#如果提示下列错误
ImportError: No module named bluethooth
#请先安装下列包,然后重新运行
sudo apt-get install libbluetooth-dev
sudo pip install PyBluez
按一下下图中的手柄配对键
配对成功的话,上面的窗口会输出类似下面的结果
root@xiaoqiang-desktop:~# rosrun ps3joy ps3joyfake_node.py
No inactivity timeout was set. (Run with --help for details.)
Waiting for connection. Disconnect your PS3 joystick from USB and press the pairing button.
Connection activated
配对完成
3.查看手柄输出
新开一个窗口,打印按键输出
rostopic echo /joy
正常会出现下面的类似结果
header:
seq: 297
stamp:
secs: 1488877867
nsecs: 535818099
frame_id: ''
axes: [0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.21316899359226227, 0.0]
buttons: [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
从上面可以看到第4个button被按下了
4.启动相关的joy msg处理节点
注意不要再启动joy_node
#以小强为例,启动下列launch文件后就可以遥控小强移动了
roslaunch turtlebot_teleop ps3fakexiaoqiang_teleop.launch
购买带手柄的小强用户,还可以根据这篇教程使用手柄
进行步骤1绑定时,如果提示找不到手柄设备,无法绑定,可以执行下面两个步骤以解决问题: 1.点击系统桌面右上角的蓝牙图标,将连接着的蓝牙手柄服务关闭 2.重新插拔手柄,然后重新运行绑定指令