从零到一:用Ubuntu与Git构建APM无人机开发环境的奇幻漂流

周末的阳光透过窗帘洒在桌面上,我决定开启一段全新的技术冒险——搭建自己的APM无人机开发环境。作为一名刚接触嵌入式开发的初学者,我既兴奋又忐忑,毕竟要在个人电脑上从零构建完整的编译环境,听起来就像是一场充满未知的奇幻漂流。不过,正是这种探索的乐趣吸引着我,让我迫不及待地想亲手打造属于自己的无人机控制系统。

1. 环境准备:虚拟世界的基石

在开始这段旅程之前,我需要先搭建一个安全且隔离的开发环境。虚拟机无疑是最佳选择,它让我能够在Windows系统上运行另一个操作系统,而不用担心搞乱我的主力工作环境。在VMware和VirtualBox之间,我选择了后者,因为它完全免费且功能强大,特别适合个人开发者使用。

下载安装VirtualBox后,接下来需要准备Ubuntu系统镜像。这里有个关键细节:必须选择LTS(长期支持)版本的Ubuntu,因为APM开发工具链对系统稳定性要求较高。我选择了最新的Ubuntu LTS版本,这样既能获得五年的安全更新支持,又能确保与最新开发工具的兼容性。

提示:建议为虚拟机分配至少4GB内存和20GB硬盘空间,编译过程需要较多系统资源。

安装过程中我遇到了第一个挑战:系统语言设置。最初我选择了英文界面,但后来发现需要添加中文输入法支持。在系统设置的"区域与语言"选项中,添加Chinese输入源后重启系统,就能顺利使用中文输入了,这对查阅中文技术文档特别有帮助。

# 如果需要通过命令行添加中文支持
sudo apt update
sudo apt install language-pack-zh-hans
sudo apt install fcitx fcitx-googlepinyin

2. Ubuntu系统深度配置

新安装的Ubuntu系统还需要一些必要配置才能满足开发需求。首先需要更新系统软件包,确保所有组件都是最新版本:

sudo apt update && sudo apt upgrade -y

接下来安装基础开发工具,这些是后续编译过程的基石:

sudo apt install -y build-essential cmake git terminator

在配置过程中,我遇到了一个典型问题:执行sudo命令时提示用户不在sudoers文件中。这是因为新创建的用户默认没有获得管理员权限。解决方法如下:

首先切换到root用户:

su -

然后给sudoers文件添加写权限:

chmod u+w /etc/sudoers

使用vi编辑器修改sudoers文件,在root ALL=(ALL) ALL下面添加一行:

your_username ALL=(ALL) ALL

最后撤销文件的写权限:

chmod u-w /etc/sudoers

这样我的普通用户就能正常使用sudo命令了。这个过程让我深刻理解了Linux权限管理的重要性,也为后续的软件安装打下了基础。

3. Git与源码管理实战

配置好系统环境后,接下来需要获取APM的源代码。Git是版本控制的必备工具,我先确保安装了最新版本的Git:

sudo apt install -y git
git --version

APM项目的源代码托管在GitHub上,使用git clone命令可以获取完整代码库:

git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot

APM项目使用了Git子模块来管理依赖,这是很多大型开源项目的常见做法。需要初始化并更新子模块:

git submodule init
git submodule update

注意:子模块更新可能需要重复执行几次,直到所有依赖项都完整下载。网络不稳定时可能会部分失败,耐心多试几次即可。

在这个过程中,我学会了如何使用git status检查更新状态,以及如何用git log查看提交历史。这些技能在后续的开发和调试中都发挥了重要作用。

APM项目代码结构概览

目录用途说明
ArduCopter多旋翼飞行器固件
ArduPlane固定翼飞机固件
Rover地面车辆固件
Tools开发工具和脚本
libraries共享代码库

4. 依赖环境与工具链配置

APM项目提供了自动化的环境配置脚本,大大简化了依赖安装过程。进入工具目录执行安装脚本:

