- Debugging/Logging - 飞行日志分析
- Debugging/Logging - ULog文件格式
- 教程
- 教程 - 地面站
- 教程 - 编写应用程序
- 教程 - QGC的视频流
- 教程 - 远距离视频流
- 教程 - u-blox M8P RTK
- 新手上路
- 新手上路 - 初始设置
- 新手上路 - 安装工具链
- 安装工具链 - Mac OS
- 安装工具链 - Linux
- Linux - Advanced Linux
- 安装工具链 - Windows
- 新手上路 - Fast RTPS installation
- 新手上路 - 代码编译
- 新手上路 - 高级配置
- 新手上路 - 贡献& 开发者电话会议
- 贡献& 开发者电话会议 - GIT例程
- 贡献& 开发者电话会议 - Documentation
- 新手上路 - Licenses
- 概念解读
- 概念解读 - 飞行模式
- 概念解读 - 结构概述
- 概念解读 - 飞行控制栈
- 概念解读 - 中间件
- 概念解读 - 混控和执行器
- 概念解读 - PWM限制状态机
- Hardware
- Hardware - 自驾仪硬件
- 机型 - 统一的基础代码
- 机型 - 参考机型
- 机型 - 添加一个新的机型
- Data Links - SiK Radio
- Data Links - Wifi数传
- Data Links - 数传
- I2C总线 - SF1XX lidar
- 传感器和执行机构总线 - UAVCAN总线
- UAVCAN总线 - UAVCAN Bootloader
- UAVCAN总线 - UAVCAN固件升级
- UAVCAN总线 - UAVCAN配置
- UAVCAN总线 - UAVCAN 的各种笔记
- 传感器和执行机构总线 - UART
- UART - uLanding Radar
- 传感器和执行机构总线 - 设置云台控制
- 传感器和执行机构总线 - 相机触发器
- Hardware - 协同电脑
- 仿真
- 仿真 - 基本仿真
- 仿真 - Gazebo仿真
- 仿真 - HITL仿真
- 仿真 - 连接到ROS
- 仿真 - AirSim仿真
- 仿真 - 多机仿真
- 中间件及架构
- 中间件及架构 - uORB消息机制
- 中间件及架构 - MAVLink消息机制
- 中间件及架构 - 守护程序
- 中间件及架构 - 驱动框架
- 模块 & 命令
- 模块 & 命令 - 命令
- 模块 & 命令 - 通信
- 模块 & 命令 - 驱动
- 模块 & 命令 - 系统
- Robotics
- Robotics - 用Linux进行外部控制
- Robotics - ROS
- ROS - 在RPi上安装ROS
- ROS - MAVROS (ROS上的MAVLink)
- ROS - MAVROS外部控制例程
- ROS - 外部位置估计
- ROS - Gazebo Octomap
- Robotics - DroneKit
- Debugging/Logging
- Debugging/Logging - FAQ
- Debugging/Logging - 系统控制台
- Debugging/Logging - 自驾仪调试
- Debugging/Logging - Sensor/Topic Debugging
- Debugging/Logging - 仿真调试
- Debugging/Logging - System-wide Replay
- Debugging/Logging - 发送调试的值
- Debugging/Logging - Profiling
- Debugging/Logging - 日志记录
- 教程 - 光流
- 教程 - ecl EKF
- 教程 - 飞行前检查
- 教程 - 着陆检测
- 教程 - Linux系统下使用S.Bus驱动
- Advanced Topics
- Advanced Topics - 系统启动
- Advanced Topics - 参数&配置
- Advanced Topics - 参考参数
- Advanced Topics - 安装Intel RealSense R200的驱动
- Advanced Topics - 切换状态估计器
- Advanced Topics - 外部模块
- Advanced Topics - STM32 Bootloader
- 测试和持续集成
- 测试和持续集成 - 持续集成
- 测试和持续集成 - Jenkins持续集成环境
- 测试和持续集成 - 综合测试
- 测试和持续集成 - Docker容器
- 测试和持续集成 - 维护
概念解读 - 混控和执行器
PX4架构保证了核心控制器中不需要针对机身布局做特别处理。
混控指的是把输入指令(例如:遥控器打右转
)分配到电机以及舵机的执行器(如电调或舵机PWM)指令。对于固定翼的副翼控制而言,每个副翼由一个舵机控制,那么混控的意义就是控制其中一个副翼抬起而另一个副翼落下。同样的,对多旋翼而言,俯仰操作需要改变所有电机的转速。
将混控逻辑从实际姿态控制器中分离出来可以大大提高复用性。
控制流程
一个特定的控制器(如姿态控制器)发送特定的归一化(-1..+1)的命令到给混合(mixing),然后混合后输出独立的PWM到执行器(电调,舵机等).在经过输出驱动如(串口,UAVCAN,PWM)等将归一化的值再转回特性的值(如输出1300的PWM等)。
{% mermaid %}
graph LR;
att_ctrl[Attitude Controller] —> act_group0[Actuator Control Group 0]
gimbal_ctrl[Gimbal Controller] —> act_group2[Actuator Control Group 2]
act_group0 —> output_group5[Actuator 5]
act_group0 —> output_group6[Actuator 6]
act_group2[Actuator Control Group 2] —> output_group0[Actuator 5]
{% endmermaid %}
控制组
PX4 有输入组和输出组的概念,顾名思义:控制输入组(如: attitude
),就是用于核心的飞行姿态控制,(如: gimbal
)就是用于挂载控制. 一个输出组就是一个物理总线,如前8个PWM组成的总线用于舵机控制,组内带8个归一化(-1..+1)值,一个混合就是用于输入和输出连接方式(如:对于四轴来说,输入组有俯仰,翻滚,偏航等,对于于向前打俯仰操作,就需要改变输出组中的4个电调的PWM输出值,前俩个降低转速,后两个增加转速,飞机就向前)。
对于简单的固定翼来说,输入0(roll),就直接连接到输出的0(副翼)。对于多旋翼来说就不同了,输入0(roll)需要连接到所有的4个电机。
Control Group #0 (Flight Control)
- 0: roll (-1..1)
- 1: pitch (-1..1)
- 2: yaw (-1..1)
- 3: throttle (0..1 normal range, -1..1 for variable pitch / thrust reversers)
- 4: flaps (-1..1)
- 5: spoilers (-1..1)
- 6: airbrakes (-1..1)
- 7: landing gear (-1..1)
Control Group #1 (Flight Control VTOL/Alternate)
- 0: roll ALT (-1..1)
- 1: pitch ALT (-1..1)
- 2: yaw ALT (-1..1)
- 3: throttle ALT (0..1 normal range, -1..1 for variable pitch / thrust reversers)
- 4: reserved / aux0
- 5: reserved / aux1
- 6: reserved / aux2
- 7: reserved / aux3
Control Group #2 (Gimbal)
- 0: gimbal roll
- 1: gimbal pitch
- 2: gimbal yaw
- 3: gimbal shutter
- 4: reserved
- 5: reserved
- 6: reserved
- 7: reserved (parachute, -1..1)
Control Group #3 (Manual Passthrough)
- 0: RC roll
- 1: RC pitch
- 2: RC yaw
- 3: RC throttle
- 4: RC mode switch
- 5: RC aux1
- 6: RC aux2
- 7: RC aux3
Control Group #6 (First Payload)
- 0: function 0 (default: parachute)
- 1: function 1
- 2: function 2
- 3: function 3
- 4: function 4
- 5: function 5
- 6: function 6
- 7: function 7
Virtual Control Groups
These groups are NOT mixer inputs, but serve as meta-channels to feed fixed wing and multicopter controller outputs into the VTOL governor module.
Control Group #4 (Flight Control MC VIRTUAL)
- 0: roll ALT (-1..1)
- 1: pitch ALT (-1..1)
- 2: yaw ALT (-1..1)
- 3: throttle ALT (0..1 normal range, -1..1 for variable pitch / thrust reversers)
- 4: reserved / aux0
- 5: reserved / aux1
- 6: reserved / aux2
- 7: reserved / aux3
Control Group #5 (Flight Control FW VIRTUAL)
- 0: roll ALT (-1..1)
- 1: pitch ALT (-1..1)
- 2: yaw ALT (-1..1)
- 3: throttle ALT (0..1 normal range, -1..1 for variable pitch / thrust reversers)
- 4: reserved / aux0
- 5: reserved / aux1
- 6: reserved / aux2
- 7: reserved / aux3
映射
因为存在许多控制组(例如飞行控制组,载荷组等)和许多输出组(例如基本8路PWM输出组,UAVCAN组等),所以一个控制组可以向多个输出组发送指令。
{% mermaid %}
graph TD;
actuator_group_0—>output_group_5
actuator_group_0—>output_group_6
actuator_group_1—>output_group_0
{% endmermaid %}
PX4混控器定义
ROMFS/px4fmu_common/mixers
中的文件实现了预定义机架所使用的混控器。它们可以用于自定义机架或者一般的测试。
语法
mixer通过文本文件定义;以单个大写字母加一个冒号开始的行是有效的。其它的行则会被忽略,这意味着注释可以自由地在定义中穿插使用。
每个文件可以定义多个混控器;混控器与作动器的分配关系由读取混控器定义的设备决定,作动器输出数目则由混控器决定。
例如:每个简单混控器或者空混控器按照它们在混控器文件中出现的顺序对应到输出1到输出x。
一个混控器定义通常具有如下形式:
<tag>: <mixer arguments>
tag标签决定混控器的类型;M
对应简单求和混控器,R
对应多旋翼混控器,等等。
空混控器
空混控器不接受控制输入并产生单个作动器输出,其输出值恒为零。空混控器的典型用法是在一组定义作动器特定输出模式的混控器组中占位。
空混控器定义形式如下:
Z:
简单混控器
简单混控器将0个或多个控制输入混合为单个作动器输出。所有输入被缩放后,经过混合函数得到混合后的输入,最后再经过输出缩放产生输出信号。
简单混控器定义如下:
M: <control count>
O: <-ve scale> <+ve scale> <offset> <lower limit> <upper limit>
如果 <control count>
为0,那么混合结果实际上为0,混控器将输出一个定值,这个值是在<lower limit>
和<upper limit>
限制下的<offset>
。
第二行用前文讨论过的缩放参数定义了输出缩放器。计算以浮点操作被执行,存储在定义文件中的值经过了因子10000的缩放,即偏移量-0.5会被存储为-5000。
紧跟在<control count>
词目之后的定义描述了控制输入以及它们的缩放,形式如下:
S: <group> <index> <-ve scale> <+ve scale> <offset> <lower limit> <upper limit>
<group>
值标示了控制输入来源,缩放器从中读取控制量,<index>
值则是控制量在组内的序号。这些值对读取混控器定义的设备而言都是特定的。
当用来混合载体控制时,控制组0是载体姿态控制组,序号0到3通常对应滚转,俯仰,偏航和油门。
混控器定义行中剩下的域则用来配置缩放器,参数如前文讨论。计算以浮点操作被执行,存储在定义文件中的值经过了因子10000的缩放,即偏移量-0.5会被存储为-5000。
多旋翼混控器
多旋翼混控器将4个控制输入(滚转,俯仰,偏航,油门)混合至一组作动器输出,这些作动器用来驱动电机转速控制器。
多旋翼混控器定义如下所示:
R: <geometry> <roll scale> <pitch scale> <yaw scale> <deadband>
支持的构型包括:
- 4x - X型布局四旋翼
- 4+ - +型布局四旋翼
- 6x - X型布局六旋翼
- 6+ - +型布局六旋翼
- 8x - X型布局八旋翼
- 8+ - +型布局八旋翼
每个滚转,俯仰,偏航缩放值定义了滚转,俯仰,偏航控制相对于油门控制的缩放。计算以浮点操作被执行,存储在定义文件中的值经过了因子10000的缩放,即偏移量-0.5会被存储为-5000。
滚转,俯仰和偏航输入的范围为-1.0到1.0,而油门输入的范围为0.0到1.0,执行器输出范围为-1.0到1.0。
当某个执行器饱和时,为保证该执行器值不超出范围,所有的执行器值都会被重新缩放,使得执行器的饱和上限被限制到1.0以内。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论