外观
Ego-Planner 规划算法
2024-10-20
算法使用
选择合适的场景
由于相机前置安装,因此无人机不能检测到机尾方向的障碍物。因此避免设置让无人机大转向后立即避障的场景。 建议在空中悬停时再运行,因为位于地面的无人机会认为自身在膨胀后的障碍物内。
设定航点
程序将读取配置文件中设置的目标点,并依次执行抵达他们的飞行任务。
# 打开配置文件,翻到大约第 20 行 src/global_interface/config/ego_plan/point_param.xml预设最大可执行目标点数默认为6个。这里
point_num数量为实际执行的目标点个数。 比如这里point_num设置为2个 (<6),那就只执行前2个点,后面的目标点都不执行。<!-- 预设目标点数 --> fsm/waypoint_num: 2这里给出具体每个目标点的坐标:
<!-- 目标点为相对里程计初始化点的x、y、z坐标,单位 m --> <!-- 预设目标点,按顺序执行飞行 --> fsm/waypoint0_x: 1.0 fsm/waypoint0_y: 0.0 fsm/waypoint0_z: 0.5 fsm/waypoint1_x: 2.0 fsm/waypoint1_y: 0.0 fsm/waypoint1_z: 1.0 ...... <!-- 建议最后一个点设置为 0 0 1 ,以方便降落 -->默认的 6个目标点不够用,想要设置更多?
在配置文件
point_param.xml的末尾继续添加:fsm/waypoint4_x: 1.0 fsm/waypoint4_y: 0.0 fsm/waypoint4_z: 0.5 fsm/waypoint5_x: 2.0 fsm/waypoint5_y: 0.0 fsm/waypoint5_z: 1.0 <!-- 末尾继续添加新目标点(需包含XYZ三个值,并且需要注意命名) --> fsm/waypoint6_x: 0.0 <!-- 新增加点的 X 值 --> fsm/waypoint6_y: 0.0 <!-- 新增加点的 Y 值 --> fsm/waypoint6_z: 1.0 <!-- 新增加点的 Z 值 --> ......运行算法
手持无人机,先启动视觉里程计,再启动 Ego-Planner,即可看到实时规划轨迹结果。
# 打开第一个终端,初始化无人机并运行 Fast-LIO2里程计算法 cd X152b bash scripts/inti_uav.sh # 打开第二个终端,启动 Vins-Fusion 视觉里程计 cd X152b bash scripts/run_vinsfusion.sh # 打开第三个终端,启动 Ego-Planner 规划算法 cd X152b bash src/run_egoplanner.sh评估和可视化
[可选] 使用 Foxglove 远程可视化
算法运行过程中,打开 Foxglove,可对程序运行状况进行可视化,如下图所示:

这里提供了布局配置文件,在Foxglove中导入该布局,实现上图
常见问题
Q: 无人机在穿越障碍时会撞到障碍物。
可以通过录制rosbag包离线运行算法或手持无人机到撞机点附近,复现异常场景。可能的原因包含:
1、无人机飞行太快,Ego-Planner 规划结果还未能完全得到执行或里程计延迟太高
2、在撞机点附近的深度图,导致生成的点云占据栅格地图出现非理想情况(生成错误或生成缺失)
通常的做法是先检查相机在撞机点附近的深度图可靠(没有大片空洞或者异常点云)
再考虑调整场地环境(环境灯光、障碍物摆放空间关系)、深度相机参数、点云占据栅格生成参数等来保证该处的规划可行。
Q: 执行脚本后无法进行 ego-planner 规划,飞机保持悬停状态
若终端提示 WAIT LOCAL_MAP,则说明 ego-planner没有收到点云数据,需要检查 local_map 话题内容是否有效。 若终端提示大量爆红错误,请根据提示信息解决问题(例如规划终点位于障碍物内或不可达、 当前位于障碍物内无法出去)