ardupilot20230801

很好的中文参考文档,必看!!!

https://doc.cuav.net/tutorial/copter

专业名词释义,参数缩写

  • gimbal 云台,万向接头
  • failsafe 故障保护
  • Collective: 总距
  • Swashplate : 倾斜盘
  • SW: Swashplate 倾斜盘
  • RSC: Rotor Speed Control
  • RC: Radio Channel 无线通道
  • DDFP:Direct Drive Fixed Pitch 尾桨的类型,直驱、固定桨叶角
  • ESC:electronic speed controller 电子速度控制器
  • governor:调速器
  • throttle:油门
  • aileron stick 与roll有关的摇杆
  • elevator stick 与pitch有关的摇杆
  • collective 总距
  • blade pitch 桨距角
  • Thrust 推力,升力,拉力
  • RPM sensor 转速传感器
  • INS Inertial Sensor 惯性传感器
  • OSD 屏幕显示叠加
  • ADSB 航空防碰撞传感器
  • AFS advanced FaliSafe 高级故障检测处理
  • ATC attitude control
  • AP: ArduPilot
  • AC: Attitude Control ??
  • HAL: Hardware Abstraction Layer
  • RC: radio channel
  • ESCs: Electronic Speed Control 电子调速器
  • AHRS: Attitude and heading reference system 组合惯性导航系统、姿态航向参考系统
  • EKF: 扩展卡尔曼滤波
  • IMU: Inertial Measurement Unit 惯性传感器 ,惯性测量单元,主要用来检测和测量加速度与旋转运动的传感器。最基础的惯性传感器包括加速度计和角速度计(陀螺仪)。
  • NED frame:north east down 东北地坐标系 ,还有个东北天NEU(z轴指向天空)

学习补充

硬件接线

  • 遥控器通道一般使用:rc in 通道
  • 基于mavlink的外设,如相机,上位机,使用串口通道,使用的是哪个串口可在地面站的参数中配置。
  • 电机,伺服电机通道,具体接的哪个物理接口也是在地面站配置

云台与相机

云台是云台相机是相机
云台:控制相机转动的装置
不同厂商相机;
帮助文档:https://ardupilot.org/copter/docs/common-optional-hardware.html
飞控只控制云台,通讯链路不涉及,通信链路即图传

处理mavlink消息的线程

    SCHED_TASK_CLASS(GCS,                  (GCS*)&copter._gcs,          update_receive, 400, 180, 102),
    SCHED_TASK_CLASS(GCS,                  (GCS*)&copter._gcs,          update_send,    400, 550, 105),

航迹规划

地面站生成一系列航点信息生成一系列mavlink message然后发送给飞控,飞控的GSC线程负责实时解析mavlink消息。

从copter.cpp中的AP_HAL_MAIN_CALLBACKS(&copter)到main函数,从主线程到创建任务调度

先看copter.cpp最后一行

AP_HAL_MAIN_CALLBACKS(&copter);

发现是个宏定义:

#define AP_HAL_MAIN_CALLBACKS(CALLBACKS) extern "C" { \
    int AP_MAIN(int argc, char* const argv[]); \
    int AP_MAIN(int argc, char* const argv[]) { \
        hal.run(argc, argv, CALLBACKS); \
        return 0; \
    } \
    }

此处,copter传给了CALLBACKS(引用),但是进run函数一看,他们的类型是不一样的(ChiBiOs为例):

void HAL_ChibiOS::run(int argc, char * const argv[], Callbacks* callbacks) const

可以看到区别:Callback是个结构体:

    struct Callbacks {
        virtual void setup() = 0;
        virtual void loop() = 0;
    };

而Copter是个类:

class Copter : public AP_Vehicle {...}

再仔细一看,哦原来Copter 的父类AP_Vehicle 继承了Callbacks ,那这个引用(指callbacks引用copter)就没毛病了:

class AP_Vehicle : public AP_HAL::HAL::Callbacks {...}

进run函数里瞧一瞧(HAL_ChibiOS_Class.cpp),发现run里包了一个main_loop:

void HAL_ChibiOS::run(int argc, char * const argv[], Callbacks* callbacks) const
{
...
    g_callbacks = callbacks;
    //Takeover main
    main_loop();
}

此时时可知g_callbacks 和copter指向同一个对象;
进main_loop再看:

static void main_loop()
{
...
    hal.scheduler->init();
    g_callbacks->setup();
...
    while (true) {
        g_callbacks->loop();
        ...
        schedulerInstance.watchdog_pat();
    }    
...
}

其中,hal.scheduler->init()对任务调度器做了初始化, g_callbacks->setup()开启了copter.cpp中task定义的任务,并进行任务调度。
另一种说法是,main_loop是主线程,主线程中有一个while循环,主线程为tasks列表创建了多个子线程并进行了线程调度(任务调度)。
由于g_callbacks指向的是copter对象,但copter类中并没有定义setup和loop,setup和loop的定义在父类AP_Vehicle 中!
进setup里看看就知道我上面讲的对不对了:

