添加新的遥控器通道功能

本文为《无人机飞控固件开发教程》系列视频的辅助资料,已经在“网易云课堂”上线 , 链接如下:https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983

无人机调试,飞控硬件定制、固件修改,日志分析,请QQ联系:3500985284


 本节课讲述如何在APM固件中添加一种新的遥控器通道功能,可以实现通过遥控器上的任意一个拨动开关触发一个自定义的功能。

一、功能目标

 在APM飞控中,遥控器通道7和通道8经常用来设置为触发某项功能,比如“开始自动调参”、“将当前位置记录为航点”、“收起/放下起落架”等等。有时候,我们可能需要添加一种自定义的遥控器触发功能,本节课我们将以如下任务目标来给大家演示如何实现这种功能:

  • 在飞行中,将某个通道从低位拨到高位,就将当前位置保存在一个位置序列中(比如20个位置点);
  • 在飞行中,将飞机切换到“Guided”模式,飞机就自动沿着记录的位置序列逆序飞行,实现“原路返回”的功能。

 注:APM飞控中已有通过拨动开关记录航点的功能,也有SmartRTL功能来实现原路返回功能,但是SmartRTL是自动记录位置序列的,而本例程中是手动记录位置序列的,略有不同。

二、源代码分析

 APM代码中,与遥控器各个辅助通道相关的代码在RC_Channel中,如下图所示,libraries/RC_Channel/RC_Channel.h中定义了 RC_Channel 类,而在不同载具的各自的顶层文件夹中,以此为基类派生出了各自的RC_Channel子类,里面添加了各自独有的功能(比如,多旋翼独有的通过一个开关来启用简单模式的功能)。

 AUX通道代码调用关系逻辑图如下(将下图保存到电脑中之后可以看原始大图):

三、实现步骤

  1. 新建分支,本例程的分支为:NFCY-TestSwitch(基于Copter-4.0.3修改);
  2. 添加代码,实现相关功能(注意,你只是在飞控固件中添加了一个新的功能,MissionPlanner地面站没有做任何修改,因此MissionPlanner的全部参数列表中对应参数的注释不会有任何变化(不过不影响此功能的使用)。如果你想让这里的注释也能提示你新加的选项,就需要修改MissionPlanner代码);
  3. 开始仿真,将参数“RC7_OPTION”设置为102,然后开始飞行,并不断记录航点,最后将模式切换为Guided;
  4. 下次仿真时会出现问题,无法正常仿真,解决办法:《建立APM飞控软件仿真环境》章节“疑难解答”环节第5条
  5. 外场飞行测试。

四、疑难解答

 1、对于遥控器的一个拨动开关来讲,何为“低位”,何为“中位”,何为“高位”?

 对于Copter-4.0.3版本源程序,在“libraries/RC_Channel/RC_Channel.cpp”第828行的“read_3pos_switch()”函数中,我们可以确定,APM固件对拨动开关的“高位”、“中位”和“低位”的定义如下:

  • 900 < PWM值 < 1200:低位;
  • 1200 ≤ PWM值 ≤ 1800:中位;
  • 1800 < PWM值 < 2200:高位;
  • PWM值 ≤ 900 或 PWM值 ≥2200 :无效值

 由此可见,飞控对遥控器拨动开关位置的定义是以该通道的PWM值为准的,与你的遥控器的拨动开关的实际物理位置没有绝对的关系

 比如:你将遥控器的拨动开关A映射到第7通道,由于你的遥控器厂家的自定义习惯,或者你故意在该通道上添加了反向功能(Reverse),导致开关推到上面时该通道的PWM值为1100,拉到下面时该通道的PWM值为1900,那么从飞控的角度来讲,这个开关推到上面时为“低位”,拉到下面的时候为“高位”。

2、飞控是定时触发并执行拨动开关对应的功能,还是在拨动开关拨动时才触发并执行对应的功能?

 对于Copter-4.0.3版本源程序,在“libraries/RC_Channel/RC_Channel.cpp”第417行的“debounce_completed()”函数中,我们发现飞控在定时读取拨动开关位置时,会判断当前位置与之前的位置是否相同,如果相同,则不触发任何功能,如果不同,进行“开关防抖”处理,如果防抖处理后当前位置与之前的位置依然不同,则触发对应功能。(如果你对“开关防抖”的概念不熟悉,请参考如下网页:https://blog.csdn.net/Crazy_Tengt/article/details/75418856

 因此我们的结论是:在拨动开关拨动时才触发并执行对应的功能


本文为《无人机飞控固件开发教程》系列视频的辅助资料,已经在“网易云课堂”上线, 链接如下:

https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983

无人机调试,飞控硬件定制、固件修改,日志分析,请QQ联系:3500985284

京ICP备19049723号   |   京公网安备 11010502039327号