外观
Ego-Planner 规划算法
2025-07-23
算法使用
选择合适的场景
由于雷达朝前斜置安装,因此无人机不能检测到机尾方向的障碍物。因此避免设置让无人机大转向后立即避障的场景。 建议在空中悬停时再运行,因为位于地面的无人机会认为自身在膨胀后的障碍物内。
设定航点
程序将读取配置文件中设置的目标点,并依次执行抵达他们的飞行任务。
# 打开配置文件,翻到大约第 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 # 打开第二个终端,启动 Ego-Planner 规划算法 cd X152b bash src/run_egoplanner.sh
评估和可视化
[可选] 使用 Foxglove 远程可视化
算法运行过程中,打开 Foxglove,可对程序运行状况进行可视化,如下图所示:
这里提供了布局配置文件,在Foxglove中导入该布局,实现上图
实际飞行时,速度不满意?
设置规划轨迹时允许的最大运行速度和最大加速度
<arg name="max_vel" default="1" />
<arg name="max_acc" default="1" />
请注意安全,设置过高的运行速度可能会导致规划失败
常见问题
Q: 无人机在穿越障碍时会撞到障碍物。
可以通过录制rosbag包离线运行算法或手持无人机到撞机点附近,复现异常场景。可能的原因包含:
1、无人机飞行太快,Ego-Planner 规划结果还未能完全得到执行或里程计延迟太高
2、在撞机点附近的点云地图,导致生成的点云占据栅格地图出现非理想情况(生成膨胀系数过于大,点云错误或生成缺失)
通常的做法是先检查激光雷达在撞机点附近的点云占据栅格地图可靠(没有大片空洞或者异常点云)
再考虑调整场地环境(环境灯光、障碍物摆放空间关系)、点云占据栅格生成参数等来保证该处的规划可行。
Q: 执行脚本后无法进行 ego-planner 规划,飞机保持悬停状态
若终端提示 WAIT LOCAL_MAP
,则说明 ego-planner没有收到点云数据,需要检查 local_map
话题内容是否有效。 若终端提示大量爆红错误,请根据提示信息解决问题(例如规划终点位于障碍物内或不可达、 当前位于障碍物内无法出去)