/*
  setup is called when the sketch starts
 */
void AP_Vehicle::setup()
{
...
    get_scheduler_tasks(tasks, task_count, log_bit);
    AP::scheduler().init(tasks, task_count, log_bit);//开启任务调度
...
}

到这,基本上思路就清晰起来了!

几个比较重要的线程(task)

rc_loop

功能:

  • 读取(更新)无线信号(遥控器信号、RC InPut data);
  • 根据遥控器信号,判断是否切换飞行模式mode,飞行模式一般由遥控器的某个位置开关决定;
  • Rc信号可以来自遥控器,也可以来自MavLink消息(如来自地面站);
// rc_loops - reads user input from transmitter/receiver
// called at 100hz
void Copter::rc_loop()
{
    // Read radio and 3-position switch on radio 
    read_radio();//读取无线信号,更新channel数据,发送RC信号给伺服电机(直升机,单旋翼等有伺服系统的无人机);
    rc().read_mode_switch();//判断是否切换飞行模式;
}

在这里插入图片描述
参考文献:https://www.guyuehome.com/41351

GCS update_receive

飞控处理mavlink消息的线程。
参考文献:https://www.guyuehome.com/41350

GCS update_send

发送MavLink消息;
bucket中的MavLink消息都会被发送出去;

Guide mode? Auto mode??

航点的执行只在auto模式下,Guided模式只是保持定点,而自稳模式只是保持姿态为0;

飞控的传感器,多传感器融合

陀螺仪:测量姿态角,有误差;
加速度计:测量机体加速度,积分后可得到速度;
气压计:测量高度;
GPS:经纬度,会被转化为地面系的xy信息,结合气压计会得到xyz信息;
距离传感器:

各飞行模式的特点

参考:https://ardupilot.org/copter/docs/flight-modes.html
auto:执行航点任务;
stabilize:保持姿态角,高度,偏航角;
hold:
Guided:
simple mode:
Loiter:In Loiter Mode the Copter automatically maintains position and altitude but permits manual override.
Auto Land:

The Copter autopilot provides a stable flying platform that enables precise manual and automated control over vehicle position, speed, orientation and actions. The supported control behaviours are made available using autopilot flight/control modes:

  • Manual flight modes like Stabilize, Alt Hold and Loiter provide different types of stabilisation and make vehicles easier to fly and position. Other manual modes like Follow Me and RTL (Return-to-Launch) automate tasks that would otherwise require complex manual adjustments.
  • AUTO Mode allows you to run complex missions that you can define using a ground control station.
  • A companion computer on the vehicle can communicate with/control Copter (for example, using DroneKit-Python) and perform computationally intensive low-latency tasks like computer-vision.
    This stability and precision, and the flexibility in terms of manual and automated control, make Copter the ideal platform for many UAV applications.

都有哪些使用场景?Copter Use-Case

https://ardupilot.org/copter/docs/copter-use-case-overview.html

高级功能,飞行特征? Flight Features

电子围栏?飞行边界?Fences

由纬度/经度和/或高度描述的飞行边界;
触碰或超出“围栏”时会触发故障保护,即触发FailSafe;

Cylindrical 围栏

https://ardupilot.org/copter/docs/common-ac2_simple_geofence.html

  • 到达围栏时的行为可以使用Mission Planner或QGC等地面站进行配置。
    -以Home点为中心的简单“锡罐”形状的围栏;
  • 在Loiter、PosHold和AltHold模式下,Copter将在FENCE_ALT_MAX停止增加高度。在Loiter模式下,它将在水平边界处停止。
  • 在其他模式中,如果达到高度或边界,它将执行下面的FENCE_ACTION。
    在这里插入图片描述
  • 如何在Mission Planner中设置围栏??
    1)直接配置参数树;
    2)在GeoFence Tab页面中配置
    在这里插入图片描述
    3)通过RC通道设置电子围栏使能;

Inclusion/Exclusion 围栏

https://ardupilot.org/copter/docs/common-polygon_fence.html

避障功能 Object Avoidance

两种类型:

地形跟随功能 Terrain Following

Surface Tracking功能

电机推力系数调整 Motor Thrust Scaling

电调和电机组合,ESC/motor ;

  • MOT_THST_EXPO
  • MOT_SPIN_MAX
    如何测量pwm输入与电机推力的关系???

如何滤波?如何减小震动?低通滤波?陷波滤波? Notches Filtering

震动管理?managing vibration
注意震动噪声和传感器噪声的区别?
处理震动噪声的两种滤波器:

  • 用于处理加速度计信号、陀螺仪信号的低通滤波器,由参数 INS_ACCEL_FILTER、INS_GYRO_FILTER控制;
  • 由于处理陀螺仪信号的谐波陷波滤波器,由参数 INS_HNTCH_ENABLE、INS_HNTCH_MODE控制;

