ROS交流群
ROS Group
产品服务
Product Service
开源代码库
Github
官网
Official website
技术交流
Technological exchanges
激光雷达
LIDAR
ROS教程
ROS Tourials
深度学习
Deep Learning
机器视觉
Computer Vision

原装和国产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://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.重新插拔手柄,然后重新运行绑定指令

    小强主页
    返回目录



  • @xiangxiang123 多次短按试试,第1步是绑定(只用绑定一次),第2步才是配对(每次重启机器后都要操作一次)。第1步绑定成功后,断开usb和手柄连接,重启系统,然后直接进行第2步操作



  • @weijiz 长按后5秒灯就不闪了,也没有提示配对成功。



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

    配对灯不闪

    配对要一直按着不放直到配对成功。



  • @weijiz 手柄充了一晚上电之后能开了。配对的时候到了第二步,断开USB 配对灯不闪 再运行rosrun ps3joy ps3joyfake_node.py 之后出现waiting for connection. 按手柄配对键,依然没反应。



  • @xiangxiang123 把手柄插入主机后运行lsusb看一下。把输出发过来。



  • 手柄按照教程上面去配对的时候,到了第二步手柄和蓝牙接收器配对,手柄的灯已经不是一起闪,后来全部灭了,终端也没有显示连接成功。但手柄再按配对按钮,灯不亮,而且重新接usb线灯也不亮。手柄充电后也没有任何反应。



  • 手柄接上数据线在linux系统下会震动,忽略这样的震动就可以了,继续按照教程操作



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



  • @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,之后按了很多次配对键都没配对成功。
    这是什么原因呢?



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



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

    这是什么问题?



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

    sudo service startup start
    

    可以启动服务。



  • @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.

    这是什么问题?



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



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



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



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



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



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