当前位置:   article > 正文

ardupilot的编译过程_ardupilot自定义编译文件

ardupilot自定义编译文件

环境

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

下载源码

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

git clone --recurse-submodules git@github.com:ArduPilot/ardupilot.git

  • 1
  • 2
cd ardupilot
  • 1
git status
  • 1

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

git submodule update --init --recursive
  • 1

强制更新

git submodule update --init --recursive –force
  • 1

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

安装编译需要的包

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

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

执行

./install-prereqs-ubuntu.sh -y
  • 1

使环境生效

. ~/.profile
  • 1

配置waf编译功能

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

sudo chmod 777 waf
  • 1

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

./waf --version
  • 1

如果报错
‘python3\r’: No such file or directory
$'\r': command not found
则需要安装dos2unix并设置waf为linux脚本(从windows拷贝过来可能就有这个问题)

sudo apt install dos2unix
dos2unix waf
  • 1
  • 2

其它文件也是这样操作

安装交叉编译器

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

mkdir arm
  • 1

解压

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

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

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

或者修改/etc/profile文件

sudo gedit /etc/profile
  • 1

添加以下命令到最后一行

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

使环境生效

source ~/.profile
  • 1

查看arm-none-eabi-gcc版本

arm-none-eabi-gcc --version
  • 1

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

使用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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

./waf list_boards
  • 1

配置fmuv3需要的环境

./waf configure --board fmuv3
  • 1

以下是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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

编译copter

./waf copter
  • 1

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

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

在windows下编译

借鉴大佬

  1. 假如编译时报错you need to install empy with 'python -m pip install empy, 尝试
python -m pip install empy
  • 1
python3 -m pip install empy
  • 1

可能是两个python环境引起的

  1. 下载代码不全会引起以下错误
    failed to created ap_romfs_embedded.h
    task in 'dronecan' failed

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/454578
推荐阅读
相关标签
  

闽ICP备14008679号