ardupilot的编译过程

环境

树莓派4b
ubuntu20.04
git 2.25.1
python3.8.10
pixhawk2.4.8

下载源码

(已经配置好git环境和ssh)

git clone --recurse-submodules [email protected]:ArduPilot/ardupilot.git

cd ardupilot
git status

使用git status检查是否下载完整
如果不完整,则更新下载
一般更新

git submodule update --init --recursive

强制更新

git submodule update --init --recursive –force

检查根目录下的modules文件夹下的源码是否下载完整,否则更新下载

安装编译需要的包

在ardupilot根目录下操作
设置安装文件成可执行文件

cd Tools/environment_install/
sudo chmod 777 install-prereqs-ubuntu.sh

执行

install-prereqs-ubuntu.sh -y

使环境生效

. ~/.profile

配置waf编译功能

在根目录下就又waf文件,该文件依赖python3环境运行
设置waf文件为可执行文件

sudo chmod 777 waf

查看waf版本,有版本号输出则已经配置成功

./waf --version

如果报错
‘python3\r’: No such file or directory
则需要安装dos2unix并设置waf为linux脚本

sudo apt install dos2unix
dos2unix waf

安装交叉编译器

pixhawk使用基于 ARM 架构的 STM32 芯片,ubuntu自带的 gcc 编译器是针对 X86 架构的,所以需要安装 gcc-arm-none-eabi
使用命令 uname -a 可知树莓派是基于aarch64架构的
从官网下载安装包
ardupilot的编译过程_第1张图片
在/usr/local下新建arm文件夹,使用cp或mv命令拷贝压缩包到arm下

mkdir arm

解压

tar -xjvf gcc-arm-none-eabi-10.3-2021.10-aarch64-linux.tar.bz2

命令行直接配置到profile文件中

exportline="export PATH=/usr/local/arm/gcc-arm-none-eabi-10.3-2021.10/bin:\$PATH"

或者修改/etc/profile文件

sudo gedit /etc/profile

添加以下命令到最后一行

export PATH=$PATH:/usr/local/arm/gcc-arm-none-eabi-10.3-2021.10/bin

使环境生效

source ~/.profile

查看arm-none-eabi-gcc版本

arm-none-eabi-gcc --version

失败则重启树莓派,不行就查看一下配置

使用waf编译源码

在编译固件之前需要选择目标平台,ArduPilot支持多种不同的硬件平台,包括Pixhawk、APM等,根据piaxhawk版本配置编译环境, pixhawk2.4.8为fmuv3

./waf configure --board bebop --static # Bebop or Bebop2
./waf configure --board edge           # emlid edge
./waf configure --board fmuv3          # 3DR Pixhawk 2 boards
./waf configure --board navio2         # emlid navio2
./waf configure --board Pixhawk1       # Pixhawk1
./waf configure --board CubeBlack      # Hex/ProfiCNC Cube Black (formerly known as Pixhawk 2.1)
./waf configure --board Pixracer       # Pixracer
./waf configure --board skyviper-v2450 # SkyRocket's SkyViper GPS drone using ChibiOS
./waf configure --board sitl           # software-in-the-loop simulator
./waf configure --board sitl --debug   # software-in-the-loop simulator with debug symbols

使用以下命令可以在ArduPilot上获得受支持的板的列表

./waf list_boards

配置fmuv3需要的环境

./waf configure --board fmuv3

以下是ardupilot支持的飞控固件

./waf copter                            # All multirotor types
./waf heli                              # Helicopter types
./waf plane                             # Fixed wing airplanes including VTOL
./waf rover                             # Ground-based rovers and surface boats
./waf sub                               # ROV and other submarines
./waf antennatracker                    # Antenna trackers

编译copter

./waf copter

编译成功
在这里插入图片描述

编译结果会在根目录下的build文件夹中生成
可以在build/目标平台目录下找到生成的固件文件


ArduPilot的固件是APJ文件和HEX文件:

  1. apj文件:这些是“ArduPilot JSON”固件,其中包含可以由ArduPilot兼容的地面站软件加载的固件。
  2. hex文件:这些是Intel十六进制格式的固件,用于使用DFU加载工具加载。这些用于不带有ArduPilot兼容引导加载程序的电路板。
  3. _with_bl.hex文件:这些是内置引导加载程序的十六进制文件的变体。它们可用于使用DFU加载工具一步安装引导加载程序和ArduPilot车辆固件。

你可能感兴趣的:(pixhawk,c++,ardupilot,pixhawk)