EGO-Planner仿真实战:从零搭建到避障飞行,手把手解决高频问题
刚接触EGO-Planner时,你是不是也经历过这样的场景:好不容易把代码编译通过,满怀期待地运行roslaunch ego_planner simple_run.launch,结果Gazebo窗口一片漆黑,RViz里无人机模型死活不显示,终端里还不断冒出各种话题映射错误。更让人头疼的是,明明按照教程一步步操作,为什么别人的无人机就能在复杂环境中优雅避障,而你的却像个无头苍蝇一样乱撞?
如果你正在为这些问题头疼,这篇文章就是为你准备的。我花了整整三个月时间,在实验室里反复折腾EGO-Planner的仿真环境,踩遍了几乎所有能踩的坑。从最基本的RViz可视化配置,到Gazebo仿真中的各种诡异问题,再到如何让无人机真正实现稳定避障飞行,我把这些实战经验整理成了这份全指南。
1. 环境搭建:不只是编译那么简单
很多人以为EGO-Planner的环境搭建就是git clone加catkin_make,但实际上,真正的坑往往藏在依赖项和系统配置里。我见过太多人因为一个看似无关的库版本问题,折腾了好几天。
1.1 系统环境检查:别让基础配置拖后腿
首先,确认你的系统环境。EGO-Planner官方推荐Ubuntu 18.04 + ROS Melodic,但我在Ubuntu 20.04 + ROS Noetic上也成功运行过。关键在于一些关键依赖的版本匹配。
# 检查Ubuntu版本
lsb_release -a
# 检查ROS版本
rosversion -d
如果你的系统版本不匹配,别急着重装。先试试下面的依赖安装方案,很多时候问题出在库的兼容性上。
1.2 依赖安装:那些官方文档没说的细节
Armadillo是EGO-Planner的数学库依赖,但安装时有个小细节需要注意:
# 标准安装命令
sudo apt-get install libarmadillo-dev
# 但有时候需要指定版本
sudo apt-get install libarmadillo9 libarmadillo-dev
我遇到过Armadillo版本过高导致编译失败的情况。如果你在编译时看到类似undefined reference to arma::...`的错误,试试降级到8.x版本。
编译时的内存问题是另一个常见坑点。EGO-Planner编译时对内存要求较高,如果你的虚拟机或物理机内存不足,可以临时增加交换空间:
# 创建4GB交换文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效(可选)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
编译完成后,如果不再需要大交换空间,可以关闭并删除:
sudo swapoff /swapfile
sudo rm /swapfile
1.3 代码编译:避开那些编译陷阱
EGO-Planner的编译过程相对标准,但有几个地方容易出错:
# 进入工作空间
cd ~/ego-planner
# 标准编译
catkin_make
# 如果编译失败,尝试清理后重新编译
catkin_make clean
catkin_make -j$(nproc) # 使用所有CPU核心加速编译
我在编译时遇到的最棘手问题是Eigen库版本冲突。EGO-Planner依赖特定版本的Eigen,而系统中可能安装了多个版本。解决方法是指定Eigen路径:
# 在CMakeLists.txt中添加(如果需要)
set(EIGEN3_INCLUDE_DIR /usr/include/eigen3)
2. RViz可视化配置:让一切清晰可见
RViz是调试EGO-Planner的重要工具,但默认配置可能不适合你的环境。我花了大量时间研究如何配置RViz才能清晰显示所有必要信息。
2.1 理解rviz.launch与default.rviz的关系
很多人混淆rviz.launch和default.rviz文件的作用。简单来说:
- rviz.launch:启动RViz节点,设置基本参数
- default.rviz:RViz的界面配置,包括显示哪些话题、使用什么颜色、坐标系设置等
<!-- rviz.launch示例 -->
<launch>
<node pkg="rviz" type="rviz" name="rviz"
args="-d $(find ego_planner)/config/default.rviz"
required="true" />
</launch>
default.rviz文件定义了RViz的整个界面配置。如果你发现RViz启动后某些显示不正常,很可能是这个文件中的话题名称与你的实际发布话题不匹配。
2.2 常见RViz显示问题排查
问题1:无人机模型不显示
这是最常见的问题之一。在RViz中,无人机模型通常通过robot_model插件显示,需要正确的URDF描述文件。
检查步骤:
- 确认
robot_description话题是否有数据:rostopic echo /robot_description - 检查TF树是否完整:
rosrun tf view_frames,然后打开生成的frames.pdf查看 - 在RViz中添加
RobotModel显示,并设置Robot Description为robot_description
问题2:障碍物点云不显示
EGO-Planner需要感知环境障碍物,通常通过点云话题/pcl_render_node/cloud或深度图像话题/pcl_render_node/depth。
# 检查点云话题是否存在
rostopic list | grep cloud
rostopic list | grep depth
# 查看点云数据
rostopic echo /pcl_render_node/cloud --noarr | head -20
如果话题存在但没有数据,可能是仿真器没有正确发布。检查simulator.xml配置中的相关参数。
问题3:规划路径不显示
EGO-Planner生成的路径通常在/planning/vis_trajectory话题中发布。在RViz中添加Path显示,并设置话题为该话题。
注意:RViz中的坐标系设置至关重要。EGO-Planner默认使用
world坐标系,确保所有显示都设置为正确的坐标系。
2.3 自定义RViz配置技巧
我习惯为不同的调试场景创建不同的RViz配置。比如,专门用于检查传感器数据的配置、用于查看规划结果的配置等。
创建自定义配置的方法:
- 启动RViz并调整到满意的布局
- 点击
File->Save Config As保存为.rviz文件 - 在launch文件中指定自定义配置文件:
<arg name="rviz_config" default="$(find ego_planner)/config/my_debug.rviz" />
<node pkg="rviz" type="rviz" name="rviz"
args="-d $(arg rviz_config)" />
3. Gazebo仿真配置:从模型加载到物理引擎调优
Gazebo仿真比RViz可视化复杂得多,涉及模型加载、物理引擎、传感器仿真等多个方面。EGO-Planner的simulator.xml文件是控制仿真的核心。
3.1 simulator.xml关键参数解析
simulator.xml文件包含了Gazebo仿真的所有配置参数。理解这些参数对于调试仿真问题至关重要。
454



被折叠的 条评论
为什么被折叠?



