第二章:仿真环境搭建

说实话,搭建仿真环境这件事,我见过太多人在这里栽跟头了。明明代码写得挺好,结果环境没配好,一整天都在跟各种报错信息较劲。我自己刚入行那会儿,光PX4编译就折腾了两天——后来才发现是依赖没装全。

这一章,咱们就把Ubuntu、ROS2、PX4、MAVSDK这四样东西一次性搞定。我按实际项目中的操作顺序来,你跟着一步步走就行。

核心要点:仿真环境是飞控开发的"试验田"。环境配不好,后面所有工作都白搭。我建议你配完环境后,先跑一个简单的例程验证一下,别急着往下走。

仿真环境搭建知识体系 Ubuntu系统配置 ROS2安装与配置 PX4-Autopilot编译 MAVSDK安装 系统更新 · 显卡驱动 · 依赖安装 Humble安装 · 工作空间 · 通信桥接 源码下载 · 依赖检查 · make编译 C++ SDK · Python绑定 · 例程测试 最终目标:Gazebo仿真 + ROS2控制 + PX4飞控 ✅ 验证:运行PX4 SITL + 查看MAVSDK连接

2.1 Ubuntu系统配置

我个人习惯用Ubuntu 22.04 LTS。为什么?因为ROS2 Humble官方支持的就是这个版本,省心。你想想看,要是用个冷门版本,后面装啥都得自己编译,那得多累。

系统装好后,第一件事就是更新源:

sudo apt update
sudo apt upgrade -y

我的小技巧:换国内源能快不少。清华、中科大、阿里云的源我都用过,速度都还行。我一般用清华的,稳定。

接下来装一些基础依赖。嗯,这里要注意,别漏了:

sudo apt install -y \
    git \
    cmake \
    build-essential \
    python3-pip \
    python3-venv \
    wget \
    curl \
    vim

显卡驱动这块,如果你用的是NVIDIA显卡,我建议装官方驱动。我在项目中遇到过用nouveau开源驱动跑Gazebo,结果画面卡成PPT的情况。后来换成官方驱动,流畅多了。

# 查看显卡型号
lspci | grep -i nvidia

# 安装推荐驱动
sudo ubuntu-drivers autoinstall

2.2 ROS2安装与配置

ROS2我选Humble版本。说白了,现在做无人机仿真,Humble是最稳的选择。Iron虽然新,但有些包还没跟上。

安装步骤其实很简单,但有个坑——一定要先设置locale。我曾经因为跳过这步,结果编译时一堆乱码报错,查了半天才发现是locale的问题。

# 设置locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

# 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe

# 安装ROS2 Humble
sudo apt install ros-humble-desktop -y

注意:ROS2安装包有desktop和base两种。desktop包含可视化工具,base只有核心库。做仿真建议装desktop,不然rviz2都用不了。

装完后别忘了配置环境变量:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证一下:

ros2 run demo_nodes_cpp talker

如果能看到"Hello World"不断输出,那就成了。

2.3 PX4-Autopilot编译

PX4的编译,说实话是这四步里最耗时的。我第一次编译时等了将近40分钟,还以为电脑死机了。后来发现,其实可以加个参数让编译快一点。

先下载源码:

git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot

这里有个细节——一定要加--recursive。我有个同事没加,结果编译到一半报错说缺少子模块,又得重新下载,白白浪费一小时。

然后装依赖:

bash ./Tools/setup/ubuntu.sh

这个脚本会自动装好所有依赖。不过它可能会装一些你不需要的东西,比如ARM交叉编译工具链。如果你只做仿真,其实用不到那些。

编译PX4 SITL(软件在环仿真):

make px4_sitl gazebo

加速编译:可以用 make px4_sitl gazebo -j4 来并行编译。我一般用-j8,前提是你的CPU核心数够多。

编译成功后,你会看到Gazebo界面弹出来,一架无人机出现在草地上。那一刻还是挺有成就感的。

2.4 MAVSDK安装

MAVSDK是连接PX4和上层应用的桥梁。说白了,你想用Python或者C++控制无人机,就得靠它。

安装方式有两种:

方式 适用场景 安装命令
C++ SDK 性能要求高的场景 从源码编译
Python绑定 快速原型开发 pip install mavsdk

我个人建议先装Python版本,调试起来方便。等后面需要高性能时再换C++。

pip install mavsdk

验证安装:

python3 -c "import mavsdk; print(mavsdk.__version__)"

如果没报错,那就装好了。

避坑指南:我曾经在Python虚拟环境里装MAVSDK,结果忘了激活虚拟环境,直接在系统环境里装了。后来项目迁移时才发现依赖全乱了。建议从一开始就用虚拟环境管理项目依赖。

最后,咱们把四个组件串起来验证一下。启动PX4 SITL,然后运行一个MAVSDK的例程,看看能不能连上:

# 终端1:启动PX4仿真
cd PX4-Autopilot
make px4_sitl gazebo

# 终端2:运行MAVSDK例程
python3 -c "
import asyncio
from mavsdk import System

async def run():
    drone = System()
    await drone.connect(system_address='udp://:14540')
    print('连接成功!')
    
asyncio.run(run())
"

如果打印出"连接成功!",那恭喜你,整个仿真环境就搭好了。后面咱们就可以在这个环境里做各种飞控算法的仿真验证了。