ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
小强ROS机器人教程(33)___使用ps4手柄控制小车移动
-
原理:本教程涉及2个包
ds4_driver节点负责将蓝牙手柄设备数据转换成ros中的joy数据类型
turtlebot_teleop_joy负责将上述joy数据topic 转换成小车运动指令/cmd_vel
操作步骤
0.先要安装对应的ros驱动同时将手柄与ubuntu进行蓝牙配对
如果手柄和小强同时购买,那么我们已经提前为您将手柄适配好了,可以从步骤1开始使用。
1.将ps4手柄与蓝牙接受器进行连接
只需要按一下ps键,让手柄进入连接模式,此时手柄会闪白光。
ubuntu不用进行任何操作,手柄就会连上ubuntu,连上后手柄led会停止闪烁,同时颜色变成蓝色。
如果白灯熄灭前,也没连上ubuntu,可以等白灯熄灭后再次按ps键,再次尝试连接。蓝牙适配器性能不同,有时需要按两三次才能连上。2.启动ds4_driver和turtlebot_teleop_joy
已经适配好小强的用户,这些节点默认开机自动启动,不用手动执行
#启动ds4_driver roslaunch ds4_driver xiaoqiang.launch #启动 turtlebot_teleop roslaunch turtlebot_teleop ps3fakexiaoqiang_teleop.launch
正常启动后如下图所示
ps3fakexiaoqiang_teleop.launch文件内容如下<launch> <node pkg="turtlebot_teleop" type="turtlebot_teleop_joy" name="turtlebot_teleop_joystick"> <param name="scale_angular" value="0.4"/> <param name="scale_linear" value="0.4"/> <param name="axis_deadman" value="10"/> <param name="axis_linear" value="1"/> <param name="axis_angular" value="0"/> <remap from="turtlebot_teleop_joystick/cmd_vel" to="/cmd_vel"/> <remap from="turtlebot_teleop_joystick/joy" to="/joy"/> </node> </launch>
上述launch文件中的参数分别对应直线速度最大值(scale_linear)和角速度最大值(scale_angular),油门离合键(axis_deadman)、前进后退轴(axis_linear)、左右转轴(axis_angular),这些控制按键、摇杆的映射关系。
3.保持按住手柄油门键(下图中的10号键),现在使用左侧的推杆可以控制小车的前后移动和转向(下图中的1+1-摇杆)
根据这些按键编号,可以修改launch文件中的相关参数从而改变按键映射关系4.使用手柄对主机进行关机
同时按住手柄的12和14号键,手柄会振动,然后松手,在振动消失前再次长按,会触发主机关机同时振动消失。
5.常见问题
1.ps4手柄和ubuntu无法连接 答:之前有没有配对成功,没有配对成功要先确保配对成功。 2.ps4手柄和ubuntu无法连接 答:等白灯熄灭后,再次按ps键尝试连接,因为蓝牙适配器性能原因,有时要尝试两三次才能连上,这是正常现象。 3.ps4手柄和ubuntu无法连接 答:配对成功后,如果再次同时按了share和ps键,会清除手柄的配对信息,此时需要先在ubuntu里面删除叫wireless Controller的蓝牙设备,然后重启执行步骤0的配对。
-
如果不用ds4_driver驱动的话,摇杆值和按钮按键会完全不一样,一个明显的地方就是rostopic echo /joy的时候,前一个有18个按钮值,ROS的joy驱动是15个。ds4_driver 比ROS的joy驱动多了触摸板的触摸、按下和手柄震动的功能。我的手柄有时候ds4_driver配对上打不开, 然后就发现了这个问题。楼主最后的TCP按钮震动然后关机的功能确实是在别的地方没有见过,点个赞~