对于多旋翼机和QuadPlanes,几乎所有的振动都源于电机的旋转频率。对于直升机和飞机,振动与主旋翼/螺旋桨速度有关。
为什么对陀螺仪更适合用陷波滤波??看文档;
ardupilot有两个陷波滤波器:动态陷波滤波器,静态陷波滤波器;
启用陷波滤波:
谐波陷波是通过将INS_HNTCH_ENABLE=1设置为第一陷波,将INS_HNC2_ENABLE=1设置为第二陷波来整体启用的;
动态谐波陷波滤波:
提供了在不同推力条件下动态调整陷波中心频率以跟踪电机速度的各种方法,即动态谐波陷波滤波。
如何确定陷波滤波器中心频率???

  • 参阅IMU批量采样器的振动测量页面,确定震动噪声频率;
  • 确定震动噪声频率;
  • 设置陷波滤波器
    这一章节内容太多…后续补充观看笔记;

飞机在移动的平台上起飞?

陀螺仪如何校准?参数如何初始化?

无GPS时如何估计位置??

低成本IMU(加速度计、陀螺仪、指南针)漂移太快,无法在没有外部速度或位置源的情况下进行位置估计。换句话说,低成本的IMU本身不足以估计位置。
没有GPS传感器时如何对位置信息进行估计??有几种方案。详细使用看文档:

  • Intel RealSense T265
  • MarvelMind Beacons
  • ModalAI VOXL
  • Nooploop Beacons
  • Nokov Indoor Optical Tracking
  • Optical Flow
  • OptiTrack motion capture system
  • Pozyx Beacons
  • ROS with Google Cartographer (Developers only)
  • Vicon Positioning System
  • GPS/Non-GPS Transitions

如何较小飞机在风中飞行的影响

主动向风,减小接触风的机身面积??
https://ardupilot.org/copter/docs/weathervaning.html

如何购买和构建机架?

https://ardupilot.org/copter/docs/what-you-need.html#

如何保障飞行安全??

保持距离?远离人群?保持电池电量?

飞控硬件选型

如何选择硬件?要考虑的因素有哪些?
需要哪些外设接口?传感器接口?
伺服电机/电机的通道数量?
串口的通道数?
板子尺寸?
其他?

开源的板子有哪些?

闭源的板子有哪些?

板子的规格、介绍、电路图

初始配置

文档中,autopilot一般指飞控硬件,ardupilot指固件或软件;

1.搭建好飞机平台

结构师负责

2.安装地面站

默认用 mission planner
如何选择地面站?
注意事项?
https://ardupilot.org/copter/docs/common-install-gcs.html

3.安装飞控硬件

安装在中心位置;(不在中心会影响传感器校正)
白色箭头指向机体正前方;
减震垫、减震泡沫?减震装置?
注意:
如果板安装在非标准方向(即箭头未指向前方),则在进行加速计校准之前,请确保参数 AHRS_ORIENTATION 设置正确。

4.接线(传感器、电源、外设等接线)

Typical Autopilot Wiring Connections

4.1 GPS/Compass 模块

一般接在串口,然后在该串口跑GPS协议程序(驱动),默认GPS配置到串口3,当然也可修改参数来修改配置:

RC input

ardupilot会自动检测RC接收器,包括以下协议:
PPM
sBUS
DSM
串口等

电机/伺服电机

电机ESCs和/或PWM伺服连接到自动驾驶仪的PWM输出。
标记为MAIN/AUX outputs;
那些带有MAIN/AUX输出标签的控制器通常表示正在使用IOMCU协处理器。
MAIN输出来自该协处理器,而AUX指定输出则直接由自动驾驶仪控制。
大多数板级自动驾驶仪不使用IOMCU,其输出仅标记为OUTPUTx或Mx。
这种区别很重要,因为AUX输出(以及来自没有IOMCU的自动驾驶的OUTPUT)可以用作GPIO以及PWM或Dshot。而MAIN输出只能用于PWM。

Connect buzzer and safety switch

在这里插入图片描述

Connect other peripherals

减震装置

磁干扰

如何减少磁干扰??

下载飞控固件

连接地面站

参数配置、设置

查询参数含义:https://ardupilot.org/copter/docs/parameters.html
https://ardupilot.org/copter/docs/common-advanced-configuration.html
完成好飞机搭建、接线,连接地面站后,需要根据具体的接线,硬件来进行对应的参数配置以实现具体功能,在地面站中进行;
在这里插入图片描述
以传统直升机为例:
在这里插入图片描述
大多数设置与多旋翼机相同,但是有部分参数不同;

Vehicle Type

  • FRAME_CLASS 机架类型,如单旋翼?共轴?带尾桨;
  • H_FLYBAR_MODE 有无稳定小翼,影响姿态控制器的选择;
  • H_OPTIONS ;

General Swashplate/Collective Setup (倾斜盘设置)

RC输入映射配置

