Ubuntu20.04部署XTDrone避坑实践指南
1. 环境准备:Ubuntu20.04基础配置
在开始部署XTDrone之前,确保你的Ubuntu20.04系统处于最佳状态。我建议先执行以下命令更新系统基础软件包:
sudo apt update && sudo apt upgrade -y这个步骤看似简单,但很多新手会忽略。去年我在给团队搭建测试环境时,就遇到过因为基础库版本过低导致的ROS安装失败。更新后建议重启系统,确保所有更新生效。
对于双系统用户,需要特别注意磁盘空间分配。XTDrone及其依赖组件安装后至少需要30GB空间,建议预留50GB以上。如果你使用的是虚拟机,记得提前调整虚拟磁盘大小。我遇到过好几次因为空间不足导致编译失败的情况,最后只能重头再来。
显卡驱动也是容易踩坑的地方。运行Gazebo需要正确的显卡驱动支持,建议使用以下命令安装NVIDIA官方驱动:
sudo ubuntu-drivers autoinstall安装完成后记得重启,并用nvidia-smi命令验证驱动是否正常工作。去年帮学弟调试时,发现他用的开源驱动导致Gazebo渲染异常卡顿,换成官方驱动后流畅度直接提升三倍。
2. ROS安装:选择最适合XTDrone的版本
ROS是XTDrone的核心依赖,但版本选择很关键。经过多次测试,我发现ROS Noetic(对应Ubuntu20.04)是最稳定的选择。官方推荐的方法是用鱼香ROS的一键安装脚本:
wget http://fishros.com/install -O fishros && . fishros这个脚本会自动处理所有依赖关系,比手动安装省心很多。记得我第一次手动安装ROS时,花了整整两天时间解决各种依赖冲突,而用这个脚本20分钟就搞定了。
安装完成后务必验证环境变量是否配置正确。我建议在终端执行:
source /opt/ros/noetic/setup.bash echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc有个常见问题是多版本ROS共存导致的环境污染。如果你之前安装过其他ROS版本,最好先完全卸载。去年实验室的测试机上就因为这个原因导致XTDrone无法正常启动,清理旧版本后才解决。
3. Gazebo安装:版本控制的艺术
Gazebo版本是最大的雷区之一。XTDrone官方推荐使用Gazebo9,但Ubuntu20.04默认仓库中是Gazebo11。经过多次踩坑,我发现最可靠的方法是:
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list' wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - sudo apt update sudo apt install gazebo9 libgazebo9-dev -y安装后立即锁定版本,防止意外升级:
sudo apt-mark hold gazebo9 libgazebo9-dev模型下载是另一个痛点。Gazebo首次启动时会下载大量模型文件,国内网络环境经常失败。我整理了完整的模型包,可以通过以下命令快速安装:
wget https://gitee.com/robin_shaun/XTDrone/releases/download/v1.0/gazebo_models.tar.gz tar -xzf gazebo_models.tar.gz -C ~/.gazebo/4. MAVROS安装:解决依赖地狱
MAVROS是连接ROS和PX4的桥梁,但它的依赖关系相当复杂。最稳妥的安装方式是:
sudo apt install ros-noetic-mavros ros-noetic-mavros-extras -y wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh chmod +x install_geographiclib_datasets.sh sudo ./install_geographiclib_datasets.sh这里有个隐藏坑点:地理信息数据集安装需要科学上网。如果遇到下载失败,可以手动下载后解压到/usr/share/GeographicLib目录。上个月给客户部署时就遇到了这个问题,最后是通过内网镜像解决的。
验证MAVROS是否安装成功:
roslaunch mavros px4.launch如果看到终端输出心跳信息,说明安装正确。我遇到过因为Python包冲突导致启动失败的情况,用pip uninstall pymavlink后再重新安装ROS版的pymavlink就解决了。
5. PX4固件编译:避开版本陷阱
PX4的版本选择直接影响XTDrone的稳定性。经过多次测试,我强烈建议使用PX4 v1.13.0稳定版:
git clone --recursive https://github.com/PX4/PX4-Autopilot.git -b v1.13.0 cd PX4-Autopilot make px4_sitl_default gazebo编译过程可能会遇到内存不足的问题。如果机器配置较低,可以尝试:
make px4_sitl_default gazebo -j2去年在树莓派上编译时,发现默认的并行编译会导致内存溢出,加上-j2参数限制并行任务数后就顺利通过了。
常见错误处理:
- 如果出现"git submodule"相关错误,执行:
git submodule sync --recursive git submodule update --init --recursive - 遇到Python包缺失时,用pip安装:
pip install numpy toml pandas jinja2 pyyaml
6. XTDrone部署:最后的冲刺
XTDrone本体的安装相对简单,但有几个细节需要注意:
mkdir -p ~/xtdrone_ws/src cd ~/xtdrone_ws/src git clone https://gitee.com/robin_shaun/XTDrone.git cd .. catkin_make编译完成后,记得更新环境变量:
echo "source ~/xtdrone_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc测试运行时可能会遇到模型路径问题,解决方法是在launch文件中添加:
<env name="GAZEBO_MODEL_PATH" value="${GAZEBO_MODEL_PATH}:$(find px4)/Tools/sitl_gazebo/models"/>上周在给新笔记本部署时,发现因为屏幕缩放导致Gazebo界面显示异常,解决方法是在启动命令前加上:
export QT_AUTO_SCREEN_SCALE_FACTOR=07. 常见问题排查指南
经过数十次部署实践,我整理了这份高频问题排查清单:
Gazebo黑屏无响应:
- 检查显卡驱动:
glxinfo | grep "OpenGL renderer" - 尝试软件渲染:
export LIBGL_ALWAYS_SOFTWARE=1
- 检查显卡驱动:
ROS节点通信失败:
- 检查IP设置:
echo $ROS_IP - 验证主机名解析:
ping $(hostname)
- 检查IP设置:
PX4无法解锁:
- 检查MAVROS连接:
rostopic echo /mavros/state - 验证遥控器校准:
rosrun mavros mavsys mode -c MANUAL
- 检查MAVROS连接:
模型加载异常:
- 清理Gazebo缓存:
rm -rf ~/.gazebo/* - 重新下载模型:
rosrun gazebo_ros spawn_model
- 清理Gazebo缓存:
记得去年有次部署后一切正常,但第二天启动时Gazebo突然崩溃。最后发现是NVIDIA驱动自动更新导致的,回滚驱动后解决。建议禁用自动更新:
sudo apt-mark hold nvidia-driver-*