cd ardupilot/Tools/environment_install/
./install-prereqs-ubuntu.sh -y

这个脚本会自动安装编译所需的所有依赖包,包括编译器、调试工具、Python包等。整个过程可能需要较长时间,取决于网络速度和系统性能。

安装完成后需要更新shell环境配置:

. ~/.profile

为了验证环境配置是否正确,我运行了几个基础检查命令:

gcc --version
python3 --version
make --version

这些命令输出显示编译器版本和Python环境都符合要求,说明工具链配置成功。

关键开发工具列表

  • gcc:GNU编译器集合,用于编译C/C++代码
  • python3:Python解释器,用于运行配置脚本
  • make:构建自动化工具
  • waf:APM项目专用的构建系统
  • mavproxy:MAVLink协议地面站工具

5. 固件编译与烧录实战

环境配置完成后,终于到了最令人兴奋的环节——编译固件。APM使用waf构建系统,首先需要配置目标硬件平台:

./waf configure --board fmuv3

不同的飞控硬件需要不同的板型配置,可以使用以下命令查看支持的板型列表:

./waf list_boards

选择正确的板型至关重要,否则编译出的固件可能无法正常运行。我使用的是Pixhawk 2.4.8飞控,对应的板型是fmuv3。

编译特定类型的固件:

# 编译四旋翼固件
./waf copter

# 编译固定翼固件  
./waf plane

# 编译地面车辆固件
./waf rover

编译成功后,可以将固件烧录到飞控硬件:

./waf copter --upload

这个过程需要将飞控通过USB连接到电脑,系统会自动检测设备并上传固件。

重要提示:首次烧录前建议先执行清理操作,确保没有残留的中间文件影响编译结果:./waf clean

6. 版本管理与稳定分支选择

APM项目有多个发布分支,新手往往不知道应该选择哪个版本。默认的master分支是开发分支,可能包含未经验证的新特性,不适合生产环境使用。

查看所有可用标签(发布版本):

git tag

选择稳定的发布版本,比如Copter-4.3.1:

git checkout Copter-4.3.1

切换版本后需要重新更新子模块和配置环境:

git submodule update
./waf configure --board fmuv3

版本管理是软件开发中的重要环节,正确的分支选择可以避免很多不必要的麻烦。稳定版本经过充分测试,bug较少,特别适合初学者使用。

7. 仿真测试与调试技巧

在实际飞行测试前,使用软件在环仿真(SITL)可以大大降低风险和成本。APM提供了强大的仿真环境,让我能够在电脑上测试飞控算法。

启动基础仿真环境:

cd ArduCopter
sim_vehicle.py -w

这个命令会启动一个基础的仿真会话,擦除现有配置并使用默认参数。如果需要更高级的仿真功能,可以启动带控制台和地图的完整仿真:

sim_vehicle.py --console --map

仿真环境中可以测试各种飞行模式,验证参数设置,甚至模拟故障情况。这对理解飞控系统的工作原理非常有帮助。

常用仿真测试场景

  1. 基本悬停测试:验证PID参数是否合适
  2. 航线飞行测试:检查导航算法准确性
  3. 故障注入测试:模拟传感器故障或动力损失
  4. 风扰测试:验证抗风性能和稳定性

安装和更新仿真相关的Python包:

pip install --upgrade pymavlink MAVProxy --user

这些工具提供了与飞控通信的标准接口,是地面站软件的基础。

在仿真测试过程中,我学会了如何分析日志文件,调试参数设置,这些技能在实际飞行测试中都非常有用。仿真环境就像是一个安全的沙盒,让我可以大胆尝试各种想法,而不用担心炸机的风险。

整个环境搭建过程就像是一次技术探险,从虚拟机的安装到最终的成功编译,每一步都充满了学习的乐趣。当你第一次看到自己编译的固件在飞控上正常运行,那种成就感是无与伦比的。这种亲手构建的开发环境,不仅让我对APM系统有了更深的理解,也为后续的二次开发和定制化打下了坚实基础。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