在开始搭建无人机仿真环境前,我们需要确保系统基础环境正确配置。Ubuntu20.04作为长期支持版本(LTS),其稳定性和兼容性都非常适合开发用途。我建议使用全新安装的系统开始,避免已有软件包造成冲突。
首先更新系统软件源和已安装的包:
bash复制sudo apt update && sudo apt upgrade -y
开发过程中会频繁使用终端工具,推荐安装一些必备工具:
bash复制sudo apt install -y git curl wget vim tmux
特别要注意的是,Gazebo仿真对显卡驱动有要求。如果你使用的是NVIDIA显卡,务必安装专有驱动:
bash复制sudo ubuntu-drivers autoinstall
安装完成后重启系统使驱动生效。我曾经遇到过因为驱动问题导致Gazebo黑屏的情况,后来发现是开源驱动性能不足导致的。验证驱动是否安装成功可以运行:
bash复制nvidia-smi
ROS1 Noetic是最后一个支持Ubuntu20.04的ROS1版本,它提供了完善的机器人开发工具链。我测试过多种安装方式,最稳定的是通过官方源安装。
首先添加ROS软件源:
bash复制sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
设置密钥:
bash复制sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
安装完整版ROS(包含所有工具和功能包):
bash复制sudo apt update && sudo apt install -y ros-noetic-desktop-full
初始化rosdep是很多人容易忽略的步骤:
bash复制sudo rosdep init
rosdep update
最后设置环境变量,我习惯将其添加到.bashrc中:
bash复制echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证安装是否成功可以运行经典的小海龟测试:
bash复制roscore &
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
PX4是目前最流行的开源飞控软件之一,我们需要先下载源码。由于项目依赖较多,建议使用递归克隆:
bash复制git clone https://github.com/PX4/PX4-Autopilot.git --recursive
如果遇到网络问题导致子模块下载失败,可以进入目录后单独更新:
bash复制cd PX4-Autopilot
git submodule update --init --recursive
PX4提供了方便的安装脚本,但执行前需要确保系统依赖完整:
bash复制bash ./Tools/setup/ubuntu.sh
这个脚本会自动安装Gazebo、Ninja编译工具等依赖。我在实际使用中发现,有时会因为网络问题导致部分包安装失败,这时可以尝试:
bash复制bash ./Tools/setup/ubuntu.sh --fix-missing
编译PX4固件需要一定时间,建议使用多线程编译:
bash复制make px4_sitl_default gazebo -j$(nproc)
第一次启动Gazebo仿真时,模型文件下载可能需要较长时间。如果卡住可以尝试更换模型源:
bash复制export GAZEBO_MODEL_DATABASE_URI=http://models.gazebosim.org
MAVROS是连接ROS和PX4的关键组件,安装命令很简单:
bash复制sudo apt install -y ros-noetic-mavros ros-noetic-mavros-extras
但实际使用中我发现地理信息数据集经常导致问题,需要手动安装:
bash复制sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh
测试MAVROS连接时,如果没有连接真实飞控,会出现一些警告信息,这是正常现象:
bash复制roslaunch mavros px4.launch
对于真实硬件连接,需要特别注意串口权限问题。我遇到过/dev/ttyACM0无法访问的情况,解决方法:
bash复制sudo usermod -a -G dialout $USER
sudo chmod 666 /dev/ttyACM0
QGC是PX4生态中最常用的地面站软件,在Ubuntu上有多种安装方式。我推荐使用AppImage格式,它包含了所有依赖:
bash复制wget https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage
chmod +x QGroundControl.AppImage
./QGroundControl.AppImage
如果遇到图形显示问题,可能需要安装额外的库:
bash复制sudo apt install -y libfuse2 libqt5gui5 gstreamer1.0-plugins-bad
完成所有组件安装后,我们需要测试整个系统是否能协同工作。首先启动PX4仿真:
bash复制cd ~/PX4-Autopilot
make px4_sitl_default gazebo
在另一个终端启动MAVROS:
bash复制roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"
验证连接状态:
bash复制rostopic echo /mavros/state
在QGC中,添加UDP连接,端口设置为14550。如果一切正常,你应该能看到仿真无人机出现在QGC地图上。
在实际搭建过程中,我遇到过几个典型问题。首先是Gazebo启动黑屏,这通常是因为显卡驱动问题,可以尝试:
bash复制export LIBGL_ALWAYS_SOFTWARE=1
其次是MAVROS连接超时,检查防火墙设置:
bash复制sudo ufw allow 14540/udp
最后是PX4编译失败,通常是因为依赖不全,可以尝试:
bash复制sudo apt install -y python3-pip
python3 -m pip install --upgrade pip
pip3 install -r requirements.txt