- Body坐标系:
- Ground坐标系(北东地坐标系):
- 北-x
- 东-y
- 指向地心-z *
坐标系满足右手定则。ground坐标系下通用的航向定义是以北为0,顺时针到180度,逆时针到-180 度。这样用-180到180度的数值表示飞行平台在空间中的朝向。
*Ground坐标系的高度方向与人对飞行控制的直觉不符,因此DJI将竖直方向的高度和速度都调整成了以天空方向为正,也即发送数值为正的速度会让飞行平台远离地面。但是调整高度方向并不改变Ground坐标系的另外两个轴的方向和顺序。
模式标志字节代表不同模式的配置。因为多旋翼的结构特点,飞行控制的时候,要把控制信息分解成三部分,竖直、水平和偏航,每个部分都有几种选择,通过模式标志字节进行组合。模式标志字节的定义如下。
名称 | 大小 | 说明 |
---|---|---|
模式标志字节 | bit7:6 | 0b00:HORI_ATTI_TILT_ANG 0b01:HORI_VEL 0b10:HORI_POS |
bit5:4 | 0b00:VERT_VEL 0b01:VERT_POS 0b10:VERT_THRUST |
|
bit3 | 0b0: YAW_ANG 0b1: YAW_RATE |
|
bit2:1 | 0b00:水平方向坐标系为 Ground 系 0b01:水平方向坐标系为 Body 系 |
|
bit0 | 0b0:非增稳模式 0b1:增稳模式 |
我们建议用户在室内环境中,如果没有安装Gudiance或者飞行高度超过3m时,不要使用竖直方向的位置控制,因为室内环境中气压计读数不准,影响控制器的表现。
备注:部分控制模式有进入条件限制:
- 当且仅当GPS信号正常(health_flag >=3)时,才可以使用水平位置控制(HORI_POS)相关的控制指令
- 当GPS信号正常(health_flag >=3),或者Gudiance系统正常工作(连接安装正确)时,可以使用水平速度控制(HORI_VEL)相关的控制指令
类别 | 模式 | 说明 |
---|---|---|
竖直方向 | VERT_POS | 垂直方向上控制的是位置,输入的控制量为相对地面的高度 |
VERT_VEL | 垂直方向上控制的是速度 | |
VERT_THRUST | 垂直方向上控制的是油门百分比(0-100)(危险,请小心使用) | |
水平方向 | HORI_ATTI_TILT_ANG* | 水平方向控制的是飞行器水平倾角,根据坐标系确定水平分量 |
HORI_POS** | 水平方向控制的是飞行器飞行距离**,根据坐标系确定水平分量 | |
HORI_VEL | 水平方向控制的是飞行器速度,根据坐标系确定水平分量 | |
偏航 | YAW_ANG | 偏航控制一个 Ground 坐标系下的目标角度。此模式下,飞控会将YAW坐标系强制为Ground系 |
YAW_RATE | 偏航控制目标角速度 |
**HORI_ATTI_TILT_ANG模式控制量如下图,DJI飞控采用水平面直接进行整个平面旋转。其中平面旋转角度为Θ,旋转方向与x轴或roll轴方向角度为γ。输入参量Θx=Θcos(γ),Θy=Θsin(γ)。(当采用Ground坐标系时γ为飞行方向与正北方向夹角,此时飞行器飞行状态与IOC模式相似;当采用Body坐标系时γ为飞行方向与飞行器机头方向夹角,此时飞行器飞行状态与遥控器下的姿态模式相似)*
*HORI_POS模式的输入量是相对位置的净输入量。净输入量通过GPS或Guidance等传感器获得位置移动的反馈信息,与输入作差后得到。为完成飞行的位置控制,需要连续获得反馈并发送该命令,以达到平稳的控制效果。
姿态控制精度大约为0.5 度,速度控制精度大约为0.2 m/s。
模式编号 | 组合形式 | 输入数值范围 (VERT/HORI/YAW) |
模式标志字节 |
---|---|---|---|
1 | VERT_VEL HORI_ATTI_TILT_ANG YAW_ANG |
-4 m/s ~ 4 m/s -30 度 ~ 30 度 -180 度 ~ 180 度 |
0b00000xxy |
2 | VERT_VEL HORI_ATTI_TILT_ANG YAW_RATE |
-4 m/s ~ 4 m/s -30 度 ~ 30 度 -100 度/s ~ 100 度/s |
0b00001xxy |
3 | VERT_VEL HORI_VEL YAW_ANG |
-4 m/s ~ 4 m/s -10 m/s ~ 10 m/s -180 度 ~ 180 度 |
0b01000xxy |
4 | VERT_VEL HORI_VEL YAW_RATE |
-4 m/s ~ 4 m/s -10 m/s ~ 10 m/s -100 度/s ~ 100 度/s |
0b01001xxy |
5 | VERT_VEL HORI_POS YAW_ANG |
-4 m/s ~ 4 m/s 米为单位的相对位置,数值无限制 -180 度 ~ 180 度 |
0b10000xxy |
6 | VERT_VEL HORI_POS YAW_RATE |
-4 m/s ~ 4 m/s 米为单位的相对位置,数值无限制 -100 度/s ~ 100 度/s |
0b10001xxy |
7 | VERT_POS HORI_ATTI_TILT_ANG YAW_ANG |
0m 到最大飞行高度 -30 度 ~ 30 度 -180 度 ~ 180 度 |
0b00010xxy |
8 | VERT_POS HORI_ATTI_TILT_ANG YAW_RATE |
0m 到最大飞行高度 -30 度 ~ 30 度 -100 度/s ~ 100 度/s |
0b00011xxy |
9 | VERT_POS HORI_VEL YAW_ANG |
0m 到最大飞行高度 -10 m/s ~ 10 m/s -180 度 ~ 180 度 |
0b01010xxy |
10 | VERT_POS HORI_VEL YAW_RATE |
0m 到最大飞行高度 -10 m/s ~ 10 m/s -100 度/s ~ 100 度/s |
0b01011xxy |
11 | VERT_POS HORI_POS YAW_ANG |
0m 到最大飞行高度 米为单位的相对位置,数值无限制 -180 度 ~ 180 度 |
0b10010xxy |
12 | VERT_POS HORI_POS YAW_RATE |
0m 到最大飞行高度 米为单位的相对位置,数值无限制 -100 度/s ~ 100 度/s |
0b10011xxy |
13 | VERT_THRUST HORI_ATTI_TILT_ANG YAW_ANG |
10 ~ 100 (危险,请小心使用) -30 度 ~ 30 度 -180 度 ~ 180 度 |
0b00100xxy |
14 | VERT_THRUST HORI_ATTI_TILT_ANG YAW_RATE |
10 ~ 100(危险,请小心使用) -30 度 ~ 30 度 -100 度/s ~ 100 度/s |
0b00101xxy |
xx表示水平方向坐标系的控制位,00表示Ground系,01表示Body系
y表示增稳模式的控制位,0表示非增稳模式,1表示增稳模式,增稳模式只作用于水平方向。
状态包 | 状态包字段 | 数据段类型 | 描述 | 单位 | 默认频率 |
---|---|---|---|---|---|
时间戳 | time | uint32_t | 400hz时间戳 | 1/400s | 100Hz |
asr_ts | uint32_t | ns级时间戳 | ns | ||
sync_flag | uint8_t | 同步信号标志位 | --- | ||
姿态四元数 | q0 | float32 | 姿态四元数 从Ground坐标系到Body坐标系 |
--- | 100Hz |
q1 | float32 | ||||
q2 | float32 | ||||
q3 | float32 | ||||
加速度 | agx | float32 | 加速度(原始值/融合值) | 融合值: m/s2 原始值: G |
100Hz |
agy | float32 | ||||
agz | float32 | ||||
速度 | vgx | float32 | Ground系下的速度 | m/s | 100Hz |
vgy | float32 | ||||
vgz | float32 | ||||
vgstatus | uint8_t | 速度信息状态字节
|
--- | ||
角速度 | wx | float32 | 角速度(原始值/融合值) | rad/s | 100Hz |
wy | float32 | ||||
wz | float32 | ||||
GPS及高度 | longti | double | GPS 位置 | rad | 100Hz |
lati | double | ||||
alti | float32 | 气压高度(原始值/融合值) | m | ||
height | float32 | 对地高度(原始值/融合值) | m | ||
health_flag | uint8_t | GPS 健康度 | 0-5, 5 为最好 | ||
GPS详细信息(只适用于A3) | date | uint32_t | 日期 | yy-mm-dd | 50Hz |
time | uint32_t | 时间 | hh-mm-ss | ||
longitude | int32_t | 经度 | degree*10^7 | ||
latitude | int32_t | 纬度 | degree*10^7 | ||
AMSL | int32_t | 海拔高度 | mm | ||
vel_N | float32 | 北方向速度 | cm/s | ||
vel_E | float32 | 东方向速度 | cm/s | ||
vel_D | float32 | 地方向速度 | cm/s | ||
RTK详细信息(只适用于A3) | date | uint32_t | 日期 | yy-mm-dd | 50Hz |
time | uint32_t | 时间 | hh-mm-ss | ||
longitude_RTK | double | RTK测量经度 | degree | ||
latitude_RTK | double | RTK测量纬度 | degree | ||
AMSL_RTK | float32 | RTK测量海拔高度 | m | ||
vel_N | float32 | 北方向速度 | cm/s | ||
vel_E | float32 | 东方向速度 | cm/s | ||
vel_D | float32 | 地方向速度 | cm/s | ||
yaw | int16_t | 天线基线与正南夹角 | degree | ||
position_flag | uint8_t | 定位标志位 | |||
yaw_flag | uint8_t | 偏航标志位 | --- | ||
磁感计 | mx | int16_t | 磁感计数值 | 磁感计数值 | 0Hz |
my | int16_t | ||||
mz | int16_t | ||||
遥控器通道 | roll | int16_t | Roll 数值 | --- | 50Hz |
pitch | int16_t | Pitch 数值 | |||
yaw | int16_t | Yaw 数值 | |||
throttle | int16_t | Throttle 数值 | |||
mode | int16_t | Mode 数值(模式选择开关) | |||
gear | int16_t | Gear 数值(返航键外圈拨杆) | |||
云台姿态 | roll | float32 | 云台在Ground 坐标系下的姿态 | º | 50Hz |
pitch | float32 | ||||
yaw | float32 | ||||
limit_byte | uint8_t | 限位标志
| --- | ||
飞行状态 | status | uint8_t | 飞行状态 | --- | 10Hz |
电量 | status | uint8_t | 剩余电量百分比 | % | 1Hz |
控制信号源 | cur_mov_control_mode | uint8_t | 当前飞机模式值 | --- | 0Hz |
status | uint8_t | 控制设备
|
--- |
飞机模式值
typedef enum
{
ATTI_STOP = 0,
HORIZ_ANG_VERT_VEL_YAW_ANG = 1,
HORIZ_ANG_VERT_VEL_YAW_RATE = 2,
HORIZ_VEL_VERT_VEL_YAW_ANG = 3,
HORIZ_VEL_VERT_VEL_YAW_RATE = 4,
HORIZ_POS_VERT_VEL_YAW_ANG = 5,
HORIZ_POS_VERT_VEL_YAW_RATE = 6,
HORIZ_ANG_VERT_POS_YAW_ANG = 7,
HORIZ_ANG_VERT_POS_YAW_RATE = 8,
HORIZ_VEL_VERT_POS_YAW_ANG = 9,
HORIZ_VEL_VERT_POS_YAW_RATE = 10,
HORIZ_POS_VERT_POS_YAW_ANG = 11,
HORIZ_POS_VERT_POS_YAW_RATE = 12,
HORIZ_ANG_VERT_THR_YAW_ANG = 13,
HORIZ_ANG_VERT_THR_YAW_RATE = 14,
HORIZ_VEL_VERT_THR_YAW_ANG = 15,
HORIZ_VEL_VERT_THR_YAW_RATE = 16,
HORIZ_POS_VERT_THR_YAW_ANG = 17,
HORIZ_POS_VERT_THR_YAW_RATE = 18,
GPS_ATII_CTRL_CL_YAW_RATE = 97,
GPS_ATTI_CTRL_YAW_RATE = 98,
ATTI_CTRL_YAW_RATE = 99,
ATTI_CTRL_STOP = 100
}
原始值/融合值可通过调参软件进行选择。
因为原始数据来自与飞行器上实际的传感器,因此使用DJI模拟器时,选择原始数据输出将无法得到相应的输出数据。请选择使用融合数据。
数据类型 | 原始值/融合值 | 说明 | 单位 |
---|---|---|---|
加速度 | 融合值(大地坐标系) | 融合数据 | m/s2 |
融合值(机体坐标系) | 融合数据 | m/s2 | |
原始值(机体坐标系) | 加速度计数据 | G | |
角速度 | 融合值(机体坐标系) | 融合数据 | rad/s |
原始值(机体坐标系) | 陀螺仪数据 | ||
气压高度 | 融合值 | 气压计、IMU融合数据 | m |
原始值 | 气压计数据 | ||
对地高度* | 融合值 | 气压计、IMU和超声波融合数据 | m |
原始值 | 超声波数据(3米内有效) |
在室内使用飞行器时若没有安装Guidance,或飞行高度超过3米,对地高度将由气压计及IMU 计算得出。由于室内无法准确获取气压值,此数据将不可靠。
飞行状态 | 状态名称 | 说明 |
---|---|---|
1 | standby | 飞行器待机 |
2 | take_off | 飞行器起飞 |
3 | in_air | 飞行器在空中 |
4 | landing | 飞行器降落 |
5 | finish_landing | 飞行器降落完成 |
finish_landing状态2s后会进入standby状态。
飞行器离开地面随即进入in_air状态。
遥控器通道 | 数值范围 | 说明 |
---|---|---|
roll | [-10000,10000] | 左: -10000 右: 10000 |
pitch | [-10000,10000] | 下: -10000 上: 10000 |
yaw | [-10000,10000] | 左: -10000 右: 10000 |
throttle | [-10000,10000] | 下: -10000 上: 10000 |
mode | -8000, 0, 8000 | P: -8000 A: 0 F: 8000 |
gear | -10000, -4545 | 放下起落架: -4545 收起起落架: -10000 |