dji飞行控制
-
初始化
获取 OSAL(操作系统抽象层)处理程序s_osalHandler = DjiPlatform_GetOsalHandler(); //控制任务的睡眠等操作。
初始化飞控模块
ridInfo 仅用于 Remote ID 远程上报,不会影响实际 GPS 传感器数据。// 设置飞控 RID 信息(经纬度和高度) ridInfo.latitude = 22.542812; ridInfo.longitude = 113.958902; ridInfo.altitude = 10; returnCode = DjiFlightController_Init(ridInfo); // 初始化飞控模块
初始化飞控数据订阅模块
returnCode = DjiFcSubscription_Init();
订阅飞控数据主题
// 订阅飞行状态 returnCode = DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_STATUS_FLIGHT, DJI_DATA_SUBSCRIPTION_TOPIC_10_HZ, NULL); DJI_FC_SUBSCRIPTION_TOPIC_STATUS_DISPLAYMODE, // 订阅显示模式 DJI_FC_SUBSCRIPTION_TOPIC_HEIGHT_FUSION, // 订阅高度融合数据 DJI_FC_SUBSCRIPTION_TOPIC_QUATERNION, // 订阅四元数(姿态数据) DJI_FC_SUBSCRIPTION_TOPIC_POSITION_FUSED, // 订阅融合位置信息 DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_FUSED, // 订阅(融合后的绝对高度) DJI_FC_SUBSCRIPTION_TOPIC_ALTITUDE_OF_HOMEPOINT, // 订阅 Home Point 高度
-
飞行指令
获取遥控权限returnCode = DjiFlightController_ObtainJoystickCtrlAuthority(); // 获取遥控权限
无人机起飞
DjiTest_FlightControlMonitoredTakeoff()
Step 1:起飞
DjiFlightController_StartTakeoff();
Step 2:检查电机是否启动
DjiTest_FlightControlMotorStartedCheck()
Step 3:检查飞机是否真正升空
DjiTest_FlightControlTakeOffInAirCheck()
Step 4:检查起飞是否完成
takeoffFinishedCheck()
位置控制
从当前点向北:0(米)、向东:6(米)、向上:6(米)
偏航为:30(度),就是偏航角位置控制而不是加30度DjiTest_FlightControlMoveByPositionOffset((T_DjiTestFlightControlVector3f) {0, 6, 6}, 30, 0.8, 1)
控制模式
设置无人机的控制模式:
水平位置控制(非速度控制)
高度控制
偏航角控制
使用地面坐标系
启用稳定控制模式T_DjiFlightControllerJoystickMode joystickMode = { DJI_FLIGHT_CONTROLLER_HORIZONTAL_POSITION_CONTROL_MODE, DJI_FLIGHT_CONTROLLER_VERTICAL_POSITION_CONTROL_MODE, DJI_FLIGHT_CONTROLLER_YAW_ANGLE_CONTROL_MODE, DJI_FLIGHT_CONTROLLER_HORIZONTAL_GROUND_COORDINATE, DJI_FLIGHT_CONTROLLER_STABLE_CONTROL_MODE_ENABLE, }; DjiFlightController_SetJoystickMode(joystickMode);
发送摇杆控制指令
DjiFlightController_ExecuteJoystickAction(joystickCommand);
让无人机自动降落。
DjiTest_FlightControlMonitoredLanding()
Step 1: 发送降落指令
DjiFlightController_StartLanding()
Step 2: 确认降落指令已生效
DjiTest_FlightControlCheckActionStarted(DJI_FC_SUBSCRIPTION_DISPLAY_MODE_AUTO_LANDING)
Step 3: 监控降落是否完成
DjiTest_FlightControlLandFinishedCheck()
释放遥控权限
returnCode = DjiFlightController_ReleaseJoystickCtrlAuthority();
-
去初始化阶段
DjiTest_FlightControlDeInit(); // 用于关闭与飞控系统的连接、释放资源等。