【声明】

此教程最开始取自于淘宝商家,后查找资料发现淘宝商家取自“怒飞垂云”的教程,但原教程中有些冗余和错误导致无法通过编译,我做更改整理后发出,如有疑问请各位一起讨论。

目录

一、建立飞控固件编译环境

1.1 获取飞控源码

1.2 使用powershell运行自动化配置文件

1.3 安装 future 库、python3

1.4 下载并安装 GCC 编译器

1.5 配置环境变量

1.6 切换到最新稳定版固件

1.7 更新子模块

二、基于waf编译APM飞控固件

2.1 配置飞控类型

2.2 编译飞控固件

2.3 烧写飞控固件


一、建立飞控固件编译环境

1.1 获取飞控源码

源码地址:GitHub - ArduPilot/ardupilot: ArduPlane, ArduCopter, ArduRover, ArduSub source

建议安装git,便于下载源码及代码管理。官网链接:https://git-scm.com/

安装好git后,打开git Bash

使用git clone命令拉取飞控代码,不详述,git使用方法请自行学习。

1.2 使用powershell运行自动化配置文件

右击开始按钮,或者Win + X,管理员运行Powershell

打开后,通过cd命令,转到.\ardupilot\Tools\environment_install目录

输入.\install然后按Tab键切换到install-prereqs-windows.ps1,回车运行。

下载过程可能有时需要挂VPN,可以先挂着下载绝大部分,如果出现问题,再试着运行一次或多次,仍不行,关掉梯子,再下载就应该下全了。

1.3 安装 future 库、python3

运行“setup x86_64.exe”,安装Cygwin64及其他环境

1.4 下载并安装 GCC 编译器

  • 下载链接:http://firmware.ardupilot.org/Tools/STM32-tools/gcc-arm-none-eabi-6-2017-q2-update-win32-sha2.exe
  • 下载后安装,注意,最后一步勾选“Add path to environment variable”

1.5 配置环境变量

若按1.4所说,软件默认生成的环境变量的话是不够的,因为gcc编译器安装后只添加了.\GNU Tools ARM Embedded\6 2017-q2-update\bin 这个path项,编译时会出现“Could not find the program ['arm-none-eabi-ar']”报错。

而arm-none-eabi-ar的路径在, .\GNU Tools ARM Embedded\6 2017-q2-update\arm-none-eabi\bin,所以环境变量还得手动加一条:

一路确认关闭后,重启电脑后生效(亲测),否则依然报错。

1.6 切换到最新稳定版固件

  • cd到ardupilot源码目录下
  • 输入:git tag   查看源代码中包含的所有tag
  • 按回车下一行,直到要的版本后,按 “q” 退出
  • 从多旋翼3.6.7 稳定版固件创建分支,分支名为:MyCopter3.6.7
git checkout -b MyCopter3.6.7 Copter-3.6.7
  • 从固定翼创建分支,则分支名为:MyCopter4.0.7
git checkout -b MyPlane4.0.7 ArduPlane-4.0.7

分支名可自行更换,任意稳定版的固件也可按需更换。

  • 注意:不要切换到“master(main)”分支,这里面是不稳定版本,并且大部分情况下,master分支的代码是无法编译通过

1.7 更新子模块

只要切换分支,就要更新子模块。

git submodule update --init --recursive

二、基于waf编译APM飞控固件

切换固件版本用的是“Git Bash”,而编译固件用的是 “Cygwin64”,不要搞混。

  • cd到ardupilot目录下

2.1 配置飞控类型

查看所有支持的飞控类型

./waf list_boards

将编译目标设置为fmuv3 版飞控
如果你的飞控是Pixhawk2.4.x,将这里的fmuv3改为fmuv2;如果飞控是Pixhawk4,就将这里的fmuv3改为Pixhawk4,以此类推

./waf configure --board fmuv3

2.2 编译飞控固件

如果是编译多旋翼固件,运行下面的命令
./waf copter如果是编译常规固定翼固件或者垂直起降固定翼固件(二者同一个固件)
./waf plane如果是编译直升机固件
./waf heli如果是编译无人车固件
./waf rover如果是编译潜水艇固件
./waf sub
  • 如果是编译外设固件(如 CAN 总线版本的 GPS ),运行下面的命令
./waf AP_Periph
  • 如果你上次编译好好的,突然就编译报错了,尝试如下命令,删除之前的编译缓存,这样下次编译时会从头编译
./waf distclean        //删除 “ardupilot/ 文件夹
  • 列出 waf 的所有命令及其使用方法
./waf -h

总结:

./waf list_boards                       看烧写的固件支持哪种飞控板;./waf configure --board XXX             根据板子类型进行配置;./waf copter    或    ./waf plane……     根据控制对象进行选择;若失败,可用    ./waf distclean          清除build文件夹,解决错误后重新进行

