本文为《无人机飞控固件开发教程》系列视频的辅助资料,已经在“网易云课堂”上发布:视频链接。无人机调试,飞控硬件定制、固件修改,日志分析,请QQ联系:3500985284
APM官方教程链接:https://ardupilot.org/dev/docs/building-setup-windows11.html#building-setup-windows11
之前,我们在windows下主要使用cygwin64编译APM飞控固件,但是随着技术的进步,APM官方更加推荐Win11下使用WSL2(Windows Subsystem for Linux,即windows下的Linux子系统)来编译,下面根据APM官方教程进一步细化讲解如何建立编译环境和仿真环境。
本质上,使用WSL2时,就是在使用一个轻量化的、与windows集成度很好的Linux虚拟机(这个虚拟机一般我们都是安装的Ubuntu),因此相对于Cygwin64,其编译速度往往快很多(经测试,直接在电脑上安装Ubuntu来编译飞控固件速度最快,WSL2下编译速度一般介于Cygwin64与原生Ubuntu之间)。
一、启用WSL2并安装Ubuntu22.04
1、启用WSL2
网上有很多WSL2的教程,但是实际上随着微软的不断优化,最新版的Win11仅需要如下命令即可完成WSL2的安装:
在win11下打开命令行(又叫“终端”),输入如下命令:
wsl --install
安装完成后输出如下(注意安装完成后按照提示重启电脑):

根据提示,重启电脑后生效。
2、安装Ubuntu22.04子系统
a、在开始菜单搜索“Microsoft Store”并打开它;
b、在“Microsoft Store”顶部搜索栏搜索“Ubuntu-22.04”;
c、选择“Ubuntu 22.04.5 LTS”,进去后单击“安装”按钮即可完成安装(根据网速,安装耗时在2分钟~无穷大之间)。

d、安装完成后,直接在“Microsoft Store”中点击“打开”按钮,或者在开始菜单搜索“Ubuntu 22.04.5 LTS”并单击打开它后显示一个命令行窗口即为Ubuntu 22.04.5的命令行窗口,此时在这个窗口内执行命令,实际上就是在一个Ubuntu上执行命令,非常方便。

e、首次打开时,会提示输入用户名,输入一个自定义的用户名即可(优先用英文),然后是设置密码,之后就彻底安装完成。

二、建立APM(Ardupilot)编译环境
由于实际上已经是Ubuntu22.04操作系统,因此建立APM固件编译环境的方法跟《课时19 – 在Ubuntu系统下建立飞控固件编译环境》是一样的,链接:http://www.nufeichuiyun.com/?p=2269
由于没有图形界面,其中的“一、将 Ubuntu换成国内源”方法不同,在WSL2中Ubuntu的终端中输入如下命令即可(注意这个命令是单行的,虽然由于屏幕宽度你看到的是多行):
sudo sed -i.bak 's|http://[^ ]*ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g; s|https://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list && sudo apt update
三、WSL2与win11之间文件访问
在Win11的“此电脑”的地址栏输入如下地址,然后“回车”,可以直达Ubuntu子系统中的ardupilot文件夹,非常方便。
\\wsl.localhost\Ubuntu-22.04\home\nfcy\ardupilot

四、使用VScode编辑WSL2中的飞控源代码
大家首先需要明白一个本质问题:源代码只是一堆txt文件,我们“写程序、改代码”本质上是在改一堆txt文件中的文本内容。因此,使用WSL2+Vscode编辑、编译飞控源代码时的步骤如下:
1、在Win11下安装VScode;
2、在VScode中安装“WSL”插件;

3、单击VScode左下角的“WSL: Ubuntu-22.04”,然后选择顶部弹出的选择列表中的“Connect to WSL”;

4、按照下图所示打开Ubuntu下的文件夹,即可开始编辑代码

5、可以单独打开一个独立的Ubuntu终端,切换到ardupilot目录进行编译;也可以在VScode中打开内嵌的终端,然后进行编译。这两种方法本质上都是调用了Ubuntu子系统的终端,因此其效果是一样的。

6、编译方法与命令与使用Cygwin64编译或者在原生Ubuntu下编译是一模一样的:
# 进入飞控源代码的最顶层目录
cd ardupilot
# 切换到一个稳定版(以多旋翼4.6.2为例)
git checkout -b MyCopter-4.6.2 Copter-4.6.2
# 更新子模块(注意,一定要更新子模块)
git submodule update --init --recursive
# 注意,一定要更新子模块
# 注意,一定要更新子模块
# 指定飞控硬件型号(以Pixhawk2.4.8为例)
# 这一步背后的逻辑请看本教程的课时3
./waf configure --board fmuv3
# 编译飞控固件(多旋翼固件)
# 这一步背后的逻辑请看本教程的课时3
./waf copter
五、在WSL2下进行仿真测试
同理,在WSL2下仿真的命令与使用Cygwin64或者原生Ubuntu也是一模一样的:
# 进入仿真脚本所在目录
cd Tools/autotest
# 运行仿真脚本(-v ArduCopter表示仿真的是多旋翼固件)
sim_vehicle.py -v ArduCopter
在默认设置下,在Win11下打开MissionPlanner,地面站会自动连接Ubuntu中正在运行的仿真程序,这一步真是出乎意料的方便。
本文为《无人机飞控固件开发教程》系列视频的辅助资料,已经在“网易云课堂”上发布:视频链接。无人机调试,飞控硬件定制、固件修改,日志分析,请QQ联系:3500985284
