无人机三维运动规划实战:从零部署ego-planner到XTDrone仿真

张开发
2026/4/18 23:06:08 15 分钟阅读

分享文章

无人机三维运动规划实战:从零部署ego-planner到XTDrone仿真
1. 环境准备与依赖安装第一次接触无人机三维运动规划的朋友可能会被各种依赖库搞得头大我刚开始部署ego-planner时也踩了不少坑。这里分享下最稳妥的环境搭建方法帮你避开90%的常见问题。首先确保你的Ubuntu系统版本在18.04或20.04其他版本可能会有兼容性问题。我实测20.04最稳定建议直接用这个版本。安装ROS时记得选择对应版本Melodic对应18.04Noetic对应20.04。装完ROS后先别急着下一步这个基础命令能帮你检查环境是否完整rosdep check --from-paths src --ignore-src -r -y接下来是最容易出问题的Eigen3安装。原始文章提到了版本冲突问题这里我要特别强调千万不要直接用apt安装默认版本我试过至少5种安装方式最终发现手动编译3.3.7版本最可靠。具体操作时有个细节容易被忽略安装后必须执行这两步拷贝操作否则后续编译会提示找不到Eigen库sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include sudo cp -r /usr/local/include/eigen3 /usr/include/eigen3关于ceres-solver的安装建议用源码编译1.14.0版本。这个版本和Eigen3.3.7配合最好能避免大多数矩阵运算错误。编译时记得加上这些参数cmake .. -DEXPORT_BUILD_DIRON -DBUILD_EXAMPLESOFF -DBUILD_TESTINGOFF2. XTDrone仿真环境配置配置仿真环境时最容易出错的是传感器模型的选择。原始文章提到了要修改launch文件中的sdf模型这里有个重要细节iris_stereo_camera和iris_realsense_camera的区别。前者只有双目视觉后者还包含深度信息如果你要做三维避障必须用后者。我整理了一个完整的配置检查清单检查PX4固件版本是否为v1.11.3其他版本可能有接口变动确认~/.bashrc中正确设置了PX4和ROS的环境变量测试gazebo是否能正常启动建议先单独运行gazebo看是否有模型加载错误启动仿真时建议分步验证不要一次性运行所有节点。我通常按这个顺序先单独启动PX4和gazebo再启动VINS-Fusion节点最后启动通信和控制节点这样分段调试能快速定位问题所在。如果遇到图像话题无法接收的问题试试这个诊断命令rostopic hz /iris_0/stereo/image_raw3. ego-planner编译与部署把ego-planner代码拷贝到工作空间后别急着catkin_make。我建议先处理这几个关键点修改CMakeLists.txt中的Eigen3依赖路径检查yaml-cpp的版本必须≥0.6.0为避免内存溢出最好修改编译参数catkin_make -j2 # 限制并行编译线程数编译通过后部署时最容易忽略的是坐标系转换。原始文章提到了ego_transfer.py脚本这里有个实用技巧先用rostopic echo检查输入输出的坐标系是否一致。我经常用这个命令来验证rostopic echo /iris_0/ego_planner_node/odom如果发现路径规划结果异常大概率是坐标系定义有问题。ego-planner默认使用ENU坐标系而有些传感器输出的是NED坐标系这个细节一定要注意。4. 全系统集成与调试到了把所有模块串联起来的阶段我强烈建议使用文章末尾提到的plan.sh脚本。不过直接使用可能会遇到终端顺序问题我优化后的版本增加了错误检测#!/bin/bash function check_node() { rostopic list | grep -q $1 return $? } gnome-terminal -- bash -c cd ~/PX4_Firmware; roslaunch px4 indoor1.launch; exec bash while ! check_node /iris_0/mavros/state; do sleep 1; done gnome-terminal -- bash -c cd ~/catkin_ws; bash scripts/xtdrone_run_vio.sh; exec bash while ! check_node /iris_0/vins_estimator/odometry; do sleep 1; done调试过程中最有用的是rviz的配置。除了文章提到的ego_rviz.rviz我建议添加这几个显示项添加Path显示规划轨迹添加PointCloud2显示障碍物点云添加TF查看坐标系关系如果发现规划路径不光滑可以调整这些参数修改ego_planner_config.yaml中的max_vel_x建议从1.0开始逐步增加调整bspline_degree一般3-5比较合适增加obstacle_inflation安全距离建议设为无人机半径的1.5倍5. 常见问题解决方案在实际部署中我遇到过几个棘手问题这里分享下解决方法问题1规划路径出现剧烈抖动原因通常是传感器噪声过大或时间同步问题 解决检查VINS-Fusion的imu话题时间戳在ego_planner_node.cpp中调整odom_callback的缓存大小尝试在launch文件中添加问题2无人机到达目标点后不停晃动原因控制器参数不匹配 解决调整hover.py中的PID参数修改cmd_vel_flu的发布频率建议≥30Hz检查电机混控配置是否正确问题3避障时反应迟钝原因点云处理耗时过长 解决在rtabmap配置中降低点云分辨率使用octomap代替点云直接输入调整ego-planner的replan频率6. 进阶优化技巧当基础功能都调通后可以尝试这些优化方法提升性能多传感器融合在VINS-Fusion配置中添加GPS话题即使仿真中也建议模拟use_gps: true gps_topic: /iris_0/mavros/global_position/global动态障碍物处理修改ego-planner的障碍物预测模块prediction_time_horizon 3.0; // 从默认1.5秒增加到3秒能耗优化在路径代价函数中添加能量消耗项rosrun dynamic_reconfigure dynparam set /ego_planner_node cost_power 0.5可视化增强在rviz中添加航点标记waypoint_marker Marker() waypoint_marker.type Marker.SPHERE_LIST waypoint_marker.scale.x 0.2 waypoint_marker.color.a 1.0; waypoint_marker.color.r 1.0最后提醒下每次修改参数后建议做完整的飞行测试包括悬停稳定性测试至少30秒阶跃响应测试突然改变目标点障碍物突现测试用gazebo动态添加障碍物

更多文章