项目链接:https://github.com/cabinx/cabin_auv_ws
一、joystick工具包
ros下使用手柄非常方便,教程也非常多。我也粗略的介绍一下。借助joystick工具包(sudo apt-get install ros-melodic-joystick-drivers)。当然我推荐源码安装http://wiki.ros.org/joystick_drivers。
我们来看一下手柄的数据格式sensor_msgs/Joy(http://docs.ros.org/en/api/sensor_msgs/html/msg/Joy.html)。
Axes表示摇杆,buttons表示按键。
安装完成后,接入手柄,可以看一下其端口 ls /dev/input,如下:
其中js0即表示是手柄,默认的就是js0,如果不是,如为js1则需要通过指令修改:
启动手柄
监听其发布的信息rostopic echo /joy。
当我们按下手柄的A键时,如下图:
显然,buttons[0]状态发生改变,A键对应buttons[0]。
我们再上下拨动左摇杆时,如下图:
显然axes[1]状态发生改变,左摇杆上下方向对应axes[1]。
二、头文件
头文件反映按键的映射关系,不同型 的手柄间可能会不一致,只用修改头文件的映射关系可以适应手柄的变化。
以测试时使用的logicool手柄为例,代码对应logicool_button_mapping.h。。
AXES_STICK_LEFT_UD为左摇杆上下方向,BUTTON_SHAPE_A为按键A,如此就与上文中联系起来了。当需要使用不同型 的手柄时,按照上文的方法,每个按键都测试一次,然后修改头文件即可。
三、变量初始化
作用于机器人上的力与力矩。
四、JoyCallback()函数
监听按键信息,对按键事件做出响应。
(1)左十字上下方向
每按一次上方向,增加5;每按一次下方向,减少5;demo里此时机器人持续前进与后退。
(2)左摇杆左右方向
根据摇杆的幅度确定输出大小,demo里此时机器人随摇杆做偏航运动。
(3)A键
改变锁死joy_switch状态;
(4)B键
激活reset的flag。
五、Main()函数
(1)响应锁死
实际上发布了/state/switches。在pwm计算模块pwm_controller监听该信 ,若为信 值为false,则锁死pwm波为初始值;若信 值为true,则解锁。控制时可以随时通过A键开解锁。当处于锁死状态时,各推进器PWM波值锁定为初始值,只有按下A键解锁,才能继续控制。
注意:为了安全保险,程序启动时默认是锁死状态的,启动后需要按下A键解锁才能通过摇杆控制机器人运动。
(2)响应reset
按下B键时,发布的力与力矩为0;同时发布/command/reset,信息内容为true,在pwm计算模块pwm_controller监听该信 ,信息内容为ture时,将pwm波置为初始值,再改变reset状态。
实际上可以将B键理解成急停,按下时机器人立即回归初始状态。
(3)发布力和力矩
附上当初测试的一些情况吧:
在实际测试中,基本上很难实现效果很好的控制,甚至极大概率前进运动时是歪的。模型文件数据与实际机器人终究不可能完全一致。如何改善效果是依靠传感器,如IMU,DVL等,然后在控制上添加闭环了。实际上ROS无论对传感器模块的添加,还是运动控制算法的开发都非常友好方便,开源资料丰富,故虽然这部分demo并没有开发,但实际上我认为软件框架在实际应用中是可期的。这也是我在前文中我提及的测试效果基本实现目标的原因,毕竟这只是一个验证性的demo。根据测试结果也给了我未来对此基于软件架构升级开发的信心。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!