|
手动操纵飞行时,遥控器用来传达用户指令,接收机用来接收遥控器信号并发送给飞控
这篇和大家一起看下飞控对遥控器(RemoteControl, RC)指令处理相关内容
指令处理是个复杂的话题,涉及协议解析、解锁上锁、模式切换、失控保护等等。我们先从最基础的遥控器硬件与协议说起
一 遥控器种类与接收机协议
对遥控器通信的基本要求是稳定可靠与操作实时性。数字信号从遥控器到接收机经历调制、传输、解调过程,一般各个遥控器生产厂商都有自己独立的遥控器协议。国家规定2.4G、5.8G频段可被用于民用无线电业务,遥控器与接收机之间通常采用2.4G无线电信号传输数据,5.8G频段一般用于无人机与地面图像传输
这里所说的接收机协议是接收机与飞控通信方式。主流航模遥控器按接收机协议可以划分为三大类
1PWM、PPM
大多数接收机与飞控通信采用PWM(Pulse Width Modulation,脉宽调制)信号,它固定周期,通过占空比来表示控制量大小。此时接收机通道和飞控通道一对一连接,这样接线十分复杂,而且占用空间
一种办法是,把多路通道PWM高电平信号合并成一路。如下所示,用两个上升沿之间的宽度表示单路PWM通道占空比,这样就只需要占用一路飞控通道,这就是PPM(Pulse Position Modulation)协议
图片来源:网络
通常PWM转PPM被单独做成一个模块,称为PPM编码器
2总线协议
FUTABA遥控器推出了串行总线协议S-BUS,类似地还有DJI推出的D-BUS。串行总线协议硬件上基于RS232,采用TTL-3.3V电平,高低电平取反,通信波特率为100K
协议字节序列含义如下描述
3 DSM(Digital Spread Spectrum Modulation)DSM2 DSMX
JR和Spectrum等带有卫星接收机用作安全冗余,支持DSM2与DSMX协议。可以采用串口通信,市面上主流飞控如Pixhawk、CC3D等都对其协议提供支持
二 微调校准
对遥控器舵量校准也采用线性模型
其中x为接收机输入飞控舵量,y为校正后实际舵量。很显然,可以通过摇杆打到极限采样值来计算得到k、摇杆回中来解算得到b
三 指令处理逻辑
1 解锁
解锁(Arm)状态是由上电状态进入桨叶怠速状态,上锁(DisArm)则是返回上电状态,此时摇杆指令不会转化成电机控制舵量,起到保护作用
首先遥控器摇杆特定手势,如油门最下,方向最右,并保持几秒。此时,飞控进入一系列校验逻辑,校验通过后即可进入解锁状态
(1)判断解锁上锁手势
https://github.com/PX4/PX4-Autopilot/blob/ee96d209d78510fe7bcc2c34e526648fa79c0135/src/modules/manual_control/ManualControl.cpp#L159
(2)进入回调,处理解锁上锁指令
https://github.com/PX4/PX4-Autopilot/blob/6535cc758ebe1302bbd24a7bac14969c7c5129f0/src/modules/commander/Commander.cpp#L1504
(3)初步校验
需要油门杆处在较低水平,并且当前飞行模式为手动
https://github.com/PX4/PX4-Autopilot/blob/6535cc758ebe1302bbd24a7bac14969c7c5129f0/src/modules/commander/Commander.cpp#L543
(4)执行切换
如果初步校验通过,执行切换逻辑
https://github.com/PX4/PX4-Autopilot/blob/6535cc758ebe1302bbd24a7bac14969c7c5129f0/src/modules/commander/Arming/ArmStateMachine/ArmStateMachine.cpp#LL41C38-L41C61
(5)校验过程
校验对象保存在列表HealthAndArmingChecks的_checks成员中,依次执行
https://github.com/PX4/PX4-Autopilot/blob/6535cc758ebe1302bbd24a7bac14969c7c5129f0/src/modules/commander/Arming/ArmStateMachine/ArmStateMachine.cpp#LL68C4-L68C10
这种校验是广泛而基础的,如传感器加速度计、陀螺仪、空速、气压计等传感器需要数据没有过期,并且已经校准;估计器算法运转健康状态;CPU负载没有过高,电池电量足够;还有一些模式切换相关的校验等。
2 上锁
上锁过程相比而言,要简化许多,主要是不需要执行飞行前检查
另外,上锁手势触发上锁逻辑后,初步校验需要飞行器处于降落状态
https://github.com/PX4/PX4-Autopilot/blob/6535cc758ebe1302bbd24a7bac14969c7c5129f0/src/modules/commander/Commander.cpp#L607
3 模式切换
3.1 模式定义
PX4支持非常多的飞行模式,它们本质上是如何定义三轴控制目标量
在手动飞行的众多模式中。增稳模式将遥控器舵量转化为三轴角度,通过串行控制提高操纵稳定性,是新手最常用的飞行模式;特技飞行模式则将遥控器舵量转化为三轴角速度,因此飞行体验上比增稳模式更灵敏,对操纵手技术要求也更高,是穿越机或3D飞行表演常用的飞行模式。
在这两种飞行模式下,滚转与油门控制耦合,打副翼同时需要提升油门,否则会掉高,有没有一种飞行模式可以解放两只手的配合?这就是半自主模式,在定点、定高模式下,无人机操作进一步得到简化。
如果飞机电量不足或超出视距,我们希望它通过自主返航模式,回到起飞点。另外在一些场景下,我们手动设置航路点,飞机自主规划最佳路径来完成飞行,这就是任务模式。
无人机借助视觉信息等实现完全自主飞行,是离线控制模式。此时无人机搭载离线计算机,借助视觉等传感器的定位信息自主决策完成任务。这是与SLAM、视觉算法、避障、路径规划算法结合的一个方向,也是最有潜力的方向,不过这样的发展逐渐丧失了航模操作的快乐。
对于不同模式下,控制目标量的设置,我们留在控制相关推送来介绍
3.2 模式切换
PX4模式切换和上锁解锁流程类似,并且实际的校验过程也是沿用了上锁解锁前的校验结果
(1)检查遥控器开关拨动
https://github.com/PX4/PX4-Autopilot/blob/ee96d209d78510fe7bcc2c34e526648fa79c0135/src/modules/manual_control/ManualControl.cpp#L170
(2)判断可否进行模式切换
校验仍然是采用前述校验结果,此处直接用标志位判断
https://github.com/PX4/PX4-Autopilot/blob/ee96d209d78510fe7bcc2c34e526648fa79c0135/src/modules/commander/Commander.cpp#LL1550C9-L1550C9
(3)执行切换
https://github.com/PX4/PX4-Autopilot/blob/6535cc758ebe1302bbd24a7bac14969c7c5129f0/src/modules/commander/Commander.cpp#L2404
(4)模式切换校验
模式切换校验核心逻辑由mode check来处理,并针对不同模式,把校验任务分发给不同文件来做
https://github.com/PX4/PX4-Autopilot/blob/ee96d209d78510fe7bcc2c34e526648fa79c0135/src/modules/commander/HealthAndArmingChecks/checks/modeCheck.cpp
以切换至offboard为例,需要判断数据以及需要的位置、速度估计信息是否有效
https://github.com/PX4/PX4-Autopilot/blob/ee96d209d78510fe7bcc2c34e526648fa79c0135/src/modules/commander/HealthAndArmingChecks/checks/estimatorCheck.cpp#L768
这就是无人机对解锁上锁、模式切换相关处理。有些朋友在插桩或仿真时候,苦于解锁校验和模式切换无法完成预期测试,这篇希望能对这些朋友有所帮助。下一篇,我们一起看下无人机在失控状态下,如何进行自我保护 |
|