旋翼飞行器马达图书馆

本页介绍了 旋翼飞行器电机库

作为参考,下图提供了 Copter 架构的高层视图。电机库位于右下方 "硬件抽象层 "的上方。

../_images/copter-architecture.png

ArduPilot 支持超过 22 种不同的多旋翼飞行器框架。电机库的设计目的是整合这些框架类型中的大部分差异,使其不受高层代码(包括姿态控制器和飞行器特定代码)的影响。换句话说,该库提供了一个通用接口,因此可以用相同的方式控制所有飞行器,而无需在高级代码中进行特殊处理。

下图显示了这些框架的分类,与类别结构一致

../_images/copter-motor-class-frames.png
  • 多旋翼飞行器矩阵(Multicopter Matrix):大部分螺旋桨朝下、无舵机的飞行器。这些是最常用的机架,代码可在 AP_MotorsMatrix

  • 多旋翼三轴飞行器和单旋翼飞行器:由电机和舵机组合而成的飞行器。它们与多旋翼矩阵互为同级,可在 AP_MotorsTriAP_MotorsSingle 班级

  • 单、四旋翼旋翼飞行器:带有可提供反向推力的斜盘的飞行器。它们互为同辈,是 AP_MotorsHeli 类。

下图是电机库的类层次结构图

../_images/copter-motor-class-structure.png

电机库的输入

姿态控制仪向电机库提供高水平的滚转、前平移/俯仰、偏航和油门指令,指令范围为 -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. 将姿态控制仪的高电平输入转换为单个电机和伺服输出

  • 滚动输入为 +1.0 时,电机和伺服输出应向右提供最大滚动旋转量

  • 音高输入+1.0 时,应产生最大音高反馈

  • 偏航输入 +1.0 时,顺时针方向的偏航应达到最大值

  • 节气门输入+1.0 时,(在车身框架内)向上的加速度最大。油门输入为 0 时,向上的加速度应为最小值(旋翼飞行器则为向下的最大加速度)。

  1. 设置限制标志可避免姿态和油门控制器中的 "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 初始化代码注意框架已设置完毕

目前还没有添加更复杂框架类型的详细说明(抱歉!)。