在Ubuntu系统下建立飞控固件编译环境

本文为《无人机飞控固件开发教程》系列视频的辅助资料,已经在“网易云课堂”上线 , 链接如下: https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983无人机调试,飞控硬件定制、固件修改,日志分析,请QQ联系:3500985284

注意:观看本节课的视频前,请先详细观看课时1、课时3和课时5的视频(即使你不在Windows下编译飞控固件),里面的很多内容是本节课的先导内容

一、将 Ubuntu换成国内源(软件包下载速度kB→MB)

更新包信息以及已经安装的包

# 更新包列表
sudo apt update

# 更新已安装的包
sudo apt upgrade

# 注意,官方推荐使用“apt”命令来替代“apt-get”命令,因此我们这里都用“apt”

二、安装“python3-pip”并将pip换成国内源

# 安装pip(python的包管理工具)
sudo apt install python3-pip

# 将pip更换为国内源(在线安装python包时,下载速度从kB到MB的秘诀)
# 全局生效,因此以后使用pip安装python时不需要再手动指定软件源
# 注意,此命令只在Ubuntu20.04版本下验证过。已知Ubuntu18.04下无法正常运行此命令
# 如果需要在Ubuntu18.04下更换pip源,请百度“Ubuntu18.04 pip 国内源”,并自行尝试解决
# 如果多次尝试扔无法解决,则跳过这一步,这个步骤只是加速安装而已
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 将python命令链接到python3命令,从而输入python时调用的是python3
# 这一条必须做,否则后面建立编译环境时会出错
sudo ln -s /usr/bin/python3 /usr/bin/python

三、使用飞控源代码中的脚本文件自动建立编译环境

# 安装git工具(Ubuntu默认没有安装git)
sudo apt install git

# 下载ardupilot(APM)源代码
git clone https://github.com/ArduPilot/ardupilot.git
# 注意,大部分情况下,从github上下载代码速度非常不稳定,请打开百度,搜索“github下载慢”,然后尝试一下网上的各种办法
# 由于我们是在Ubuntu下做的,因此可以将搜索关键词改为“Ubuntu github 下载慢”,然后多打开一些网页,综合对比后尝试一下,这就是研发的日常工作

# 将APM源代码切换到master分支(目前来看只有最新的master分支的自动化建立编译环境的脚本是没有问题的)
# 注意是截止到2022年9月7日最新的master分支经过验证没有问题,你之前下载的源代码中的master分支可能比较老,不一定能用
git checkout master

# 注意,由于自动化编译脚本不属于源代码的“子模块”,因此此时还不用更新子模块

# 进入脚本所在目录(第一节课中的Windows环境下建立编译环境的脚本也在这里)
cd ardupilot/Tools/environment_install

# 运行脚本(注意,此命令前不要加“sudo”,也不要加“sh”,否则会报错)
./install-prereqs-ubuntu.sh

# 注意,上述命令前不要加“sudo”,也不要加“sh”,否则会报错# 注意,上述命令前不要加“sudo”,也不要加“sh”,否则会报错!
(至此,这句话我说了三遍,我希望你能听见,也能听明白)

# 遇到[Y/N]选择时,都选y,注意,多个步骤中Y有大写有小写,不要弄混

# 安装完成后,重启电脑,让一些环境变量生效(注销后重新登陆应该也行,但是重启肯定是最稳妥的)
# 安装完成后,重启电脑,让一些环境变量生效
# 安装完成后,重启电脑,让一些环境变量生效(凡是我写三遍的地方,就是大家很可能要出错的地方)

很不幸,总有一些网络传输速度问题我们是没法提前绕开的:

如下图所示,从提示来看脚本文件打算从APM官网的一个地址(https://firmware.ardupilot.org/Tools/)下载STM32单片机对应的gcc编译器的安装包(STM32-tools/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2),奈何APM官网服务器在国外,这传输速度不是本文头部的换源能解决的。

于是,我使用迅雷下载了这个文件,复制放到Ubuntu中,然后修改了脚本文件,让它直接使用下载好的安装包,从而解决问题。

注意,使用这个手动下载的安装包前,需要先使用终端命令删除之前脚本文件自动下载的安装包(非完整文件)。

这一部分的具体操作见本文对应的视频教程:https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983

2022年09月27日修正:根据大家的反馈,视频教程中对Ubuntu终端中“Y/n”交互的处理有误,事实上,在Ubuntu的终端中,“Y/n”(Yes/no)选择时是不区分大小写的,也就是说输入“Y”和“y”都行。而在输入命令时才区分大小写:比如“sudo apT update”是不对的,其中的“T”必须为小写。

四、编译飞控固件

# 进入飞控源代码的最顶层目录
cd ardupilot

# 切换到一个稳定版(以多旋翼4.2.3为例)
git checkout -b MyCopter-4.2.3 Copter-4.2.3

# 更新子模块(注意,一定要更新子模块)
git submodule update --init --recursive

# 注意,一定要更新子模块
# 注意,一定要更新子模块

# 指定飞控硬件型号(以Pixhawk2.4.8为例)
# 这一步背后的逻辑请看本教程的课时3
./waf configure --board fmuv3

# 编译飞控固件(多旋翼固件)
# 这一步背后的逻辑请看本教程的课时3
./waf copter

五、软件仿真测试

# 进入仿真脚本所在目录
cd Tools/autotest

# 运行仿真脚本(-v ArduCopter表示仿真的是多旋翼固件)
sim_vehicle.py -v ArduCopter

六、本节课中的虚拟机下载链接

  • 虚拟机软件:VMware Workstation Pro 16
  • Ubuntu版本号:22.04 LTS
  • Ubuntu用户名:nfcy
  • Ubuntu密码:nfcy
  • 虚拟机文件下载链接(百度网盘)链接
  • 虚拟机文件百度网盘提取码:nfcy

七、疑难解答

学员反馈的问题将在这里解答。

京ICP备19049723号   |   京公网安备 11010502039327号