从Gazebo黑屏到成功起飞:我的XTDrone+ROS Noetic+PX4仿真环境搭建全记录
1. 启程:搭建前的准备与思考
作为一名无人机算法开发者,仿真环境的重要性不言而喻。在决定使用XTDrone+ROS Noetic+PX4这套组合时,我查阅了大量资料,发现虽然网上教程不少,但大多都是"一帆风顺"的完美流程,很少提及实际搭建过程中可能遇到的坑。这让我决定记录下自己的真实搭建经历,希望能帮助到后来者。
选择Ubuntu 20.04作为基础系统有几个考虑:
- 长期支持版本(LTS)稳定性有保障
- 对ROS Noetic的官方支持最好
- 大多数开源无人机项目都针对这个版本做过测试
硬件配置方面,我使用的是:
- CPU: Intel i7-10750H
- 内存: 32GB
- 显卡: NVIDIA RTX 2060
- 存储: 1TB NVMe SSD
提示:Gazebo仿真对显卡有一定要求,集成显卡可能会导致性能问题
2. 第一步:PX4固件编译的曲折之路
2.1 初始环境搭建
按照官方文档,我首先尝试安装PX4开发环境:
sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install git -y git clone -b v1.13.0 https://github.com/PX4/PX4-Autopilot.git --recursive cd PX4-Autopilot然而,在运行安装脚本时遇到了第一个问题:
bash ./Tools/setup/ubuntu.sh报错信息显示python-dateutil版本不兼容。经过搜索,发现这是Ubuntu 20.04自带Python包的一个常见问题。
解决方法:
sudo pip install --upgrade python-dateutil2.2 环境变量配置陷阱
完成基础安装后,需要配置环境变量。这里我犯了一个新手常见错误 - 没有正确设置PATH:
gedit ~/.bashrc添加以下内容:
export PATH=$PATH:$HOME/.local/bin然后执行:
source ~/.bashrc注意:每次修改.bashrc后都需要source使其生效,或者新开一个终端
3. ROS Noetic安装:鱼香ROS的便利
为了简化ROS安装过程,我选择了鱼香ROS的一键安装脚本:
wget http://fishros.com/install -O fishros && . fishros安装过程中有几个关键选择:
- 选择"桌面完整版"安装
- 保持默认源(不需要换源)
- 安装所有依赖项
安装完成后,验证ROS是否安装成功:
roscore如果看到类似以下输出,说明ROS核心已正常运行:
... logging to /home/user/.ros/log/xxxxx started core service [/rosout]4. MAVROS与PX4的通信难题
4.1 MAVROS安装
MAVROS是ROS与PX4通信的桥梁,安装命令如下:
sudo apt install ros-noetic-mavros ros-noetic-mavros-extras wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh sudo chmod a+x ./install_geographiclib_datasets.sh sudo ./install_geographiclib_datasets.sh警告:最后一步安装地理数据集可能耗时较长,请耐心等待
4.2 通信测试与排错
创建catkin工作空间:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin init catkin build添加必要的环境变量到.bashrc:
source ~/catkin_ws/devel/setup.bash source ~/PX4-Autopilot/Tools/setup_gazebo.bash ~/PX4-Autopilot ~/PX4-Autopilot/build/px4_sitl_default export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/sitl_gazebo测试通信:
roslaunch px4 mavros_posix_sitl.launch # 新终端 rostopic echo /mavros/state常见问题排查表:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| connected: false | 环境变量未正确设置 | 检查.bashrc中的路径 |
| 无任何输出 | PX4未启动成功 | 查看PX4终端是否有报错 |
| 频繁断开 | 网络配置问题 | 检查防火墙设置 |
5. XTDrone集成:最后的冲刺
5.1 获取XTDrone源码
git clone https://gitee.com/robin_shaun/XTDrone.git cd XTDrone git submodule update --init --recursive5.2 文件配置
复制必要文件到PX4目录:
cp sitl_config/worlds/* ~/PX4-Autopilot/Tools/sitl_gazebo/worlds/ cp sitl_config/launch/* ~/PX4-Autopilot/launch/5.3 Gazebo黑屏问题解决
这是最令人头疼的问题之一。当执行:
roslaunch px4 indoor1.launchGazebo界面黑屏,模型无法加载。经过多方查找,发现是Gazebo模型下载问题。
解决方案:
- 安装xmlstarlet工具:
sudo apt-get install xmlstarlet- 手动下载Gazebo模型库:
mkdir -p ~/.gazebo/models cd ~/.gazebo/models wget http://file.ncnynl.com/ros/gazebo_models.txt wget -i gazebo_models.txt提示:这个过程可能耗时数小时,建议在夜间进行
6. 成功起飞:调试与优化
当所有组件都就位后,终于看到了无人机在Gazebo中成功起飞的场景。但为了让仿真更流畅,还需要进行一些优化:
性能优化建议:
- 在Gazebo启动时添加参数:
roslaunch px4 indoor1.launch gui:=false - 调整PX4参数:
param set SIM_OPTIONS "--lockstep" - 使用简化模型:
export PX4_SIM_MODEL=iris
常用调试命令:
# 查看PX4状态 commander status # 手动起飞 commander takeoff # 查看ROS节点 rqt_graph # 查看话题列表 rostopic list7. 开发环境配置技巧
7.1 终端复用
使用tmux可以大幅提高工作效率:
sudo apt install tmux tmux new -s drone # 分屏快捷键:Ctrl+b % # 新建窗口:Ctrl+b c7.2 常用别名设置
在.bashrc中添加:
alias px4='cd ~/PX4-Autopilot && make px4_sitl_default gazebo' alias roslaunchxt='roslaunch px4 indoor1.launch' alias rosnode='rosnode list'7.3 备份策略
为了防止环境损坏,建议定期备份:
# 备份PX4 tar -czvf px4_backup.tar.gz ~/PX4-Autopilot # 备份ROS工作空间 tar -czvf catkin_ws_backup.tar.gz ~/catkin_ws8. 后续开发建议
在实际使用这套环境进行算法开发时,我总结了几个实用技巧:
版本控制:为每个算法实验创建独立git分支
日志记录:使用rosbag记录所有话题数据
rosbag record -a -O test.bag可视化工具:
- 使用rqt进行参数调整
- 使用PlotJuggler分析数据
- 使用Gazebo的GUI检查碰撞
性能监控:
top -u $USER关注CPU和内存使用情况,必要时关闭不必要的进程
这套环境搭建虽然过程曲折,但最终获得的仿真平台为我的无人机算法开发提供了极大便利。特别是在尝试新的控制算法时,可以快速验证想法而不用担心硬件损坏。