一般RC输入一个有8个,或更多(最多16),看遥控器/接收器类型;
需要将这8个RC通道映射(配置)成控制通道的期望值(如俯仰角期望值,横滚角期望值,偏航角速率?总距,尾距等)。
默认映射如下,可根据具体情况更改:
在这里插入图片描述
相关参数:

  • Note1: These functions are mapped by RCMAP_x parameters by default.
  • Note2: The FLTMODE_CH defaults to RC Channel 5.
  • Note3: The RC8_OPTION defaults to the Motor Interlock function.
    Rc input的其他配置(如上下限):RCX_
    已知Rc input 最多有16个通道,那么如何配置遥控器的哪些按钮或摇杆映射哪些通道呢???
    遥控器厂商决定,看遥控器说明书就知道哪个拔键或摇杆对应的是那个通道;
    Rc input有两个来源,遥控器和mavlink消息(MAVLink Overrides);
    几点疑问:
  • servo function?? :
    servo/motor outputs may be mapped to any output function supported by ArduPilot. each SERVO output channel has a SERVOn_FUNCTION parameter. For example, SERVO5_FUNCTION controls the output function of channel 5, SERVO6_FUNCTION controls the output function of channel 6 and so on.
  • Rc input function??
    同理?

output channel 输出映射配置

ArduPilot最多支持32个输出通道。这些可以输出通道可以作用于DroneCAN、ESCs、舵机等使用,也可以直接作为自动驾驶仪输的GPIO使用,或者两者兼而有之。
由于这些out channel 一般都是作用于motor或舵机,因此也被成为servo/motor output channel;
这次out channel 的功能配置通过参数SERVOn_FUNCTION进行配置, For example, SERVO5_FUNCTION controls the output function of channel 5, SERVO6_FUNCTION controls the output function of channel 6 and so on。

硬件上的out channel:
在这里插入图片描述
例如有如下配置:
在这里插入图片描述
servo out channel 1 映射到了Motor1,2映射到Motor2,3到3,4到4;
那么Motor1,2,3,4分别是什么呢??
是怎么确定要将servo out channel 1 映射到Motor1,2映射到Motor2,3到3,4到4的呢??
这就要根据具体的直升机类型和倾斜盘类型来决定了,如H3-120型倾斜盘:
在这里插入图片描述
目前ardupilot兼容的几种倾斜盘类型的结构图可以在该处查看:https://ardupilot.org/copter/docs/traditional-helicopter-swashplate-setup.html
功能配置要和具体物理接线相一致,怎么接线就应该怎么配置!!即SERVO1_FUNCTION配置成Motor1那么该倾斜盘的舵机1就必须接在out channel 1 !!
两种配置途径:

  • 初始设置 ~> servo output;
  • 配置/调试 ~> 通过参数树直接搜索该参数进行配置;

倾斜盘的舵机配置直接影响到混控和控制分配!!!

尾桨电机/尾桨舵机连线和配置:
尾桨一般有两种类型:

  • Direct Drive Variable Pitch (DDVP) tail rotors ,DDVP即桨距角可变,转速也可变的尾桨;
  • Direct Drive Fixed Pitch (DDFP) tail rotors,DDFP即桨矩角恒定,只速度可变的尾桨;

两种类型一般如何配置?

  • DDFP:尾桨装置只有tail rotors ,一般接到 out channel 4,然背将out channel 4配置为Motor4(即servo function 36),由out channel 4控制转速;
  • DDVP:尾桨装置包括tail rotors和servo rotor,伺服电机servo rotor负责控制桨距角,tail rotors控制转速,一般servo rotor连接到output channel 4,tail rotors(实际是tail ESC)连接到output channel 7,output channel 4配置为Mortor4,output channel 7配置为HeliTailRSC(servo function 32)。
    疑问:为啥尾桨控制是out channel 4而不是其他?有的倾斜盘需要四个舵机时,则倾斜盘就会由Motor1,2,3,5来控制(如下图),可在Swashplate Setup轻易看出。而为啥是out channel 4控制尾桨,则是由于ardupilot源码中默认就是用通道4控制尾桨,可以修改吗??未尝试!
    在这里插入图片描述
    那么常有的有关尾桨配置的相关参数包括:
  • H_TAIL_TYPE:配置尾桨类型DDVP或DDFP;
  • SERVO4_FUNCTION:一般配置成Motor4,然后尾桨电机或舵机连接到输出通道4;
  • SERVO4_REVERSED:更改尾桨旋转方向;

主旋翼电机连线和配置:
一般,输出通道8作为直升机油门的控制(注意控制油门和总距的区别),油门控制一般有两种类型throttle servo 和ESC,以ESC为例,ESC控制主旋翼电机的转速从而达到控制油门的目的。
连线: out channel 8 连接主旋翼电机的throttle servo 或ESC;
配置: servo 8 function(即out channel 8)配置为Heli RSC (servo function 31) ;即SERVO8_FUNCTION赋值为Heli RSC (servo function 31) ;

