Ardupilot源码编译(二)
最新参考:Ardupilot开发环境搭建(Ubuntu18.04,20190407)
目前Ardupilot的master版本需要用waf编译
waf 是一个帮助构建和编译系统的框架,采用python语言编写
Waf详细用法看这本书:
https://waf.io/book/#_projects_and_commands
官方给的用Waf编译Ardupilot的方法:
https://github.com/ArduPilot/ardupilot/blob/master/BUILD.md
克隆仓库下来:git clone https://github.com/ArduPilot/ardupilot.git进入仓库中:cd ardupilot更新响应的模块:git submodule update --init --recursive
# 这步执行一次就行了,就是装些必要的包运行脚本文件:Tools/scripts/install-prereqs-ubuntu.sh -y使配置直接生效:. ~/.profile
进入相应的目录:cd ArduCopter开始编译四旋翼:make px4-v2
19/11/29日发现master版不支持make编译了,下了Copter-3.5版用make编译会出错
使用Waf编译Ardupilot
cd ardupilot
./waf configure --board CubeBlack //选择你飞控型号
./waf copter //执行编译copter./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
CubeBlack是你要的板型,使用./waf configure --board px4-v2
命令时发现命令已经改了,要编译px4-v2
需要将他变成Pixhawk1
才行
./waf configure --board Pixhawk1
./waf copter
执行上面两条开始编译
目前支持的飞控板
./waf configure --board bebop --static # Bebop or Bebop2
./waf configure --board edge # emlid edge
./waf configure --board fmuv3 # Pixhawk2/Cube using ChibiOS
./waf configure --board fmuv4 # Pixracer using ChibiOS
./waf configure --board navio2 # emlid navio2
./waf configure --board Pixhawk1 # Pixhawk1
./waf configure --board CubeBlack # Pixhawk2(二代)
./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
上传
./waf --targets bin/arducopter --upload
对于Linux主板,首先需要配置要上传到的主板的IP。这是在配置阶段完成的:
./waf configure --board < board > --rsync-dest < destination >
以下命令给出了一个具体的例子(电路板和目标IP将根据使用的电路板而改变):
./waf configure --board navio2 --rsync-dest root@192.168.1.2:/
./waf --target bin / arducopter --upload
清除编译结果
命令./waf clean
,./waf distclean
可用于清除构建生成的对象。第一个保留configure信息,仅清理当前板的对象。第二个清理每个板的所有内容,包括保存的configure信息。
通常不需要清洁构建并且不鼓励。我们进行增量构建,将构建时间缩短了几个数量级
用clean会保留编译后的文件夹,但里面内容没了,distclean直接将build文件夹都清了
选择上传或清除编译的固件
固件编译后的结果在ardupilot/build文件夹里,当你编译了很多固件要清除或上传其中一个时要再用下面命令选择一下
./waf configure --board 你要的板型
列出可用板卡
以下命令可以在ArduPilot上获得支持的电路板列表
./waf list_boards
高级用法
Waf编译系统由命令组成。
例如,下面的命令(configure)用于使用此特定编译使用的所有选项配置编译。
#Configure the Linux board
./waf configure --board=linux
于是,为了编译,发布了“编译”命令,因此waf build
。这是默认命令,所以调用waf就足够了:
# Build programs from bin group
./waf# Waf also accepts '-j' option to parallelize the build.
./waf -j8
默认情况下,waf会尝试将编译自动并行化到所有处理器,因此通常不需要-j选项,除非您使用的是icecc(因此您需要更大的值)或者您不希望使用编译对您的机器施加压力。
Program groups:程序组
程序组用于表示一类程序。它们可用于编译某个类的所有程序,而无需指定每个程序。两个组可能重叠,除非两个组都是主要组。换句话说,程序可以属于多个组,但只能属于一个主组。
有一个特殊的组,称为“all”,包括所有程序。
Main groups:主组
主要组形成所有程序的分区。除了逻辑上分离程序外,它们还定义了它们的编译位置。
主组是:
- bin:主要的二进制文件,即ardupilot的主要产品 – the vehicles and Antenna Tracker(车辆和天线跟踪器)
- tools
- examples:显示某些库如何使用或简单测试其操作的程序
- benchmarks:在配置期间需要
--enable-benchmarkmarks
- tests:基本上是单元测试,以确保更改不会破坏系统的逻辑
所有的编译文件都放在build/<board>/
下面,<board>
表示在你配置时所选择的板子或者平台。每个主程序组都有一个文件夹,其名称直接位于build/<board>/
下。
因此,程序将储存在build/<board>/<main_group>/
中,其中<main_group>
是程序所属的主要组。比如:对于一个linux编译,arduplane属于主要组“bin”,将被存储在build/linux/bin/arduplane
.
Main product groups:主要产品组
这些是ardupilot的主要产品组。它们包含所代表产品的程序。目前只有“copter”组有多个程序 - 每种帧类型一个。
主要产品组是:
- antennatracker
- copter
- plane
- rover
Building a program group:编译一个程序组
Ardupilot为waf添加了一个名叫--program-group
的选项,它接收你想要它编译的组作为参数。对于一个编译命令,如果你没有传递任何--targets
或--program-group
,这个bin
组会被默认选择。这个选项--program-group
可以被传递多次。
# Group bin is the default one
./waf# Build all vehicles and Antenna Tracker
./waf --program-group bin# Build all benchmarks and tests
./waf --program-group benchmarks --program-group tests
Shortcut for program group:程序组的快捷方式
为了更少的输入字符,你可以使用组的名字作为命令给waf。举例:
# Build all vehicles and Antenna Tracker
./waf bin# Build all examples
./waf examples# Build arducopter binaries
./waf copter
Building a specific program:编译一个特定的程序
为了编译一个特定的程序,你只需要将它相对于build/<board>/
的路径传递给--targets
.举例:
# Build arducopter for quad frame
./waf --targets bin/arducopter# Build vectors unit test
./waf --targets tests/test_vectors
Checking:检查
check
命令编译所有程序,然后执行相关的测试。在该上下文中,相关测试是来自“测试”组的程序,该程序使以下陈述之一成立:
- 这是自上次清理或克隆项目以来第一次编译测试
- 该程序必须重新编译(例如,由于代码或依赖项的修改)
- 上一次检查中的测试程序失败了
也就是说,只有必要的时候才运行测试。如果你希望waf运行所有的测试,你可以使用--alltests
或快捷命令check-all
任一选项。
举例:
# Build everything and run relevant tests
./waf check# Build everything and run all tests
./waf check --alltests# Build everything and run all tests
./waf check-all
Debugging:调试
可以通过选项--debug
传递给configure
命令。这将设置编译器标志以在二进制文件中存储调试信息,以便您可以将它们与gdb
一起使用。
使用SITL时,该选项可能会派上用场。
Build-system warppers:构建系统包装器
根树上的waf
二进制文件实际上是真实waf
的包装器,它保存在自己的子模块中。
可以通过./modules/waf/waf-light
直接调用后者,或者如果你喜欢在./waf
上键入waf
,则使用别名。
alias waf="<ardupilot-directory>/modules/waf/waf-light"
还有一个名为Makefile.waf
的make
包装器。
您可以使用make -f Makefile.waf
帮助获取有关如何使用它的说明。
Command line help:命令行帮助
您可以使用waf --help
查看有关waf内置的命令和选项的信息,以及对ardupilot添加的命令和选项的一些快速帮助。
参考:
Ardupilot waf编译过程分析
Ardupilot源码编译–Ubuntu
PixHawk飞控和Mission Planner地面站安装调试
Ardupilot源码编译(二)相关推荐
- [Pixhawk] ardupilot源码windows编译教程
[声明] 此教程最开始取自于淘宝商家,后查找资料发现淘宝商家取自"怒飞垂云"的教程,但原教程中有些冗余和错误导致无法通过编译,我做更改整理后发出,如有疑问请各位一起讨论. 目录 一 ...
- Docker源码编译(二)
这是根据自己项目修改而记录的过程,对他人不具有参考性 一.按照以下教程,搭建docker编译环境:Docker源码编译和开发环境搭建 二.由于我对docker源码的修改导入了mysql数据库的包,如下 ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- Debian、Ubuntu源码编译制作安装包(二)
在<Debian.Ubuntu源码编译制作安装包(一)>文章中描述了dpkg基本制作安装包过程,本篇文章描述如何增加patch及解决出错问题. 章节预览: 5. 增加patch 6. 修改 ...
- android 全志a10(2.3.4)开发二(linux内核编译及源码编译)
<android 全志a10(2.3.4)开发二>文档详细可下载地址:http://www.a10bbs.com/forum.php?mod=viewthread&tid=504& ...
- Slicer学习笔记(四十二)slicer c++源码编译
Slicer学习笔记(四十二)slicer c++源码编译 1.cmake生成项目 2.编译失败的原因汇总 2.1.下载代码失败 之前在windows下编译slicer,没有做笔记. 后面再次编译还会 ...
- Spark入门教程(二)Spark2.2源码编译及安装配置
Spark2.2源码下载 点此进入官网下载地址: 下载Spark spark官网下载截图 //下载好后用传输工具传输到我们的linux上并解压缩 tar -zxvf spark-2.2.0.tgz 源 ...
- Ubuntu 16.04 源码编译安装GPU tensorflow(二)
如前一篇在1.4.0版本的Tensorflow上安裝Tensorflow Object Detection API,在验证测试时出現serialized_options=None问题.需安装高版本Te ...
- Cura二次开发之源码编译
Cura源码编译 1.Cura内部连接关系 2.CuraEngine源码编译 2.1Protobuf源码编译 三级目录 3.Cura源码编译 4.Error解决方案 1.Cura内部连接关系 2.Cu ...
最新文章
- 关于软件开发环境的思考
- PACBIO:经历9件大事,终获一致认可?
- 关于从基于Mult-Org的视图中查询数据的问题(转)
- Python安装hmmlearn
- VisualSVN Server以及TortoiseSVN客户端的配置和使用方法
- java socket 抓包_linux下用socket的抓包程序
- Lua中ipairs和pairs的区别详解
- java引用队列_java的强引用、软引用、弱引用、幻象引用,引用队列总结
- vue 实现截图并获取截图的坐标_超好用的“电影截图”获取方式
- Ansible配置文件
- sap 用户权限表_系统管理(BASIS)之 SAP用户权限介绍
- oracle8i odac for c,ODAC for delphi
- mybatis plus(包米豆)json存储Mysql数据库
- 大数据MBA 通过大数据实现与分析驱动企业决策与转型
- jetson nano运行darknet_ros的环境配置
- 苹果CMSV10最新初恋视界手机版模板
- 工控主板定制ARM9选择思路
- 科技版《碟中谍》:偷鸡摸狗的科技巨头们
- c语言计算时钟的夹角不用if,C语言学习笔记——计算时钟的夹角
- 最最最基础的C++代码
热门文章
- 惯量辨识c语言程序设计,基于模糊自适应PID控制策略的PCC水轮机调速器-水利水电工程专业论文.docx...
- 使用管道完成父子进程间通信
- PageAdmin CMS 环境配置要求
- SAP EBS相关(个人用)
- python作业——随机生成不重复的20以内加法算式
- mysql cluster 缩容_分布式常见问题分析及解决方案
- 2012您IE了吗?筹备JNCIE之感!
- Unity2D案例学习——背包系统制作(ScriptableObject)
- error C2017: 非法的转义序列
- office2019 图目录_中世纪最壮观挂毯(法国昂热城堡珍藏):圣经启示录【连载目录】...