查看: 1231|回复: 0

无人机遥控器控制指令处理

[复制链接]

34

主题

781

帖子

1538

积分

金牌飞友

Rank: 6Rank: 6

积分
1538
飞币
744
注册时间
2017-9-23
发表于 2023-6-1 10:43:17 | 显示全部楼层 |阅读模式
手动操纵飞行时,遥控器用来传达用户指令,接收机用来接收遥控器信号并发送给飞控

这篇和大家一起看下飞控对遥控器(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

这就是无人机对解锁上锁、模式切换相关处理。有些朋友在插桩或仿真时候,苦于解锁校验和模式切换无法完成预期测试,这篇希望能对这些朋友有所帮助。下一篇,我们一起看下无人机在失控状态下,如何进行自我保护
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表