倾斜盘(十字盘)初始化设置

一般有3种大类:H1,H3,H4;
旋转斜盘库涵盖了三个和四个伺服旋转斜盘的所有常用配置。如果您有一个独特的旋转斜盘,您也可以使用通用的三伺服旋转斜盘。
几个概念:

  • aileron 与roll有关
  • elevator 与pitch有关

检查周期变距和总距是否正常:
国产的动力系统,主旋翼顺时针旋转,由于桨叶的挥舞角滞后桨叶角90°,但是由于倾斜盘到桨叶角连接结构的原因,倾斜盘的倾角又超前桨叶角90°,因此实际上桨尖平面与倾斜盘平面是平行关系,则正常的倾斜盘响应应该如下:

  • 向前推姿态控制杆(想控制飞机前飞),倾斜盘前倾;
  • 向后拉姿态控制杆,倾斜盘后倾;
  • 向左推姿态控制杆,倾斜盘左倾;
  • 向右拉姿态控制杆,倾斜盘右倾;
  • 向上推油门杆,倾斜盘上升;向下拉油门杆,倾斜盘下降。

如果倾斜盘响应不正常则通过修改以下参数来修正:
SERVO1_REVERSED, SERVO2_REVERSED, SERVO3_REVERSED, H_SW_COL_DIR;

使倾斜盘水平:

  • 使用磁铁和钉子(如下图所示)进行调平:
    在这里插入图片描述
  • 利用SERVOn_TRIM来调平
    将H_SV_MAN参数设置为1。调整总距杆,直到伺服机构几乎垂直于旋转轴。调整SERVO1_TRIM、SERVO2_TRIM和SERVO3_TRIM,直到旋转斜盘处于水平位置。
    SERVOn_TRIM实质是摇杆处于中位值时对应的PWM映射(值);
  • 利用Linearize Servo Feature调平:
    https://ardupilot.org/copter/docs/traditional-helicopter-swashplate-setup.html

关于主旋翼总距,周期变距(循环变距)地一些初始化设置:

总距上下限设置:

  • 总距对应了桨叶桨距角的变化;
  • 桨叶桨距角上下限一般设置为 -2° ~ +12°;
  • 将H_SV_MAN设为2,然后调整H_COL_MAX的值使得桨距角为+12°;
  • 将H_SV_MAN设为4,然后调整H_COL_MIN的值使得桨距角为-2°;
  • 其中H_COL_MIN和H_COL_MAX量纲都是PWM值;
  • 若使用的是Version 4.2 and later,还需要进一步设置以下参数:
    H_COL_ANG_MAX:与H_COL_MAX相对应的桨距角(以度为单位),例如12;H_COL_ANG_MIN:与H_COL_MIN相对应桨距角(以度为单位),例如-2;

零推力桨距角设置:

  • 零推力时的总叶片桨距角,单位为度。对称翼型的桨叶,该值一般为零度。对于chambered airfoil blades,此值通常为负值。
  • 将H_SV_MAN 设置为3 ;
  • 然后调整H_COL_ZERO_THRST的值使得旋翼升力(推力)为0,单位为度;

着陆总距设置:

  • H_COL_LAND_MIN ,单位为度;
  • 用于检测着陆;
  • 使得直升机有合理的下降速度;
  • 只影响定高飞行模式(altitude hold )下的飞行;
  • 设定习惯一般为: 若H_COL_ZERO_THRST设为0,则 H_COL_LAND_MIN 设为-2,若H_COL_ZERO_THRST设为-3,则 H_COL_LAND_MIN 设为-5,单位为度;

Version 4.1 and earlier固件版本的Zero Thrust Point配置:
https://ardupilot.org/copter/docs/traditional-helicopter-swashplate-setup.html

周期变距设置(最大周期变距桨叶角调节):

  • H_CYC_MAX:最大周期变距桨叶角调节;
  • 用于调节最大周期变距;
  • 这个参数没有单位;
  • 由于倾斜盘与桨叶角的连接结构的特征导致,倾斜盘与桨叶角是存在90°关系的,即存在横向周期变距时,应该将桨叶旋转到0°旋转方向上再测量桨叶角;纵向周期变距则同理;
  • 横向和纵向的最大周期变距应设置为相同,因此只需要配置一个H_CYC_MAX即可;
  • 调整H_CYC_MAX的步骤(方法):
    让姿态摇杆处在中位值,测量此时的桨叶角;将摇杆推到最大再测量此时的桨叶角,这两个桨叶角的差值即最大周期变距桨叶角,调节H_CYC_MAX的值以改变大周期变距桨叶角,实际上它就是一个从倾斜盘周期变距到桨叶角的通道增益;

其他重要配置参数:
H_SW_TYPE:倾斜盘的类型,H1?H3?H4?
H_SV_MAN:Manual Servo Mode 是否手动调节倾斜盘
H_SW_COL_DIR :总距的方向,0正常1反向;

