产品服务 技术交流 激光雷达 机器视觉 ROS教程 最新公告 讨论区 杂谈 行业动态

原装和国产ps3手柄ros驱动程序


  • administrators

    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://github.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 
    

    按一下下图中的手柄配对键


    alt text


    配对成功的话,手柄会震动一下,同时上面的窗口会输出类似下面的结果

    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.点击系统桌面右上角的蓝牙图标,将连接着的蓝牙手柄服务关闭
    0_1523188908187_IMG_1067.JPG
    0_1523188923058_IMG_1066.JPG
    2.重新插拔手柄,然后重新运行绑定指令


  • administrators

    此回复已被删除!


  • 0_1525877464432_reply.png
    您好,做到这一步后一直无法配对手柄和蓝牙适配器可能是什么问题呢?
    蓝牙适配器插在电脑上没有问题,手柄也按下了配对键。


  • administrators

    @wukefu 你在操作这一步之前有没有通过USB数据线绑定?


  • administrators

    @wukefu 按配对键的时候手柄不能用usb连接电脑,但是上一部的绑定需要手柄和电脑用usb连接,因此会有一个断开的操作。断开usb时,手柄会自动触发蓝牙连接(手柄配对指示灯会闪),此时就会导致不能配对成功,因为是usb断开引起的。
    正确操作是:断开usb后,先等配对指示灯不闪后,再执行“rosrun ps3joy ps3joyfake_node.py”,最后按手柄配对键就可以配对了



  • @weijiz 您好,已经进行过绑定了,图中可以看到usb与手柄已经绑定成功了



  • @xiaoqiang 你好,我按照您说的做了一遍,还是无法配对成功.....



  • @xiaoqiang 我和@wukefu 的情况一样 断开USB 配对灯不闪 再运行rosrun ps3joy ps3joyfake_node.py 之后出现waiting for connection. 按手柄配对键,依然没反应。



  • @xiaoqiang原装和国产ps3手柄ros驱动程序 中说:

    ,

    后来再重试了,rosrun ps3joy ps3joyfake_node.py后 出现:
    No inactivity timeout was set.(Run with --help for details.)
    Unable to register with master node [http://localhost:11311]:master may not be running yet. Will keep trying.

    这是什么问题?


  • administrators

    @jianjun 这是由于roscore没有启动,可能你把startup服务关闭里。运行

    sudo service startup start
    

    可以启动服务。



  • @weijiz 输入你所说的命令后显示
    Fail to start startup.service: Unit startup.service not found.

    这是什么问题?


  • administrators

    @jianjun 你可能用的不是小强系统。直接运行roscore,而且要一直运行,不能关闭。



  • @weijiz 我是在树莓派3 上用Ubuntu系统,最后我还是没配对上,显示:
    No inactivity timeout was set. (Run with --help for details.)
    Waiting for connection. Disconnect your PS3 joystick from USB and press the pairing button.
    我是按照您上面说的,先断开USB,等到配对灯灭了后再运行的ps3joyfake_node.py,之后按了很多次配对键都没配对成功。
    这是什么原因呢?


  • administrators

    @jianjun 可能是树莓派的问题,树莓派的蓝牙驱动好像有问题。你可以换电脑试试。