无线手柄在ROS上的使用

一、使用环境

  1. 电脑操作系统: Ubuntu14.04 LTS
  2. ROS版本:indigo
  3. 无线手柄:罗技F710无线手柄
  4. 机器人:Turtlebot2

二、安装配置

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]
---


三、通过无线手柄控制 Turtlebot2 机器人的运动

1、在 turtlebot_teleop 功能包中,launch 目录下有如下文件。

  • includes中包含是是速度平滑处理的文件
  • keyboard_teleop.launch 是键盘控制运动的文件
  • logitech.launch 是罗技手柄控制机器人运动的文件
  • ps3_teleop.launch 是PS3设备控制机器人运动的文件
  • xbox360_teleop.launch 是xbox360设备控制机器人运动的文件

 

2、打开其中的 ps3_teleop.launch 文件,进行修改

# 在 turtlebot_teleop/launch 目录下执行
$  sudo vim ps3_teleop.launch 

 修改后的 ps3_teleop.launch 文件如下:

<launch>
  <!--  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="5"/>
    <remap from="turtlebot_teleop_joystick/cmd_vel" to="teleop_velocity_smoother/raw_cmd_vel"/>
  </node>

  <node pkg="joy" type="joy_node" name="joystick">
  <param name="dev" type="string" value="/dev/input/js0" />
  </node>

</launch>

在文件中有一行参数 <param name="axis_deadman" value="5"/> 中,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 中没有包含该文件。


四、罗技F710无线手柄键号

1、无线手柄轴向输入时的键号:

  

2、无线手柄按键输入时键号(按压时):

  

  


参考资料:

[1]  罗技F710无线手柄在ROS下的安装使用

[2]  罗技F710 无线手柄在ROS下的配置使用总结

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值