# 飞行控制
## 端点: `/flight`
- **方法:** `GET`&`SET`
- **描述:** 飞行控制
## 请求
### 起飞请求
```json
{
"action": 0
}
```
---
### 强制降落
```json
{
"action": "1"
}
```
---
### 其余action请求数字代号:
```json
返航:2
取消返航:3
着陆:4
取消着陆:5
确认着陆:6
设置返航点:7 (以飞行器当前位置为返航点)
电机急停:8
开启电机:9
关闭电机:10
飞行拦截:11
取消悬停:12
紧急悬停:13
取消紧急悬停:14
执行遥控器操作:15
```
若需要执行遥控器操作,其指令格式为:
```json
{
"action": 15,
"direction": "q\w\e\a\s\d\z\c"
}
```
# 数据订阅
## 端点:`/subscription`
- **方法:** `GET`
- **描述:** 订阅或退订无人机实时数据
## 请求和响应
### 请求
```json
{
"action": 1,
"topic": 2,
"hertz": 50
}
```
action取值:
1 - subscribe
2 - unsubscribe
topic取值:
0 - QUATERNION,姿态四元数
1 - ACCELERATION_GROUND,相对地面加速度
2 - ACCELERATION_BODY,相对机体加速度
3 - ACCELERATION_RAW,原始加速度
4 - VELOCITY,速度
5 - ANGULAR_RATE_FUSIONED,融合角速度
6 - ANGULAR_RATE_RAW,原始角速度
7 - ALTITUDE_FUSED,融合高度
8 - ALTITUDE_BAROMETER,气压计高度
9 - ALTITUDE_OF_HOMEPOINT,Home点高度
10 - HEIGHT_FUSION, 融合相对地面高度
11 - HEIGHT_RELATIVE, 相对地面高度
12 - POSITION_FUSED, 融合位置坐标
13 - GPS_DATE, GPS 日期(年月日)
14 - GPS_TIME, GPS 时间(时分秒)
15 - GPS_POSITION, GPS 位置
16 - GPS_VELOCITY, GPS 速度
17 - GPS_DETAILS, GPS 信息
18 - GPS_SIGNAL_LEVEL, GPS 信号强度
19 - RTK_POSITION, RTK 位置
20 - RTK_VELOCITY, RTK 速度
21 - RTK_YAW, RTK 航向角
22 - RTK_POSITION_INFO, RTK 位置信息
23 - RTK_YAW_INFO, RTK 航向信息
24 - COMPASS, 指南针信息
25 - RC, 遥控摇杆信息
26 - GIMBAL_ANGLES, 云台角度
27 - GIMBAL_STATUS, 云台状态
28 - STATUS_FLIGHT, 飞行状态
29 - STATUS_DISPLAYMODE, 飞行模式状态
30 - STATUS_LANDINGGEAR, 起落架状态
31 - STATUS_MOTOR_START_ERROR, 电机启动错误码
32 - BATTERY_INFO, 电池信息
33 - CONTROL_DEVICE, 设备控制信息
34 - HARD_SYNC, 硬件时钟同步
35 - GPS_CONTROL_LEVEL, GPS 控制等级
36 - RC_WITH_FLAG_DATA, 带标记遥控遥感信息
37 - ESC_DATA, 电调数据
38 - RTK_CONNECT_STATUS, RTK 连接状态
39 - GIMBAL_CONTROL_MODE, 云台控制模式
40 - FLIGHT_ANOMALY, 飞行异常信息
41 - POSITION_VO, 笛卡尔坐标位置
42 - AVOID_DATA, 避障数据
43 - HOME_POINT_SET_STATUS, 返航点设置状态
44 - HOME_POINT_INFO, 返航点信息
45 - THREE_GIMBAL_DATA, 三云台信息(适用M300 RTK与M350 RTK,上下三个云台的信息)
46 - BATTERY_SINGLE_INFO_INDEX1, 1 号电池信息
47 - BATTERY_SINGLE_INFO_INDEX2, 2 号电池信息
hertz取值:
1 - DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ
5 - DJI_DATA_SUBSCRIPTION_TOPIC_5_HZ
10 - DJI_DATA_SUBSCRIPTION_TOPIC_10_HZ
50 - DJI_DATA_SUBSCRIPTION_TOPIC_50_HZ
100 - DJI_DATA_SUBSCRIPTION_TOPIC_100_HZ
200 - DJI_DATA_SUBSCRIPTION_TOPIC_200_HZ
400 - DJI_DATA_SUBSCRIPTION_TOPIC_400_HZ
其中每个topic针对不同机型允许的最大频率请参考大疆官方文档
---
### 响应
```json
{
"status": 0,
"description": "description for this response"
}
```
---
### 推送的订阅数据
订阅数据为json格式,其中每个字段的含义,请参考大疆官方文档。
QUATERNION:
```json
{
"topic": 0,
"q0": 3.14,
"q1": 3.21,
"q2": 3.21,
"q3": 3.33,
"pitch": 4.44,
"roll": 5.44,
"yaw": 6.33,
"ms": 100000,
"us": 33339999
}
```
ACCELERATION_GROUND:
```json
{
"topic": 1,
"x": 3.14,
"y": 3.21,
"z": 3.33,
"ms": 100000,
"us": 33339999
}
```
ACCELERATION_BODY:
```json
{
"topic": 2,
"x": 3.14,
"y": 3.21,
"z": 3.33,
"ms": 100000,
"us": 33339999
}
```
ACCELERATION_RAW:
```json
{
"topic": 3,
"x": 3.14,
"y": 3.21,
"z": 3.33,
"ms": 100000,
"us": 33339999
}
```
VELOCITY:
```json
{
"topic": 4,
"x": 3.14,
"y": 3.21,
"z": 3.33,
"ms": 100000,
"us": 33339999
}
```
ANGULAR_RATE_FUSIONED:
```json
{
"topic": 5,
"x": 3.14,
"y": 3.21,
"z": 3.33,
"ms": 100000,
"us": 33339999
}
```
ANGULAR_RATE_RAW:
```json
{
"topic": 6,
"x": 3.14,
"y": 3.21,
"z": 3.33,
"ms": 100000,
"us": 33339999
}
```
ALTITUDE_FUSED:
```json
{
"topic": 7,
"val": 3.14,
"ms": 100000,
"us": 33339999
}
```
ALTITUDE_BAROMETER:
```json
{
"topic": 8,
"val": 3.14,
"ms": 100000,
"us": 33339999
}
```
ALTITUDE_OF_HOMEPOINT:
```json
{
"topic": 9,
"val": 3.14,
"ms": 100000,
"us": 33339999
}
```
HEIGHT_FUSION:
```json
{
"topic": 10,
"val": 3.14,
"ms": 100000,
"us": 33339999
}
```
HEIGHT_RELATIVE:
```json
{
"topic": 11,
"val": 3.14,
"ms": 100000,
"us": 33339999
}
```
POSITION_FUSED:
```json
{
"topic": 12,
"longitude": 3.14,
"latitude": 3.14,
"altitude": 3.14,
"visibleSatelliteNumber": 3,
"ms": 100000,
"us": 33339999
}
```
GPS_DATE:
```json
{
"topic": 13,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
GPS_TIME:
```json
{
"topic": 14,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
GPS_POSITION:
```json
{
"topic": 15,
"x": 14,
"y": 21,
"z": 33,
"ms": 100000,
"us": 33339999
}
```
GPS_VELOCITY:
```json
{
"topic": 16,
"x": 3.14,
"y": 3.21,
"z": 3.33,
"ms": 100000,
"us": 33339999
}
```
GPS_DETAILS:
```json
{
"topic": 17,
"hdop": 3.14,
"pdop": 3.21,
"fixState": 3.33,
"vacc": 3.33,
"hacc": 3.33,
"sacc": 3.33,
"gpsSatelliteNumberUsed": 33,
"glonassSatelliteNumberUsed": 33,
"totalSatelliteNumberUsed": 33,
"gpsCounter": 33,
"ms": 100000,
"us": 33339999
}
```
GPS_SIGNAL_LEVEL:
```json
{
"topic": 18,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
RTK_POSITION:
```json
{
"topic": 19,
"longitude": 3.14,
"latitude": 3.21,
"hfsl": 3.33,
"ms": 100000,
"us": 33339999
}
```
RTK_VELOCITY:
```json
{
"topic": 20,
"x": 3.14,
"y": 3.21,
"z": 3.33,
"ms": 100000,
"us": 33339999
}
```
RTK_YAW:
```json
{
"topic": 21,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
RTK_POSITION_INFO:
```json
{
"topic": 22,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
RTK_YAW_INFO:
```json
{
"topic": 23,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
COMPASS:
```json
{
"topic": 24,
"x": 14,
"y": 21,
"z": 33,
"ms": 100000,
"us": 33339999
}
```
RC:
```json
{
"topic": 25,
"roll": 14,
"pitch": 21,
"yaw": 33,
"throttle": 33,
"mode": 33,
"gear": 33,
"ms": 100000,
"us": 33339999
}
```
GIMBAL_ANGLES:
```json
{
"topic": 26,
"x": 14.99,
"y": 21.12,
"z": 33.22,
"ms": 100000,
"us": 33339999
}
```
GIMBAL_STATUS:
```json
{
"topic": 27,
"mountStatus": 14,
"isBusy": 21,
"pitchLimited": 33,
"rollLimited": 33,
"yawLimited": 33,
"calibrating": 33,
"prevCalibrationgResult": 14,
"installedDirection": 21,
"disabled_mvo": 33,
"gear_show_unable": 33,
"gyroFalut": 33,
"escPitchStatus": 33,
"escRollStatus": 14,
"escYawStatus": 21,
"droneDataRecv": 33,
"initUnfinished": 33,
"FWUpdating": 33,
"reserved2": 33,
"ms": 100000,
"us": 33339999
}
```
STATUS_FLIGHT:
```json
{
"topic": 28,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
STATUS_DISPLAYMODE:
```json
{
"topic": 29,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
STATUS_LANDINGGEAR:
```json
{
"topic": 30,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
STATUS_MOTOR_START_ERROR:
```json
{
"topic": 31,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
BATTERY_INFO:
```json
{
"topic": 32,
"capacity": 3000000,
"voltage": 3000000,
"current": 3000000,
"percentage": 3000000,
"ms": 100000,
"us": 33339999
}
```
CONTROL_DEVICE:
```json
{
"topic": 33,
"controlAuthority": 31,
"controlAuthorityChangeReason": 30,
"ms": 100000,
"us": 33339999
}
```
HARD_SYNC:
```json
{
"topic": 34,
"ts": {
"time2p5ms": 3333333,
"time1ns": 2222,
"resetTime2p5ms": 44444,
"index": 22,
"flag": 22
},
"q": {
"q0": 22.22,
"q1": 33.33,
"q2": 33.33,
"q3": 44.44
},
"a": {
"x": 22.22,
"y": 33.33,
"z": 33.44
},
"w": {
"x": 22.22,
"y": 33.33,
"z": 33.44
},
"ms": 100000,
"us": 33339999
}
```
GPS_CONTROL_LEVEL:
```json
{
"topic": 35,
"val": 3,
"ms": 100000,
"us": 33339999
}
```
RC_WITH_FLAG_DATA:
```json
{
"topic": 36,
"roll": 14.21,
"pitch": 21.14,
"yaw": 33.33,
"throttle": 33.44,
"flag": {
"logicConnected": 1,
"skyConnected": 2,
"groundConnected": 2,
"appConnected": 1,
"reserved": 1
},
"ms": 100000,
"us": 33339999
}
```
ESC_DATA:
```json
{
"topic": 37,
"esc": [
{
"current": 18,
"speed": 100,
"voltage": 200,
"temperature": 30,
"stall": 24,
"empty": 2,
"unbalanced": 1,
"escDisconnected": 2,
"temperatureHigh": 1,
"reserved": 0
},
......数组大小为8
{
"current": 18,
"speed": 100,
"voltage": 200,
"temperature": 30,
"stall": 24,
"empty": 2,
"unbalanced": 1,
"escDisconnected": 2,
"temperatureHigh": 1,
"reserved": 0
}
],
"ms": 100000,
"us": 33339999
}
```
RTK_CONNECT_STATUS:
```json
{
"topic": 38,
"val": 3,
"ms": 100000,
"us": 33339999
}
```
GIMBAL_CONTROL_MODE:
```json
{
"topic": 39,
"val": 3,
"ms": 100000,
"us": 33339999
}
```
FLIGHT_ANOMALY:
```json
{
"topic": 40,
"impactInAir": 3,
"randomFly": 3,
"heightCtrlFail": 3,
"rollPitchCtrlFail": 3,
"yawCtrlFail": 3,
"aircraftIsFalling": 3,
"strongWindLevel1": 3,
"strongWindLevel2": 3,
"compassInstallationError": 3,
"imuInstallationError": 3,
"escTemperatureHigh": 3,
"atLeastOneEscDisconnected": 3,
"gpsYawError": 3,
"reserved": 3,
"ms": 100000,
"us": 33339999
}
```
POSITION_VO:
```json
{
"topic": 41,
"x": 3.6,
"y": 5.3,
"z": 3.9,
"xHealth": 1,
"yHealth": 1,
"zHealth": 1,
"reserved": 0,
"ms": 100000,
"us": 33339999
}
```
AVOID_DATA:
```json
{
"topic": 42,
"down": 3.6,
"front": 5.3,
"right": 3.9,
"left": 6.3,
"up": 7.3,
"downHealth": 3,
"frontHealth": 3,
"rightHealth": 3,
"backHealth": 3,
"leftHealth": 3,
"upHealth": 3,
"reserved": 3,
"ms": 100000,
"us": 33339999
}
```
HOME_POINT_SET_STATUS:
```json
{
"topic": 43,
"val": 3000000,
"ms": 100000,
"us": 33339999
}
```
HOME_POINT_INFO:
```json
{
"topic": 44,
"latitude": 30.22,
"longitude": 30.33,
"ms": 100000,
"us": 33339999
}
```
THREE_GIMBAL_DATA:
```json
{
"topic": 45,
"anglesData": [
{
"roll": 18.22,
"pitch": 10.05,
"yaw": 20.07,
},
{
"roll": 18.22,
"pitch": 10.05,
"yaw": 20.07,
},
{
"roll": 18.22,
"pitch": 10.05,
"yaw": 20.07,
}
],
"ms": 100000,
"us": 33339999
}
```
BATTERY_SINGLE_INFO_INDEX1:
```json
{
"topic": 46,
"reserve": 0,
"batteryIndex": 1,
"currentVoltage": 10,
"currentElectric": 20,
"fullCapacity": 100,
"remainedCapacity": 80,
"batteryTemperature": 40,
"cellCount": 10,
"batteryCapacityPercent": 50,
"batteryState": {
"reserved": 1,
"cellBreak": 2,
"selfCheckError": 12,
"reserved1": 1,
"batteryClosedReason": 0,
"reserved2": 1,
"batSOHState": 12,
"maxCycleLimit": 20,
"reserved3": 1,
"lessBattery": 12,
"batteryCommunicationAbnormal": 1,
"reserved4": 1,
"hasCellBreak": 1,
"reserved5": 2,
"isBatteryEmbed": 1,
"heatState": 2,
"socState": 1
},
"reserve1": 1,
"reserve2": 0,
"SOP": 1,
"ms": 100000,
"us": 33339999
}
```
BATTERY_SINGLE_INFO_INDEX2:
```json
{
"topic": 47,
"reserve": 0,
"batteryIndex": 2,
"currentVoltage": 10,
"currentElectric": 20,
"fullCapacity": 100,
"remainedCapacity": 80,
"batteryTemperature": 40,
"cellCount": 10,
"batteryCapacityPercent": 50,
"batteryState": {
"reserved": 1,
"cellBreak": 2,
"selfCheckError": 12,
"reserved1": 1,
"batteryClosedReason": 0,
"reserved2": 1,
"batSOHState": 12,
"maxCycleLimit": 20,
"reserved3": 1,
"lessBattery": 12,
"batteryCommunicationAbnormal": 1,
"reserved4": 1,
"hasCellBreak": 1,
"reserved5": 2,
"isBatteryEmbed": 1,
"heatState": 2,
"socState": 1
},
"reserve1": 1,
"reserve2": 0,
"SOP": 1,
"ms": 100000,
"us": 33339999
}
```
# 相机视频流
## 端点:`/video`
- **方法:** `GET`
- **描述:** 检索示例数据
## 请求和响应
### 打开相机请求
参数1:Camera 具体相机
7:FpvCamera
1:MainCamera
2:ViceCamera
3:TopCamera
参数2:action 相机开关
1:打开
0:关闭
```json
{
"camera": 7,
"action": 1
}
```
### 打开相机请求的响应
参数1:status 打开相机的响应码
0:打开成功
其他:错误信息
参数2:description 描述
0:打开成功
其他:打开失败
```json
{
"status": 0,
"description": "Start FpvCamera Stream successfully"
}
```
---
### 关闭相机请求
参数1:Camera 具体相机
7:FpvCamera
1:MainCamera
2:ViceCamera
3:TopCamera
参数2:action 相机开关
1:打开
0:关闭
```json
{
"camera": 7,
"action": 0
}
```
### 关闭相机请求的响应
参数1:status 打开相机的响应码
0:关闭成功
其他值:错误信息
参数2:description 描述
0:关闭成功
其他:关闭失败
```json
{
"status": 0,
"description": "Stop FpvCamera Stream successfully"
}
```
### 视频流
参数1:name 相机号
7:FpvCamera
1:MainCamera
2:ViceCamera
3:TopCamera
参数2:streamData 视频流数据(未解码的h264视频流)
```json
{
"name": 0,
"streamData": ""
}
```
# 运动规划
## 端点:`/waypoint_v2`
- **方法:** `GET`&`SET`
- **描述:** 检索示例数据
## 请求和响应
### 上传航点任务
```json
{
"WaypointV2Move": 0,
"uploadMission": {
"missionId": 1,
"repeatTimes": 1,
"finishedAction": 0,
"maxFlightSpeed": 10.0,
"autoFlightSpeed": 5.0,
"actionWhenRcLost": 1,
"gotoFirstWaypointMode": 0,
"waypoints": [
{
"longitude": 0.00000,
"latitude": 0.00000,
"relativeHeight": 10.0,
"waypointType": 0,
"headingMode": 0,
"useLocalCruiseVel": 1,
"useLocalMaxVel": 0,
"dampingDistance": 20,
"heading": 0.0,
"turnMode": 0,
"pointOfInterestPositionX": 0.0,
"pointOfInterestPositionY": 0.0,
"pointOfInterestPositionZ": 0.0,
"maxFlightSpeed": 10.0,
"autoFlightSpeed": 5.0
},
{
"longitude": 0.0000010,
"latitude": 0.0000020,
"relativeHeight": 15.0,
"waypointType": 0,
"headingMode": 0,
"useLocalCruiseVel": 0,
"useLocalMaxVel": 1,
"dampingDistance": 20,
"heading": 0.0,
"turnMode": 0,
"pointOfInterestPositionX": 0.0,
"pointOfInterestPositionY": 0.0,
"pointOfInterestPositionZ": 0.0,
"maxFlightSpeed": 10.0,
"autoFlightSpeed": 5.0
},
{
"longitude": 0.0000025,
"latitude": 0.0000022,
"relativeHeight": 20.0,
"waypointType": 0,
"headingMode": 0,
"useLocalCruiseVel": 1,
"useLocalMaxVel": 0,
"dampingDistance": 20,
"heading": 0.0,
"turnMode": 0,
"pointOfInterestPositionX": 0.0,
"pointOfInterestPositionY": 0.0,
"pointOfInterestPositionZ": 0.0,
"maxFlightSpeed": 10.0,
"autoFlightSpeed": 5.0
}
],
"missTotalLen": 3,
"actionList": [
{
"actionId": 1,
"actionTrigger": {
"triggerType": 2,
"sampleReachPointTriggerParam": {
"wayPointIndex": 0,
"teminateNum": 1
}
},
"actionActuator": {
"actuatorType": 0,
"actuatorIndex": 0,
"cameraActuatorParam": {
"operationType": 1,
"cameraFocusParam": {
"focusTargetX": 0.0,
"focusTargetY": 0.0,
"regionType": 0,
"width": 0.5,
"height": 0.5,
"reserve": 0,
"retryTimes": 1
}
}
}
},
{
"actionId": 2,
"actionTrigger": {
"triggerType": 2,
"sampleReachPointTriggerParam": {
"wayPointIndex": 1,
"teminateNum": 1
}
},
"actionActuator": {
"actuatorType": 1,
"actuatorIndex": 0,
"gimbalActuatorParam": {
"operationType": 1,
"gimbalRotation": {
"rotX": 0,
"rotY": -45,
"rotZ": 0,
"ctrl_mode": 0,
"rollCmdIgnore": 0,
"yawCmdIgnore": 0,
"pitchCmdIgnore": 0,
"absYawModeRef": 0,
"reserved": 0,
"durationTime": 2
}
}
}
}
],
"actionNum": 2
},
"gloabalCruiseSpeed": 5.0
}
```
### 开始任务
```json
{
"WaypointV2Move": "1"
}
```
### 停止任务
```json
{
"WaypointV2Move": "2"
}
```
### 暂停任务
```json
{
"WaypointV2Move": "3"
}
```
### 继续任务
```json
{
"WaypointV2Move": "4"
}
```
### 设置全局巡航速度
```json
{
"datWaypointV2Move": 5,
"gloabalCruiseSpeed": XXX
}
```
### 获取全局巡航速度
```json
{
"WaypointV2Move": 6
}
```