2.3 烧写飞控固件

  1. 安装地面站MissionPlanner;
  2. 编译的固件路径:./ardupilot/bulid/fmuv3/bin/arducopter.apj,使用mission planner进行固件烧写。


今天突发奇想,作死,想要更新GNU交叉编译软件来着,结果编译过程中各种报错,失败,还是老老实实用回17版的。。。希望各位不要翻车,不是每个最新的都好用,毕竟代码祖传。。。

[Pixhawk] ardupilot源码windows编译教程相关推荐

  1. 麻将服务端架设linux,湖南房卡麻将客户端/服务器端完整源码及编译教程

    客户端源码是基于cocos2d-x 3.10版本开发的.代码完整可编译.本人在WINDOWS平台下成功编译了android包并正常运行.源码里面也有服务器的源码(C++),经过再次鉴定应该是配套的,服 ...

  2. CM12同步源码及编译教程

    同时提供基于安卓5.0的MKL魔趣猪扒饭编译教程~ [玩机组出品]魔趣猪扒饭MKL50.1编译教程 http://www.oneplusbbs.com/forum.php?mod=viewthread ...

  3. obs源码 windows编译

    本文章主要记录obs源码在windows平台的编译过程,详细记录每个细节. obs源码编译 一.编译环境 1.Qt5 2.CEF Wrapper 3770 3.windows版本 CMake 4.Wi ...

  4. GOM 登录器源码及编译教程

    常见登录器引擎如下 BLUE/LEGEDN引擎      一般应用于1.70 1.76 复古 80英雄合击 85英雄合击版本 MirXM2引擎          一般应用于1.70 1.76 复古 8 ...

  5. CM源码同步编译教程

    一.操作系统 准备一个ubuntu安装镜像,我用的是12.10. 安装系统时请安装到30g以上的盘,最好就50g以上啦 安装教程不多说,网上很多教程,这里我推荐用自带的wubi工具安装,比较方便 用虚 ...

  6. Ardupilot源码编译(二)

    最新参考:Ardupilot开发环境搭建(Ubuntu18.04,20190407)   目前Ardupilot的master版本需要用waf编译 waf 是一个帮助构建和编译系统的框架,采用pyth ...

  7. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...

  8. [Android编译(二)] 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    1 前言 经过一周的奋战,终于从谷歌官网上下载最新的Android 6.0.1_r62源码,编译成功,并成功的刷入nexus6p,接着root完毕,现写下这篇博客记录一下实践过程. 2 简介 自己下载 ...

  9. 初步了解mac下C源码的编译过程

    初步了解mac下C源码的编译过程 参考: 请问Mac OS X (10.9.1)下创建和使用动态链接库的方法 cc.gcc.g++.CC的区别概括 - 今晚打酱油_ - 博客园 Linux 下 的 c ...

最新文章

  1. php ecos,php
  2. 每日一笑 | 各大互联网公司离职员工群名
  3. 以A表中的值快速更新B表中记录的方法
  4. SQL 交叉表存储过程
  5. 【LetCode算法修炼】Two Sum
  6. python爬虫项目描述怎么写_爬虫项目咋写,爬取什么样的数据可以作为项目写在简历上?...
  7. python 标量_标量 | NumPy 中文
  8. 新手先学java还是python_2018年,初学者学Java还是Python?统计数据给你答案
  9. 在存储过程中动态创建临时表
  10. VBA—EXCEL操作集合—05
  11. android电容触摸屏的驱动及其上层工作原理,电容触摸屏驱动原理
  12. 数据库添加字段sql语句
  13. 谷歌浏览器http请求之curl使用
  14. 腾讯+android+hotfix,发布到安卓平台报这个错误,xLua exception : xlua.access, no field __Hotfix0_Update...
  15. vue swiper click失效
  16. Filco圣手二代双模蓝牙机械键盘|科大讯飞鼠标连接Mac方法
  17. Gabor特征码分析
  18. Kali linux下拓实N95外置网卡驱动安装教程
  19. 【GPT-4】立即停止训练比 GPT-4 更强的模型,至少六个月!马斯克、图灵奖得主等数千 AI 专家紧急呼吁
  20. windows apache2.4 基于主机名的虚拟主机配置

热门文章

  1. 风控违约场景如何预测,来看看这份常见的三种模型实现算法对比
  2. OSChina 周一乱弹 ——怎么用微微一石更表白!
  3. 万字HTTP学习笔记
  4. “App开发者需要更新此App以在此iOS版本上正常工作 ” 解决方法
  5. 海蜘蛛软路由linux安装教程,软路由安装设置教程【详细步骤】-太平洋IT百科
  6. 1007 Maximum Subsequence Sum (25 分) java 题解
  7. Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;
  8. MySQL数据库删除大量数据的方式
  9. 【学习笔记】算法101--数学(二)2.3篇
  10. excel批量将数字转为文本格式