RC校准 RC Calibration

在解锁起飞之前,必须校正RC;
几个要点:

  • 查看是mode1还是mode2;
  • 所有摇杆,拨杆打到中位;
  • 点击开始校准
  • 拨动所有摇杆和拨杆,按钮;
  • 点击完成;

https://ardupilot.org/copter/docs/common-radio-control-calibration.html#common-radio-control-calibration

罗盘校准 Compass Calibration

https://ardupilot.org/copter/docs/common-compass-calibration-in-mission-planner.html#common-compass-calibration-in-mission-planner

加速度计校准 Accelerometer Calibration

如果飞控安装在非标准方向(即箭头未指向前方),则在进行加速计校准之前,请确保AHRS_orientation设置正确。

电子调速器校准 ESC Calibration

进行ESC校准时,一定要拆下所有叶片。

尾旋翼设置 Tailrotor Setup

几种尾旋翼系统类型:

  • Servo Only
    尾旋翼的动力来源于主旋翼或主电机,通过皮带或连杆连接;
    由一个伺服电机控制尾旋翼桨叶角;
  • Direct Drive Fixed Pitch Clockwise (DDFP CW) (tail rotor driven by a motor whose ESC is controlled by ArudPilot)
    旋翼顺时针旋转,尾旋翼动力由独立的尾翼电机提供,桨叶角固定;
    由一个ESC控制电机转速;
  • Direct Drive Fixed Pitch Counter-Clockwise (DDFP CCW) (tail rotor driven by a motor whose ESC is controlled by ArudPilot)
    旋翼顺逆时针旋转,尾旋翼动力由独立的尾翼电机提供,桨叶角固定;
    由一个ESC控制电机转速;
  • Direct Drive Variable Pitch (DDVP) (both a tail rotor motor ESC and a servo controlled pitch link are used)
    尾旋翼动力由独立的尾翼电机提供,桨叶角可变;
    由一个ESC控制尾翼电机转速,一个伺服电机控制桨叶角;

不同尾旋翼系统类型如何配置?
Servo Only
一般地,伺服电机接 out 4,配置成Motor4,根据servo type, set the minimum, maximum and trim PWM;
Direct Drive Fixed Pitch
1)确定DDFP的旋转方向;
2)一般地,将ESC连接到out 4,并配置成Motor4,设置PWM上下限、trim PWM;
Direct Drive Variable Pitch
一般地,将伺服电机连接到out 4,并配置成Motor4,将ESC连接到out 8,并配置成HeliTailRSC,设置PWM上下限、trim PWM;
如何设置Tail Trim(即trim PWM)??

  • Trim 值实际就是一个平衡点,使得偏航力矩为0的控制输入量初始值,后续的控制器控制量应该在此初始控制量上变化,trim PWM即保持系统平衡的pwm值;
  • trim pwm 也可以解释为中位值,当摇杆处于中位中位状态(自然放松状态)时映射的pwm值;
  • Collective to tailrotor compensation 和 Tail Trim 都是为实现平衡功能而定义的,作用基本相同;
  • 如何设置 trim 值?
    以SERVOx_TRIM为例:
    当Collective to tailrotor compensation不启用时,应当调节SERVOx_TRIM使得飞机处于悬停状态;
    从上述章节可知,SERVOx_TRIM亦可用来调节倾斜盘水平,但是如何由于重心问题导致倾斜盘水平并不能使得飞机悬停,对于SERVOx_TRIM的配置(调节)应该以悬停目标作为调节依据;
    飞行结束后,提取日志并确定悬停飞行伺服的平均PWM值。
    当启用Collective to tailrotor compensation时,应当调整SERVOx_TRIM使得尾桨桨叶角为0,只使用Collective to tailrotor compensation使得偏航速度为零;

尾桨总距补偿 Collective to Tailrotor Compensation

  • 用于适应(抵消)主旋翼总距变化频繁导致的偏航力矩(角速率)频繁变化,减小偏航控制中积分器的偏置量;
  • 这个参数的实质含义:调节这个参数,使得当主旋翼桨叶角发生变化时,尾桨力距补偿量约等于主旋翼桨叶变化引起的主旋翼偏航力矩,这样当主旋翼桨叶角变化时不至于使得偏航速率变化太猛;
  • In versions 4.3 and earlier, the parameter H_COLYAW was used;
  • In versions 4.4 and later, the parameter H_COL2YAW is used
  • 设置(调节)方法:
    1)通过设定SERVOx_TRIM使得尾桨桨叶角为0;
    2)开始时设H_COL2YAW为0.5,调节H_COL2YAW,使得当改变主旋翼总距(油门,桨叶角)时,偏航速率最小;

主旋翼电机转速控制 Rotor Speed Control Setup

