0、前言:
prometheus_V2推荐使用阿木的遥控器,但是家里遥控器实在太多了,所以就尝试修改一下prometheus里关于joystick的驱动,使其适配prometheus的控制;本篇文章以乐迪遥控器AT9S为例,
1、 遥控器端的设置
一般来说,四个摇杆的数据分别对应前4个通道,用来发送控制飞机的油门等等;
遥控器上还有一些拨杆数据,可以映射到除了前4个通道以外的通道上,用来发送解锁等命令等;
手头有rc遥控器的朋友一般都会设置,这里不再赘述:
下面是我的设置
2、在linux上安装驱动
在官网文档中,关于遥控器的使用,之前有介绍如何安装驱动的(现在找不到了,好像删除了,有知道的朋友可以留言补充一下)然后打开一个应用,插入遥控器之后,可以看到遥控器的各通道的实时数据;
注意:在设置完上述的遥控器通道之后,如果你的遥控器拨杆的数据在打开的驱动程序上没有任何反应(一般是摇杆有反应,但是拨杆没有反应),那就说明你的遥控器的拨杆无法接入linux,或者需要使用其他驱动,这里我暂时没找到;
实际测试,使用openTX系统的遥控器拨杆无法通过上述驱动接入,可能需要修改最底层驱动,乐迪遥控器和富斯是可以的;
3、查看遥控器的数据链
(1)打开ros节点
起飞降落demo对应脚本文件位于/Prometheus/Scripts/simulation/tutorial_demo/takeoff_land.sh
(2)打开rqt_graph
rqt_graph
先在左上角点击active选项,然后再把鼠标放到/uav1/prometheus/fack_rc_in;
可以看到该主题数据从joy_node发出,在/uav1_control_main1这个节点接收;
(3)查看/uav1/prometheus/fack_rc_in原始数据
rostopic echo /uav1/prometheus/fack_rc_in
此时波动遥控器上的摇杆数据,可以看到前四个通道的摇杆数据是在正常的响应,但是拨杆数据只有两个有反应;这是因为源码中选择的数据源不匹配,需要修改数据源,把正确的数据源映射上来;
4、关于拨杆通道的修改
找到joy_node.cpp这个文件,将上面joy_msg.buttons[4]的判断条件注释掉;
为什么注释掉呢,因为最上面的驱动里面只能获取乐迪遥控器的joy_msg.button[0]、joy_msg.button[1]、joy_msg.button[2]、joy_msg.button[3]。而后面的joy_msg.button[4]将不会获取到,所以这个joy_msg.button[4]的值不会改变,且刚好一直大于0,则导致button[3]的值的变化无法生效;所以这里我将其注释掉,忽略这里的判断;
如下图所示,后面的3个通道就映射了遥控器上面的3个拨杆数据了;
5、关于摇杆通道的修改
这里我说一下fack_rc_in.channels的映射,从0到3依次为
roll、pictch、thrust、yaw;
那个这个4个通道就需要对于遥控器设置的4个通道。
在调整的过程中,我是一边看rostopic echo /uav1/prometheus/fack_rc_in修改的;
6、关于功能的修改
通过拨杆的切换,可以发出解锁、进入RC控制模式、降落、kill等命令;
在文件rc_input.h 文件中;
通过判断各channl上一次的值与本次的值进行对比,满足一定的条件,就判断为发送那种命令;
在这里,我将通道7的值(实际是拨杆的通道6),作为判断land模式的条件;
7、结尾
本文主要讲述了,如何将一个RC遥控器的数据适配到Prometheus的控制中;最终实现一个2段开关控制解锁、一个3段开关控制进入遥控模式还是命令模式、一个2段开关控制进入降落模式;