旋翼飞行器马达图书馆¶
本页介绍了 旋翼飞行器电机库
作为参考,下图提供了 Copter 架构的高层视图。电机库位于右下方 "硬件抽象层 "的上方。
ArduPilot 支持超过 22 种不同的多旋翼飞行器框架。电机库的设计目的是整合这些框架类型中的大部分差异,使其不受高层代码(包括姿态控制器和飞行器特定代码)的影响。换句话说,该库提供了一个通用接口,因此可以用相同的方式控制所有飞行器,而无需在高级代码中进行特殊处理。
下图显示了这些框架的分类,与类别结构一致
多旋翼飞行器矩阵(Multicopter Matrix):大部分螺旋桨朝下、无舵机的飞行器。这些是最常用的机架,代码可在 AP_MotorsMatrix 类
多旋翼三轴飞行器和单旋翼飞行器:由电机和舵机组合而成的飞行器。它们与多旋翼矩阵互为同级,可在 AP_MotorsTri 和 AP_MotorsSingle 班级
单、四旋翼旋翼飞行器:带有可提供反向推力的斜盘的飞行器。它们互为同辈,是 AP_MotorsHeli 类。
下图是电机库的类层次结构图
电机库的输入¶
姿态控制仪向电机库提供高水平的滚转、前平移/俯仰、偏航和油门指令,指令范围为 -1 至 +1 (左平移/横滚、俯仰和偏航)或 0 至 +1 (节流阀/电门)。姿态控制仪发出这些指令的确切位置可在 AC_AttitudeControl_Multi 的 rate_controller_run() 方法
空白 AC_AttitudeControl_Multi::速率控制器运行() { 向量3f 陀螺仪最新 = _ahrs.get_gyro_latest(); _发动机.设置滚动(目标到电机滚动率(陀螺仪最新.x, _速率_目标ang_vel.x)); _发动机.设置间距(目标到电机间距速率(陀螺仪最新.y, _速率_目标ang_vel.y)); _发动机.设置偏航(目标偏航率(陀螺仪最新.z, _速率_目标ang_vel.z));
所用方法的定义见 AP_Motors_Class.h
// 设置滚动, 设置间距, 设置偏航, 设置节流阀 空白 设置滚动(浮动 滚入) { 在...... = 滚入; }; // 范围 -1 ~ +1 空白 设置间距(浮动 pitch_in) { _pitch_in = pitch_in; }; // 范围 -1 ~ +1 空白 设置偏航(浮动 yaw_in) { 我不知道 = yaw_in; }; // 范围 -1 ~ +1 空白 设置节流阀(浮动 节流阀/电门) { _throttle_in(节流阀/电门) = 节流阀/电门; }; // 范围 0 ~ 1
产出和责任¶
所有电机库都必须做到两点:
将姿态控制仪的高电平输入转换为单个电机和伺服输出
滚动输入为 +1.0 时,电机和伺服输出应向右提供最大滚动旋转量
音高输入+1.0 时,应产生最大音高反馈
偏航输入 +1.0 时,顺时针方向的偏航应达到最大值
节气门输入+1.0 时,(在车身框架内)向上的加速度最大。油门输入为 0 时,向上的加速度应为最小值(旋翼飞行器则为向下的最大加速度)。
设置限制标志可避免姿态和油门控制器中的 "I-term 积累"。虽然不设置这些标志飞行器也可以飞行,但它们对于防止倾角控制过冲以及自动着陆检测非常重要。限值保存在 AP_Motors_Class::limit 变量。
// 结构 对于 收藏品 发动机 限额 国旗 结构 AP_Motors_limit { uint8_t 辊距 : 1; // 我们 有 达到 滚动 或 沥青 限额 uint8_t 打呵欠 : 1; // 我们 有 达到 打呵欠 限额 uint8_t 降低节流阀 : 1; // 我们 有 达到 throttle下限 uint8_t 上节流阀 : 1; // 我们 有 达到 throttle';上限 } 限额;
增加对新的 "多旋翼矩阵 "框架的支持¶
添加对新的 Multicopter Matrix 机架类型(即螺旋桨朝下且无舵机的机架)的支持:
决定框架的名称,并在 "motor_frame_class "和/或 "motor_frame_type "枚举中添加一个新条目。 AP_Motors/AP_Motors_Class.h
在 AP_MotorsMatrix::setup_motors() 为新的帧类别和/或帧类型
使用 AP_MotorsMatrix::add_motor() 或 AP_MotorsMatrix::add_motor_raw() 这些功能用于为飞行器上的每个电机设置滚动、俯仰和偏航系数。这些系数乘以来自姿态控制仪的高电平滚动、俯仰和偏航输入,然后将结果输出给电机。
上述 add_motor 函数的 testing_order 参数指定了用户启动电机测试时电机旋转的顺序。通常情况下,每个电机的测试顺序应与其在框架上的位置相对应,按顺时针方向旋转。
在案例底部设置 success = true,以提醒 AP_Motors 初始化代码注意框架已设置完毕
目前还没有添加更复杂框架类型的详细说明(抱歉!)。