一般地,RC输入并不能直接控制电机转速(RC Passthrough RSC mode例外),一般只控制桨叶角(总距,周期变距);
一般地,out 8 被配置成为HeliRSC,即out 8 输出通道一般用来控制主旋翼电机转速,控制电机的方式主要有以下几种:

  • 通过油门控制(燃油电机装置);
  • 通过电子调速器ESC控制点击;
  • 通过ardupilot内部集成的Governor直接控制电机,不经过ESC;

设置 RSC mode 以决定电机的控制方式

  • 参数 H_RSC_MODE;
  • 有4种不同的模式,一般模式2较为常用,根据具体动力装置而决定;模式2一般用于具有ESC的主旋翼电机,模式3一般用于开环控制,更多请参考文档这里不做太多展开;
    在这里插入图片描述

参数H_RSC_IDLE
飞机上电后,电机解锁前的空转转速设置;
参数H_RSC_RAMP_TIME
从空转(H_RSC_IDLE)到额定转速(当H_RSC_MODE=2时H_RSC_SETPOINT)的过渡时间配置;
参数H_RSC_RUNUP_TIME
非手动模式下(如自动模式),延迟某段时间后飞机才会起飞,延迟时间由H_RSC_RUNUP_TIME配置;
一般,H_RSC_RUNUP_TIME要高于H_RSC_RAMP_TIME 才合理;
参数H_RSC_CRITICAL
若H_RSC_RUNUP_TIME设为10,则H_RSC_CRITICAL设为70%???文档没看懂!!

ardupilot内嵌的点击速度控制管理 Internal RSC Governor

https://ardupilot.org/copter/docs/traditional-helicopter-internal-rsc-governor.html

查询想要配置的参数,含义,解释,请参考: Advanced Configuration

起飞前的测试

检查

usb是否断开;
电源是非连接;

测试机身在自稳模式下的响应

为方便测试,可以将空转速度设为0,或者将桨叶取下再测试。

  • 用手将直升机向左滚动,旋转斜盘应向右倾斜;
  • 用手将将直升机向右滚动,旋转斜盘应向左倾斜;
  • 用手将将直升机向前倾斜(即机头向下倾斜),旋转斜盘应向后倾斜;
  • 用手将将直升机向后倾斜(即机头向上倾斜),旋转斜盘应向前倾斜;
  • 快速顺时针旋转直升机,尾部伺服机构的响应应该试图抵消这个转动;
  • 逆时针快速旋转直升机,尾部伺服机构的响应应该试图抵消这个转动;
  • 接下来慢慢转动直升机。你应该发现,在某个方向上,方向舵保持在中间;

测试倾斜盘对遥控器的响应

一般情况下(),倾斜盘与桨尖平面是动态平行的,即倾斜盘前倾会使飞机前飞,后倾后飞,左倾左飞,右倾右飞。那么倾斜盘对遥控器正常的响应应该表现为:

  • roll stick 右拨,倾斜盘右倾;
  • roll stick 左拨,倾斜盘左倾;
  • pitch stick 前拨,倾斜盘前倾;
  • pitch stick 后拨,倾斜盘后倾;
  • 油门杆上腿,倾斜盘上升,反之下降;
  • yaw stick 左推,机身顺时针转动,反之逆时针转动;

其他

  • 检查直升机重心,如果重心不在主轴上则调整电池的位置,直到满足条件;
  • 在加油门的过程中检查旋翼旋转是否正常,若产生太大的震动会导致姿态控制出错,甚至会导致 EKFFailsafe;
  • Arm the vehicle 并解锁电机;

自稳模式下做悬停飞行

  • 推油门要慢;
  • 检查周期变距是否可以控制飞机运动;
  • 如果姿态很不稳定,尝试调节PID参数;

配平 Hover Trim

为了使得力,力距平衡,保持直升机悬停,必须要进行悬停点配平(Hover Trim,即计算悬停点的姿态值(Trim值),然后通过参数ATC_HOVR_ROL_TRM 设置roll的配平值(悬停值),这样才能使得自稳模式下的姿态控制器能将飞机的姿态控制在系统悬停点;
ATC_HOVR_ROL_TRM 的含义和工作原理:
当遥控器处于中位值时,意味着desired roll 和desired pitch为0(不设置radio trims的情况下),但实际上遥控器的RC输入并不是姿态控制器真真正的期望姿态值,而是期望姿态值的增量,真正的期望姿态值还必须要加上配平点(悬停点)的姿态值。
源码实现如下:

    // Add roll trim to compensate tail rotor thrust in heli (will return zero on multirotors)
    euler_roll_angle += get_roll_trim_rad();

其中euler_roll_angle是遥控器RC输入转换而来的期望roll,get_roll_trim_rad()是ATC_HOVR_ROL_TRM 设置的值,求和得到最终新的期望roll值;
目前没有参数对pitch进行配平设置;
自稳模式下的配平步骤和方式:

  • 1)ATC_HOVR_ROL_TRM 设为0;只调整AHRS_TRIM_X 和AHRS_TRIM_Y使得飞机尽量悬停(减少漂移);
  • 2)AHRS_TRIM_X设为0;只调整ATC_HOVR_ROL_TRM 和AHRS_TRIM_Y使得飞机尽量悬停(减少漂移);

