PX4飞控开发基础:Navigator导航模块
模块介绍
navigator模块是 PX4 自动驾驶仪中的一个module,它处理包括任务、起飞、返航(RTL)以及地理围栏检查等自主飞行模式。它通过不同的类来实现这些功能,这些类从一个共同的基类继承。此外,它负责发布位置参考点,这些位置参考点随后被位置控制器使用。代码还包括了加载地理围栏、处理测试用的假交通数据和响应与导航相关的命令的功能。navigator模块是飞控人机交互的关键部分。
navigator_main函数结构:
-
Constructor & Destructor:初始化与销毁实例,设置导航模式,订阅必要数据。
-
params_update():参数更新。
-
run():主循环,处理导航逻辑,包括地理围栏检查和执行不同的飞行模式。
-
task_spawn()与instantiate():创建和管理导航任务实例。
-
print_status():输出导航状态。
-
publish_position_setpoint_triplet():发布当前位置设定点。
-
获取导航参数的函数:检索当前导航设置。
-
reset_triplets()和reset_position_setpoint():重置导航设定点。
其中,代码有创意地将各种飞行模式设计成指针,然后根据任务模式启动相应的子模块,
(line 91)
/* Create a list of our possible navigation types */
_navigation_mode_array[0] = &_mission;
_navigation_mode_array[1] = &_loiter;
_navigation_mode_array[2] = &_rtl;
_navigation_mode_array[3] = &_engineFailure;
_navigation_mode_array[4] = &_gpsFailure;
_navigation_mode_array[5] = &_takeoff;
_navigation_mode_array[6] = &_land;
_navigation_mode_array[7] = &_precland;
_navigation_mode_array[8] = &_follow_target;
Mission航路点飞行函数结构
对于其中的Mission 子模块,函数结构解释如下:
-
Mission::Mission(Navigator *navigator): 构造函数,初始化任务模块,不接受任何输入并且没有输出。
-
Mission::on_inactive(): 当任务处于非活动状态时调用,负责检查任务更新和重置任务状态,没有输入和输出。
-
Mission::on_inactivation(): 当任务从活动状态转为非活动状态时调用,例如禁用相机触发,没有输入和输出。
-
Mission::on_activation(): 当任务被激活时调用,设置任务项和触发条件,没有输入和输出。
-
Mission::on_active(): 任务处于活动状态时持续调用,负责检查任务完成情况和更新任务进度,没有输入和输出。
-
Mission::set_current_mission_index(uint16_t index): 设置当前任务索引,输入是一个整数索引,输出是设置是否成功的布尔值。
每个函数都是根据飞行状态和任务状态来执行相应的操作,以确保任务按照预定计划安全执行。