ArduPilot代码解析之五 — 无线电控制(RC)输入

目的和范围

RC输入系统管理无线电接收机信号,并将其转换为飞行员指令以控制飞行器。该系统处理来自RC接收机的PWM脉冲宽度信号,进行校准和滤波,管理辅助开关功能,并通过MAVLink提供手动控制功能。该系统最多支持16个RC通道,并提供丰富的配置选项。

系统架构

该系统由三个主要层组成:

  1. RC_Channel - 代表一个 RC 输入的独立通道,支持校准、转换和辅助功能
  2. RC_Channels - 单例管理器,协调所有通道、模式切换和系统级操作
  3. 车辆集成- 车辆特定的通道分配和处理(例如copter.channel_roll,,copter.channel_pitch

核心数据结构

输入处理流程

PWM到控制值转换

RC系统通过多级流水线将原始PWM脉冲(通常为1000-2000微秒)转换为缩放的控制值:

通道更新流程

RC_Channel::update()方法读取输入并将其转换为控制值:

控制类型转换

支持两种控件类型:

控制类型 用法 输出范围 转换方法
ANGLE 横滚、俯仰、偏航 ±4500摄氏度 pwm_to_angle() 375-378
RANGE 风门 0 到high_in pwm_to_range() 405-408

角度类型转换(带死区和微调):

角度转换会在修剪点周围设置一个死区,并按比例缩放输入:

if (radio_in > trim + deadzone):
    angle = (high_in * (radio_in - trim - deadzone)) / (radio_max - trim - deadzone)
else if (radio_in < trim - deadzone):
    angle = (high_in * (radio_in - trim + deadzone)) / (trim - deadzone - radio_min)
else:
    angle = 0

范围类型转换

范围转换是单向的,从最小值到最大值:

radio_trim_low = radio_min + deadzone
if (radio_in > radio_trim_low):
    range = (high_in * (radio_in - radio_trim_low)) / (radio_max - radio_trim_low)
else:
    range = 0

归一化函数

几种不同的归一化函数对摇杆位置给出了不同的解释:

功能 范围 修剪处理 死区 用法
norm_input() -1.0 至 1.0 以装饰条为中心 基本归一化输入
norm_input_dz() -1.0 至 1.0 以装饰条为中心 是的 摇杆输入死区
norm_input_ignore_trim() -1.0 至 1.0 以中档产品为主 绝对位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timmy-uav

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值