调节思路:

  • ATC_HOVR_ROL_TRM :将悬停时的roll值赋给ATC_HOVR_ROL_TRM即可 ,注意单位和赋值范围;
  • AHRS_TRIM_X :由于用于姿态控制器的AHRS最终输出=实际姿态值+AHRS_TRIM_X ,将悬停时的 - roll 值赋给AHRS_TRIM_X 即可 ,注意单位和赋值范围;
  • AHRS_TRIM_Y :由于用于姿态控制器的AHRS最终输出=实际姿态值+AHRS_TRIM_Y ,将悬停时的 - pitch 值赋给AHRS_TRIM_Y 即可 ,注意单位和赋值范围;

由于悬停点的姿态不为0,为了使得悬停点的AHCS估计为0,必须要根据当前配平值来设置AHRS Trim(autopilot AHRS Trim value is set to make it think the attitude is zero deg.);

震动滤波设置 Enable Notch Filtering

处理震动噪声的两种滤波器:

  • 用于处理加速度计信号的低通滤波器,由参数 INS_ACCEL_FILTER控制;
  • 由于处理陀螺仪信号的谐波陷波滤波器,由参数INS_GYRO_FILTER控制;

如何选择谐波滤波器?动态静态?

  • 旋翼电机有ESC or RPM sensor(转速传感器):选用动态谐波陷波器;
  • 否则:请选用静态谐波陷波器。

静态陷波滤波器设置 Static Harmonic Notch

  • Set INS_HNTCH_ENABLE = 1 to enable the harmonic notch
  • Set INS_HNTCH_REF = 0 to set the harmonic notch reference value for the static harmonic notch
  • Set INS_HNTCH_FREQ = 将飞行数据下载下来进行离线FFT分析,得到震动频率,Rotor Speed in Hz to set the harmonic notch reference frequency
  • Set INS_HNTCH_BW = 10 to set the harmonic notch bandwidth
  • Set INS_HNTCH_HMNCS = 11 to set 1st, 2nd, and 4th harmonics

动态陷波滤波器设置 Dynamic Harmonic Notch

  • INS_HNTCH_MODE: 根据具体情况来设定,
    在这里插入图片描述
  • Set INS_HNTCH_ENABLE = 1 to enable the harmonic notch
  • Set INS_HNTCH_REF = 1 to set the harmonic notch reference value to the RPM sensor data. RPM sensor data is automatically scaled to Hz.
  • Set INS_HNTCH_FREQ = half of governed Rotor Speed in Hz to set the lower bound of the dynamic harmonic notch reference frequency.
  • Set INS_HNTCH_BW = 10 to set the harmonic notch bandwidth
  • Set INS_HNTCH_HMNCS = 11 to set 1st, 2nd, and 4th harmonics

如何确定震动频率(噪声)??

  • 有RPM sensor的话可以在线确定;
  • flash空间大于2M的板子可以开启在线FFT来分析;
  • 下载飞行数据进行离线FFT分析;

如何下载飞行数据并进行离线FFT分析震动频率?
See the Measuring Vibration with IMU Batch Sampler page for this step. Once the noise frequency is determined, the notch filter(s) can be setup.
【1】https://ardupilot.org/copter/docs/common-imu-batchsampling.html#common-imu-notch-filtering-post-configuration-flight-and-post-flight-analysis
【2】https://ardupilot.org/copter/docs/common-imu-notch-filtering.html

调参

有几点需要注意:

  • 除了PID反馈控制,还有前馈;
  • 控制量上下限,I积分器上下限;
  • 角度与弧度的转换;

整体控制结构

在这里插入图片描述

通过查看代码的方式理解参数含义和用法

看文档对参数含义的解释没看懂;
查看代码是如何使用该参数的;

  • 查看解析mavlink消息的线程是如何解析mavlink msg的?
    1)SCHED_TASK_CLASS(GCS, (GCS*)&copter._gcs, update_receive, 400, 180, 102),
    2)GCS_MAVLINK::update_receive(uint32_t max_time_us)
    3)F12到packetReceived再F12到handleMessage,会看到有一个switch,一般的msg在default中的handle_common_message(msg)进行处理,继续F12;
    4)handle_common_message中又有一个sitch,

多旋翼接线、设置、配置、起飞注意事项、调参

安装

金属屏蔽罩?
白色箭头指向正前方;
方位不是正前方时要调节参数 AHRS_ORIENTATION;(在加速度校准之前调节)

接线

GPS、罗盘
遥控器接收器、RC接收器
电机、伺服电机
蜂鸣器和安全开关
其他外设
相关链接:
Typical Autopilot Wiring Connections
Connect ESCs and Motors

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值