八、MSP432飞控SDK模式开发教程
本节将详细介绍飞控常用的API函数应用与利用SDK视觉数据实现自主飞行控制。下面分别以自定义轨迹飞行、追踪物块、APrilTag定位、自主循迹为例,了解飞控相关的API函数在不同任务中的使用,提供用户二次开发的SDK控制函数Auto_Flight_Ctrl()函数,后续二次开发任务可以均写在此函数中。

① 自定义轨迹飞行NCQ_SDK_Run():
默认例程是分三个SDK子任务,分别是向上飞行100cm高度,然后前进50cm,最后下降150cm,如果是以地面初始起飞条件,飞机再执行第三个任务时会降落到地面,地面检测函数检测到满足地面状态时,飞机会自动上锁。

l NCQ_SDK_DUTY1\NCQ_SDK_DUTY3中
uint8_t move_with_z_target(float z_target,float z_vel,float delta,SDK_Status *Status,uint16_t number)

其中函数入口参数:z_target表示目标位移,z_vel表示期望速度,delta表示运行总时间(和z_vel结合使用,即以某一速度爬升/下降多长时间),*Status表示SDK任务结构体,number表示SDK子任务序号。move_with_z_target任务执行完毕后会返回完成标志1,用户可以依据此标志位来判断是否完成子任务,过渡到下一子任务。
NCQ_SDK_DUTY2中
uint8_t move_with_xy_target(float pos_x_target,float pos_y_target,SDK_Status *Status,uint16_t number)

其中函数入口参数:pos_x_target表示X方向目标位移,pos_y_target表示Y方向目标位移,*Status表示SDK任务结构体,number表示SDK子任务序号。move_with_xy_target任务执行完毕后会返回完成标志1,用户可以依据此标志位来判断是否完成子任务,过渡到下一子任务。需要注意的是在本SDK任务子任务执行中间安排了过渡过程,原地悬停1S中再执行下一任务。
其它API接口
uint8_t move_with_speed_target(float x_target,float y_target,float delta,SDK_Status *Status,uint16_t number)
其中函数入口参数:x_target表示X方向期望速度,y_target表示Y方向期望速度,delta表示运行总时间(和期望速度结合使用,即以某一速度飞行多长时间),*Status表示SDK任务结构体,number表示SDK子任务序号。move_with_speed_target任务执行完毕后会返回完成标志1,用户可以依据此标志位来判断是否完成子任务,过渡到下一子任务。
OPENMV视觉水平追踪Color_Block_Control_Pliot():
俯视OPENMV视觉水平追踪Top_APrilTag_Control_Pliot()——同理
俯视OPENMV视觉水平追踪任务中,根据OPENMV识别到的水平目标位置,运行PID_Control_SDK_Err_LPF函数得到水平速度期望,然后运行光流速度控制函数,最后得到姿态角期望。当目标丢失时会自动退出追踪控制,保持原地悬停。


默认例程是分三个SDK子任务,分别是向上飞行100cm高度,然后前进50cm,最后下降150cm,如果是以地面初始起飞条件,飞机再执行第三个任务时会降落到地面,地面检测函数检测到满足地面状态时,飞机会自动上锁。
俯视OPENMV循迹控制Self_Track_Control_Pliot():
俯视OPENMV循迹控制任务中,根据OPENMV识别到的底部黑线轨迹,运行PID_Control_SDK_Err_LPF函数得到水平X方向速度期望,然后运行X方向光流速度控制函数,最后得到横滚方向姿态角期望。偏航方向根据识别到轨迹的角度,运用单比例P控制得到期望偏航的角速度,Y方向根据当前轨迹的斜率(角度)大小,决策合适的Y方向期望速度。
同理当目标丢失时会自动退出追踪控制,保持原地悬停。




前视OPENMV视觉追踪控制Front_AprilTag_Control_Pliot():
前视OPENMV视觉追踪控制任务中,运行PID_Control_SDK_Err_LPF函数得到水平X方向速度期望,然后运行X方向光流速度控制函数,最后得到横滚方向姿态角期望。Y方向根据AprilTag到飞机的距离,运行PID_Control_SDK_Err_LPF函数得到水平Y方向速度期望,然后运行Y方向光流速度控制函数。同理当目标丢失时会自动退出追踪控制,保持原地悬停。



预留用户控制与降落任务控制:
Auto_Flight_Ctrl()函数中预留了用户控制函数与降落控制函数,用二次开发任务时编写具体项目任务函数,执行完毕后用降落函数落地至地面怠速后自动上锁。同时针对某些赛题结束时需要对准降落目标,存在末端摄像头丢失视野目标时,可以调用降落模式,用光流辅助自动下降,短时内基本不会偏移。
