navigator模块主要用于导航控制。即根据设定的飞行任务/轨迹,在每个时刻给出需要实现的目标位置/速度,交由下一级的pos_control来实现。navigator在对应的模块目录下的navigator.cpp中实现,主要函数为Navigator::run(),如下
在这里插入图片描述
其中首先进行一系列的初始化,然后进入while工作循环,工作循环按照一定的频率运行,执行导航功能。在每一个工作循环根据命令设定导航模式,并运行导航模式对应的功能,流程如下
在这里插入图片描述
1 更新状态和参数(update status & params)
2 处理命令(command handle),命令来自于mavlink,主要有
CMD_DO_REPOSITION(重定位),主要用于指点飞行
CMD_NAV_TAKEOFF(自动起飞)
CMD_LAND_START(自动降落)
CMD_MISSION_START(任务飞行)


3 检查交通情况(check traffic)
4 检查地理栅栏(check geofence)
在这里插入图片描述
5 设定任务和导航模式(set mission & navigation mode),可以分为不同导航模式的处理方式


  • AUTO_MISSION(自动任务),AUTO_RTL(返航)
    这两种模式的设定处理方式都是设定_navigation_mode为_mission,并设定_mission的相关参数

  • AUTO_LOITER(徘徊模式),AUTO_RCRECOVER(遥控信号恢复),AUTO_TAKEOFF(自动起飞),AUTO_LAND(自动降落),DESCEND(下降),AUTO_PRECLAND(精准降落),AUTO_RTGS(失联返航),AUTO_LANDENGFAIL(电机失效降落),AUTO_LANDGPSFAIL(GPS失效降落),AUTO_FOLLOW_TARGET(目标跟踪)
    上述模式的处理方法为设置_navigation_mode为特定的任务,如_loiter,_rcLoss,_takeoff,_land,_dataLinkLoss,_follow_target等,这些任务为预设的任务,在程序初始化的时候已经设置完成,把_navigation_mode设定为这些特定任务,navigator的运行即按照既定的任务设置进行运行

  • MANUAL(手动飞行),ACRO(杂技飞行),ALTCTL(高度控制模式),POSCTL(位置控制),TERMINATION(自毁模式),OFFBOARD(离线控制),STAB(稳态)
    上述模式的飞行模式不需要navigator模块的参与,所以在上述模式下,_navigation_mode设置为null。
    在这里插入图片描述
    6 运行导航模式(run navigation mode),即运行前面设定的导航模式
    7 着陆判断(land detect check)
    8 输出位置设定值(publish position setpoint)
    9 输出任务结果(publish mission result)