问题
- Ardupilot 中遥控器怎样切换主模式?
- Ardupilot 中辅助通道如何设置?
- Ardupilot 中辅助通道和主通道如何切换?
代码位置
Ardupilot 中遥控器的相关代码位于,/ArduCopter/switches.cpp中。
整体功能
- 读取接收机信号。
可以兼容多种接收机信号,包括,PPM,PWM,UART等类型信号。 - 遥控器校准,采集校准参数,设置中位值。
- 设置遥控器正反。
- 主模式切换功能,设置通道参数(采用哪个通道)。
- 辅助功能,可以对其它的通道自定义功能。
功能实现
- 读取接收机信号
在系统层实现,可以阅读相关的代码。没有深究。代码位于/libraries/RC_Channel目录下。 - 遥控器校准
没有深究。 - 设置遥控器通道正反
通过设置参数RC2_REV。每一个通道都可以进行类似的设定。
同时可以设定的参数还有:
RC2_MIN PWM占空比最小值
RC2_MAX PWM占空比最大值
RC2_TRIM PWM占空比中位置
RC2_DZ PWM占空比死区,?还不太清楚,看一下详细的定义。 - 主通道切换功能
前面的几项功能,都是在libraries中实现。下面是旋翼机自己的功能实现。
- 调用外部接口:
g.rc_5.get_radio_in()
g 表示Global parameter 在corpter.h 中声明。
rc_5 通过Parameter.cpp中
// @Group: RC5_
// @Path: ../libraries/RC_Channel/RC_Channel.cpp,../libraries/RC_Channel/RC_Channel_aux.cpp
GGROUP(rc_5, "RC5_", RC_Channel_aux),
进行声明。如何链接到RC_Channel_aux.cpp,通过GGROUP还没有研究? - 外部调用接口:
函数:void Copter::read_control_switch()
void Copter::read_aux_switches()
被外部周期调用。 - 函数实现:
void Copter::read_control_switch()
A. 周期检测读取到的第五通道的数据,根据读取到的PWM占空比,作出响应。
B. 实现了防抖功能,防止pwm数据抖动引起的错误。即每次更改的时间应该有一定的保证,否则返回。
C. 如果读到的数据和上次的数据相等,直接返回。
D. 切换模式主通道设置为 - 函数实现:
void Copter::read_aux_switches()
A. 根据不同通道的功能定义(参数),作出相应。
B. 如果失效状态则按照主通道的模式切换。
比如,辅助通道的auto模式开关处于关闭状态,此时按照主通道的模式开关。
即在辅助通道与主通道冲突的情况下,以辅助通道为准,辅助通道处于关闭状态,则按照主通道功能执行。
C. 辅助通道的功能,通过参数更改。待完成。
- 要点:
- 辅助通道和主通道的互相切换。
- 外部调用接口。
- 遥控器的配置:
- 怎样配置5通道,主模式通道是5个段位,但几乎所有的开关是都是三段位的。似乎是混编,网上有相关的教程,看一下。