目录
4. 编译安装 ArduPilot SITL 和 Copter 代码
ArduPilot 是一个开源、全功能、可扩展的无人系统自动驾驶软件,支持多种载具类型,包括多旋翼无人机,固定翼无人机,水上无人船和水下无人机器设备。SITL(Software-In-The-Loop) 是 ArduPilot 提供的一种 软件级仿真系统,允许你在不使用真实硬件的情况下,在本地机器运行 ArduPilot 代码并测试其行为。这篇教程将讲解如何安装 AruduPilot 及其 SITL 仿真代码。在成功安装和构建程序后,将启动一个基于多旋翼无人机的仿真。
1. 克隆 ArduPilot 代码库
在 Ubuntu 22.04 中打开一个终端,输入如下命令:
git clone --recurse-submodules https://github.com/ArduPilot/ardupilot.git
注意这里的 --recurse-submodules 选项很重要,不然很多子模块不会被自动安装。整个下载克隆的过程会输出很多信息,这里只截取开头的一部分,给大家参考,如下图:
下载完成之后,我们会在目录下找到 “ardupilot” 这个文件夹。
2. 安装 ArduPilot 依赖包
克隆完代码库之后,我们需要安装 ArduPilot 在 Ubuntu 下运行所需要的依赖包,ArduPilot 为我们提供了一个 shell 工具来完成这个任务,在终端中输入如下命令:
cd ./ardupilot
Tools/environment_install/install-prereqs-ubuntu.sh -y
这里会要求我们输入 sudo 密码,否则安装无法进行。安装过程中会有很多输出,也可能会出现一些 warning, 如果脚本没有中止的话暂且不用理会。在安装过程的结尾会输出如下信息:
安装结束后,重新加载当前用户的 profile
文件,使其中的环境变量设置等配置立即生效,代码如下:
. ~/.profile
依赖包安装完成之后,我们已经完成了安装 ArduPilot 的所有准备。
3. 了解 ArduPilot 目录结构
在编译安装具体的 ArduPilot 代码之前,我们先简单了解一下 ArduPilot 代码库的目录结构,如下图所示:
这里对主要文件夹进行一下介绍:
ardupilot/
├── ArduCopter/ # 多旋翼无人机(Copter)飞控代码
├── ArduPlane/ # 固定翼无人机(Plane)飞控代码
├── Rover/ # 无人车,无人船(Rover)飞控代码
├── ArduSub/ # 水下机器人(Sub)飞控代码
├── AntennaTracker/ # 天线跟踪器模块
├── Tools/ # 工具脚本和辅助程序
├── libraries/ # 通用功能库(IMU、GPS、EKF、CAN 等)
├── modules/ # 外部子模块(如 MAVLink, GCS scripts)
├── waf/ # Waf 构建系统配置
├── wscript # Waf 构建配置文件
├── README.md # 项目说明
另外多说一句,ArduPilot 是使用 waf 做为其主要构建系统。waf 是一个 Python 编写的轻量级构建工具,替代了传统的 make 或 cmake,适用于模块化项目如 ArduPilot。在使用 waf 构建代码之后,会产生一些额外的目录。
4. 编译安装 ArduPilot SITL 和 Copter 代码
进入 ardupilot 文件夹,准备编译安装 ArduPilot SITL 以及多旋翼无人机 (Copter) 的仿真代码,在终端中输入如下命令:
./waf configure --board SITL
./waf copter
编译安装的过程会有很多输出,这里依然只截取最后一部分作为参考:
注意这里的 ./waf configure --board SITL 一般只需要执行一次,除非我们想要使用不同的配置。ArduPilot 支持很多不同的 board 配置,比如如果需要更换成其它支持的周边硬件而不是 SITL,可用如下代码:
./waf configure --board skyviper-v2450
./waf copter
如果代码库中一些子模块升级了,我们想要对程序进行重新构建,可以运行:
./waf clean
这个命令会删除已经编译好的库和文件,以便我们重新构建程序。在安装顺利完成之后,我们可以启动仿真程序进行测试了。
5. 运行一个 ArduPilot SITL 仿真
在 ardupilot 文件夹中输入以下命令,启动一个仿真程序:
sim_vehicle.py -v ArduCopter --console --map
程序运行的结果如下图:
这里我们看到,程序启动了一个 map, 一个 console 和一个 ArduCopter 信息终端,证明我的代码已经安装成功了。sim_vehicle.py 是 ArduPilot SITL 的核心命令,我们将在下一讲中对这个命令进行介绍,并运行一个简单的仿真,操作无人机进行一些指定的任务。
6. 本讲小结
在这一教程中,我们简单介绍了如何下载 ArduPilot 的代码库,代码库的目录结构,如何安装依赖包和构建 ArduPilot SITL 仿真代码。最后我们成功运行了一个 ArduPilot SITL 的仿真程序。我们将在下一篇教程中,继续介绍 ArduPilot SITL 仿真。我们将会操纵一个模拟的无人机,进行具体任务,比如,起飞,降落以及飞到指定地点。
参考文献:
1. Setting up the Build Environment (Linux/Ubuntu) — Dev documentation