• 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车辆固件。

  • 相关阅读:
    C/C++自动 21 级(含卓越 211)《软件技术基础》期末大作业
    【SpringBoot】68、SpringBoot解决HttpServletRequest中输入流不能重复读的问题
    Linux操作系统之进程间通信
    HTML5七夕情人节表白结婚邀请函网页制作(HTML+CSS+JavaScript)
    JavaEE初阶:网络原理之TCP/IP
    08-SDRAM:汇总
    面试经典 150 题 5 —(双指针)— 15. 三数之和
    Vue2+ElementUI表单、Form组件的封装
    关于 头歌平台 复制限制解除的方法
    Kafka Log存储解析以及索引机制
  • 原文地址:https://blog.csdn.net/u014220146/article/details/133068197