4_竞赛无人机基本自动飞行支持函数与导航控制函数解析——零基础学习竞赛无人机搭积木式编程

竞赛无人机基本自动飞行支持函数与导航控制函数解析

  1. 基本自动飞行支持函数

        void basic_auto_flight_support(void)

        根据前面几讲的介绍,要想实现无人机的自动飞行,单依靠姿态自稳、高度控制远远不够,必须在水平位置—速度控制的基础上,才能保证无人机全程可控。因此设计了一个基本自动飞行支持函数,

        第一部分OpticalFlow_Control_Pure()为SLAM定点控制,该函数在最后给定了水平俯仰、横滚方向上的角度期望;第二部分yaw_ctrl_mode=ROTATE,yaw_outer_control_output  =RC_Data.rc_rpyt[RC_YAW]表示偏航控制为手动模式,偏航控制期望来源于遥控器偏航杆位给定;第三部分Flight_Alt_Hold_Control(ALTHOLD_MANUAL_CTRL,NUL,NUL)为高度手动控制。

        以上三部分共同保障了无人机自动飞行的基础,在basic_auto_flight_support运行的基础上,可以通过改变三维的位置期望来实现无人机三维位置控制,因此专门设计了一个导航控制函数用于处理三维期望数据。

  1. 导航控制函数

void Horizontal_Navigation(float x,float y,float z,uint8_t nav_mode,uint8_t frame_id)

前三组参数表示下xyz三个方向的位置期望,单位为cm,xxy实际表征意义与nav_mode、frame_id相关,下面列出二者的可选枚举值:

  • 当nav_mode为RELATIVE_MODE,frame_id为MAP_FRAME时,xy表示在当前位置的基础上,向虚拟正东(西)、虚拟正北(南)移动一定距离,z表示以当前高度为基准向上或者向下移动一定距离。

  • 当nav_mode为RELATIVE_MODE,frame_id为BODY_FRAME时,xy表示在当前位置的基础上,向无人机的右侧(R)、机头(P)移动一定距离,z表示以当前高度为基准向上或者向下移动一定距离。

  • 当nav_mode为GLOBAL_MODE,frame_id为MAP_FRAME时,xy表示以初始O为原点,虚拟正东(西)、虚拟正北(南)方向的全局期望位置,z表示相对地面的高度期望值。

        上述函数用法学习可以参考Subtask_Demo.c提供的flight_subtask_5、flight_subtask_6、flight_subtask_7来练习掌握用法。

       用户需要对无人机进行三维位置控制时,基本自动飞行支持函数与导航控制函数是配合使用的,二者缺一不可。新手在二次开发时往往只对飞行航点任务进行编写,却遗漏掉了自动飞行支持函数

  1. 其它控制函数

void OpticalFlow_Vel_Control(Vector2f target)

void OpticalFlow_X_Vel_Control(float target_x)//机头左侧为X+

void OpticalFlow_Y_Vel_Control(float target_y)//机头前侧为Y+

        上面两个为光流速度控制函数,在仅需要速度控制的情况下,比如定巡航、自主循迹、自动绕杆、靠近塔杆等条件下使用。相关用法参考飞控开发者模式中的相关demo历程。

猜你喜欢

转载自blog.csdn.net/u011992534/article/details/123762468