0 环境
- Windows 10 build version >= 18917 1
启动 cmd 后输出的第一行文字便是 Windows 的版本信息,或者更明确一点,在 cmd 中执行ver
。如果不满足版本要求请更新系统到高版本。
1 环境概述
这里我们期望的是在不安装虚拟机的情况下,测试飞控代码在Linux 下的编译,同时希望Linux 下编译好的飞控程序可以和 Windows 下的仿真器进行协同仿真。由于 Microsoft 最近几年积极拥抱开源文化,不仅向社区开源了的 c# 语言,VSCode 编译器,powershell 系统管理 shell,还把开源系统集成到自己的产品中,其中就包括基于WSL 的各种Linux 系统。在Windows 中的Linux 子系统和 Windows 操作系统之间文件完全可以共享,同时二者之间通过网络进行通信,这就为本文下面的内容提供了基础。下面的图简要描述了这里所描述的开发设置的原理。
2 配置 WSL
WSL (Windows Subsystem for Linux) 提供了在 Windows 10 中执行 Linux 命令的兼容层,即在 Windows10 中可以运行Linux 子系统,WSL有 WSL 和 WSL2两个版本,WSL2 和 WSL 的主要区别在于 WSL2 中真实的运行了一个 Linux 核。也就是说在 WSL2 在 Windows10 上提供了一个真实的 Linux 子系统,在这个子系统里面几乎可以执行任何 Linux 主机上可以执行的操作。同时 Windows 10 硬盘上的数据可以在 WSL 中直接访问到,这就给跨平台的测试和开发带来许多便利。
2.1 安装 WSL2
在以管理员身份运行的 powershell 中执行 2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启之后,在 Microsoft Store 搜索 Ubuntu 18.04 找到 Ubuntu 系统,当然 WSL 也支持一些其他的 Linux 发行版本。
安装之后可能需要一些设置。首先检查一下当前的 linux 分发版本是运行在 WSL 还是 WSL2,在 cmd 或者powershell 中执行
wsl -l -v
确定版本号 VERSION
1。如果 VERSION
是 1
,则可以通过 wsl --set-version <distro> <version>
来设置,如wsl --set-version Ubuntu-18.04 2
可以设置 Ubuntu-18.04 使用 WSL2。
2.2 安装工具链
上面安装了基于 WSL2 的 Ubuntu-18.04,但是还需要进一步安装用来开发的工具链。针对于 Ardupilot 和 PX4开发而言,这里的工具链主要涉及到本地编译和交叉编译的工具链。本地编译主要是用来编译仿真测试的代码,交叉编译主要是用来编译到嵌入式平台上,即编译到飞控硬件平台上。下面的步骤主要参考 Ardupilot 开发文档 3 和 PX4 开发文档 4。
-
本地编译:gcc
-
交叉编译:arm-none-eabi-gcc
这里可以分别用 Ardupilot 和 PX4 官方配置来安装。
# Ardupilot
cd path/to/ardupilot/Tools/environment_install
./install-prereqs-ubuntu.sh
# PX4
cd path/to/Firmware/Tools/setup
chmod u+x ubuntu.sh --no-sim-tools
./ubuntu.sh
上面安装 PX4 编译依赖项时使用了--no-sim-tools
选项来避免安装仿真工具,对于 Arudpilot 和 PX4 的安装依赖项还有一些可以自己设定,这里就不展开了。
3 配置VS Code
在安装VS Code后,在 VS Code 安装Remote Development
插件,然后通过 ctrl + shift + p
执行命令remote-WSL
来打开 WSL 工作空间。这个时候就可以在 VSCode 里面进行 Linux 下的程序开发此时在VS Code 中的launch.json
文件中会自动生产对应于 Linux 环境下的编译设置。除此之外,由于 Ardupilot/PX4 代码的主要编程语言为 C/C++ 和 Python,所以顺便安装上一些相关插件
- Python: Python (Microsoft)
- C/C++: C/C++ (Microsoft)
- CMake: CMake Tools (Microsoft)