Ego-Planner 规划算法
2024-10-20
算法使用
选择合适的场景
由于相机前置安装,因此无人机仅能检测到前方的障碍物。因此避免设置让无人机大转向后立即避障的场景。
当障碍物密集时,尤其是钻洞场景,在接近障碍物时需要更多的点以引导无人机尽可能接近,否则无人机可能会在察觉到可用路径前提前绕行,导致最终没有按预想路径飞行。
设定航点
程序将读取配置文件中设置的目标点,并依次执行抵达他们的飞行任务。
# 打开配置文件,翻到大约第 20 行 src/autonomous_drone_sdk/global_interface/config/ego_planner_swarm_v1/param.xml
预设最大可执行目标点数默认为6个。这里
point_num
数量为实际执行的目标点个数。 比如这里point_num
设置为2
个 (<6
),那就只执行前2个点,后面的目标点都不执行。<!-- 预设目标点数 --> <arg name="point_num" value="2" />
这里给出具体每个目标点的坐标:
<!-- 目标点为相对里程计初始化点的x、y、z坐标,单位 m --> <arg name="point0_x" value="1.0" /> <arg name="point0_y" value="0.0" /> <arg name="point0_z" value="1.0" /> <arg name="point1_x" value="2.0" /> <arg name="point1_y" value="0.0" /> <arg name="point1_z" value="1.0" /> ...... <!-- 建议最后一个点设置为 0 0 1 ,以方便降落 -->
默认的 6个目标点不够用,想要设置更多?
在配置文件
param.xml
中添加新目标点(包含XYZ三个值)<arg name="point4_x"/> <arg name="point4_y"/> <arg name="point4_z"/> <arg name="point5_x"/> <arg name="point5_y"/> <arg name="point5_z"/> <!-- 在大约第 45 行左右添加 --> <arg name="point6_x"/> <!-- 新增加点的 X 值 --> <arg name="point6_y"/> <!-- 新增加点的 Y 值 --> <arg name="point6_z"/> <!-- 新增加点的 Z 值 --> ...... <param name="fsm/waypoint4_x" value="$(arg point4_x)" type="double"/> <param name="fsm/waypoint4_y" value="$(arg point4_y)" type="double"/> <param name="fsm/waypoint4_z" value="$(arg point4_z)" type="double"/> <param name="fsm/waypoint5_x" value="$(arg point5_x)" type="double"/> <param name="fsm/waypoint5_y" value="$(arg point5_y)" type="double"/> <param name="fsm/waypoint5_z" value="$(arg point5_z)" type="double"/> <!-- 在大约第 107 行左右添加 --> <param name="fsm/waypoint6_x" value="$(arg point6_x)" type="double"/> <!-- 新增加点的 X --> <param name="fsm/waypoint6_y" value="$(arg point6_y)" type="double"/> <!-- 新增加点的 Y --> <param name="fsm/waypoint6_z" value="$(arg point6_z)" type="double"/> <!-- 新增加点的 Z -->
运行算法
手持无人机,先启动视觉里程计,再启动 Ego-Planner,即可看到实时规划轨迹结果。
# 打开第一个终端,初始化无人机 cd X152b bash scripts/one_shot_single.sh # 打开第二个终端,启动里程计(这里使用Vins-Fusion为例) cd X152b bash src/vins_fusion/run.sh # 打开第三个终端,启动 Ego-Planner 规划算法 cd X152b bash src/ego_planner_swarm_v1/run.sh
评估和可视化
[可选] 使用 Foxglove 远程可视化
算法运行过程中,打开 Foxglove,可对程序运行状况进行可视化,如下图所示:
这里提供了布局配置文件,在Foxglove中导入该布局,实现上图
实际飞行时,速度不满意?
设置规划轨迹时允许的最大运行速度和最大加速度
<arg name="max_vel" default="1" />
<arg name="max_acc" default="1" />
由于D430相机是卷帘相机,且视觉里程计更新频率不是特别高,因此设置过高的运行速度会导致规划失败
常见问题
Q: 无人机在穿越障碍时会撞到障碍物。
可以通过录制rosbag包离线运行算法或手持无人机到撞机点附近,复现异常场景。可能的原因包含:
1、无人机飞行太快,Ego-Planner 规划结果还未能完全得到执行或里程计延迟太高
2、在撞机点附近的深度图,导致生成的点云占据栅格地图出现非理想情况(生成错误或生成缺失)
通常的做法是先检查相机在撞机点附近的深度图可靠(没有大片空洞或者异常点云)
再考虑调整场地环境(环境灯光、障碍物摆放空间关系)、深度相机参数、点云占据栅格生成参数等来保证该处的规划可行。