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
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架构的
从官网下载安装包

在/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文件:
- apj文件:这些是“ArduPilot JSON”固件,其中包含可以由ArduPilot兼容的地面站软件加载的固件。
- hex文件:这些是Intel十六进制格式的固件,用于使用DFU加载工具加载。这些用于不带有ArduPilot兼容引导加载程序的电路板。
- _with_bl.hex文件:这些是内置引导加载程序的十六进制文件的变体。它们可用于使用DFU加载工具一步安装引导加载程序和ArduPilot车辆固件。
相关文章:
ardupilot的编译过程
环境 树莓派4b ubuntu20.04 git 2.25.1 python3.8.10 pixhawk2.4.8 下载源码 (已经配置好git环境和ssh) git clone --recurse-submodules gitgithub.com:ArduPilot/ardupilot.gitcd ardupilotgit status使用git status检查是否下载完整 如果不完整&a…...
Unity中Shader实现模板测试Stencil
文章目录 前言一、UI中的遮罩1、Mask ——> 模板测试2、RectMask2D ——> UNITY_UI_CLIP_RECT 二、模板缓冲区Stencil一般是和Pass平行的部分,Pass部分写的是颜色缓冲区Stencil:Comp(比较操作)Pass(模版缓冲区的更新) 三、实际使用1、在…...
多线程与并发
多线程与高并发 线程的创建方式1.继承Thread类 重写run方法2.实现Runnable接口 重写run方法3. 实现Callable 重写call方法,配合FutureTask 线程的使用1.线程的状态1.1. 传统操作系统层面5种状态1.2.Java中给线程准备的6种状态 2.线程的常用方法2.1 获取当前线程2.2 …...
手写call方法
Function.prototype.myCallfunction (context,args) {console.log(arguments)//context 表示call里面的第一个参数也就是需要改变this指向的那个对象。//this表示这个方法//把这个方法挂到需要改变指向的对象身上调用,相当于把this指向了这个对象身上,从…...
基于FPGA的图像直方图统计实现,包括tb测试文件和MATLAB辅助验证
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、图像数据传输 4.2、直方图统计算法 4.3、时序控制和电路设计 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescal…...
数据库:Hive转Presto(一)
本人因为工作原因,经常使用hive以及presto,一般是编写hive完成工作,服务器原因,presto会跑的更快一些,所以工作的时候会使用presto验证结果,所以就要频繁hive转presto,为了方便,我用…...
Responder
环境准备 操作系统:Kali Linux工具:responder,john,evil-winrm PS:输入以下命令解决靶场环境无法打开问题 #echo "<靶机IP> unika.htb">>/etc/hostsresponder工具 [Kali 官网] 手册地址:https://www.kali.org/tools/responder/ 摘要: This package c…...
基于下垂控制的并网逆变器控制MATLAB仿真模型
微❤关注“电气仔推送”获得资料(专享优惠) 主要模块: 建议使用MATLAB2021b及以上版本打开! 功率计算模块、下垂控制模块、电压电流双环控制模块、虚拟阻抗压降模块 扰动设置: 在0.5秒到2秒始端设置0.25Hz的电网频…...
android获取RAM、CPU频率、系统版本、CPU核数
参考链接: https://www.jianshu.com/p/76d68d13c475 https://github.com/matthewYang92/Themis 获取CPU频率、核数的逻辑,是通过文件操作实现的,Android是基于Linux系统的,所以该方式针对不同的手机都是可靠的操作方式。 RAM&am…...
微信小程序python+nodejs+php+springboot+vue 讲座预约系统
讲座预约管理系统的用户是系统最根本使用者,按需要分析系统包括用户:学生、管理员。 管理员通过后台的登录页面,选择管理员权限后进行登录,管理员的权限包括学生信息管理和文章公告管理。讲座公告管理,添加讲座公告信息…...
嵌入式开发笔记:STM32的外设GPIO知识学习
GPIO简介: • GPIO ( General Purpose Input Output )通用输入输出口 • 可配置为 8 种输入输出模式 • 引脚电平: 0V~3.3V ,部分引脚可容忍 5V (如舵机和驱动直流电机) • 输出模式下可控制端口…...
单片机论文参考:2、基于单片机的病床呼叫系统设计
任务要求 设计病床呼叫系统,使用3X8矩阵开关分别模拟医院病房与病床位数,当某开关按下时,系统显示呼叫的病房与病床、呼叫的时间。处理完毕可清除该呼叫显示记录。同时有数个病床呼叫时,可以循环呼叫记录显示。 摘要 病房呼叫系统…...
【C语言】结构体实现位段!位段有何作用?
本篇文章目录 1. 声明位段2. 位段的内存分配3. 位段的跨平台问题4.位段的应用5. 如何解决位段的跨平台问题? 1. 声明位段 位段的声明和结构是类似的,有两个不同: 位段的成员必须是 int、unsigned int 或 char。位段的成员名后边有一个冒号和…...
msvcp140为什么会丢失?msvcp140.dll丢失的解决方法
msvcp140.dll 是一个动态链接库文件,它包含了 C 运行时库的一些函数和类,例如全局对象、异常处理、内存管理、文件操作等。它是 Visual Studio 2015 及以上版本中的一部分,用于支持 C 应用程序的运行。如果 msvcp140.dll 丢失或损坏ÿ…...
Ingress Controller
什么是 Ingress Controller ? 在云原生生态中,通常来讲,入口控制器( Ingress Controller )是 Kubernetes 中的一个关键组件,用于管理入口资源对象。 Ingress 资源对象用于定义来自外网的 HTTP 和 HTTPS 规则,以控制进…...
离线安装 K3S
一、前言 简要记录一下离线环境下 K3S 的搭建,版本为 v1.23.17k3s1,使用外部数据库 MySQL 作元数据存储,禁用默认组件(coredns、servicelb、traefik、local-storage、metrics-server)并使用 Helm 单独安装(…...
Error系列-常见异常问题解决方案以及系统指令总结
前情提要 作为一名开发,日常工作中会遇到很多报错的情况,希望我的总结可以帮助到小伙伴们~日常工作中也会遇到需要部署项目或者登陆linux系统操作的情况,很多时候需要查找一些命令,于是我决定,要把我日常经常用到的一…...
c 各种例子
1. struct{ int code; float cost; }item,*ptrst; ptrst&item; prtst->code3451 // ptrst->codeitem.code(*ptrst).code 结构与union 的运算符相同,不同的是union 在同一时间内只能存储成员中的一种,其他的成员不真实。 2. c的修饰符声…...
Flowable主要子流程介绍
1. 内嵌子流程 (1)说明 内嵌子流程又叫嵌入式子流程,它是一个可以包含其它活动、分支、事件,等的活动。我们通常意义上说的子流程通常就是指的内嵌子流程,它表现为将一个流程(子流程)定…...
通过插件去除Kotlin混淆去除 @Metadata标记
在Kotlin中,Metadata是指描述Kotlin类的元数据。它包含了关于类的属性、函数、注解和其他信息的描述。Metadata的作用主要有以下几个方面: 反射:Metadata可以用于在运行时获取类的信息,包括类的名称、属性、函数等。通过反射&…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
手动给中文分词和 直接用神经网络RNN做有什么区别
手动分词和基于神经网络(如 RNN)的自动分词在原理、实现方式和效果上有显著差异,以下是核心对比: 1. 实现原理对比 对比维度手动分词(规则 / 词典驱动)神经网络 RNN 分词(数据驱动)…...
湖北理元理律师事务所:债务清偿方案中的法律技术革新
文/金融法律研究组 当前债务服务市场存在结构性矛盾:债权人追求快速回款,债务人需要喘息空间。湖北理元理律师事务所通过创新法律技术,在《企业破产法》《民法典》框架下构建梯度清偿模型,实现多方利益平衡。 一、个人债务优化的…...
