当前位置: 首页 > 工具软件 > ArduPilot/APM > 使用案例 >

Ardupilot/Copter RC Control 解析

严瀚昂
2023-12-01

问题

  1. Ardupilot 中遥控器怎样切换主模式?
  2. Ardupilot 中辅助通道如何设置?
  3. Ardupilot 中辅助通道和主通道如何切换?

代码位置

Ardupilot 中遥控器的相关代码位于,/ArduCopter/switches.cpp中。

整体功能

  1. 读取接收机信号。
    可以兼容多种接收机信号,包括,PPM,PWM,UART等类型信号。
  2. 遥控器校准,采集校准参数,设置中位值。
  3. 设置遥控器正反。
  4. 主模式切换功能,设置通道参数(采用哪个通道)。
  5. 辅助功能,可以对其它的通道自定义功能。

功能实现

  1. 读取接收机信号
    在系统层实现,可以阅读相关的代码。没有深究。代码位于/libraries/RC_Channel目录下。
  2. 遥控器校准
    没有深究。
  3. 设置遥控器通道正反
    通过设置参数RC2_REV。每一个通道都可以进行类似的设定。
    同时可以设定的参数还有:
    RC2_MIN PWM占空比最小值
    RC2_MAX PWM占空比最大值
    RC2_TRIM PWM占空比中位置
    RC2_DZ PWM占空比死区,?还不太清楚,看一下详细的定义。
  4. 主通道切换功能
    前面的几项功能,都是在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. 要点:
    1. 辅助通道和主通道的互相切换。
    2. 外部调用接口。
  6. 遥控器的配置:
    1. 怎样配置5通道,主模式通道是5个段位,但几乎所有的开关是都是三段位的。似乎是混编,网上有相关的教程,看一下。
 类似资料: