Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >APM开发阅读

APM开发阅读

作者头像
云深无际
发布于 2022-02-09 03:40:36
发布于 2022-02-09 03:40:36
1.5K00
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

我为什么要读APM的源码,一是为了学习,想知道飞控和大型项目是如何组织的。二是为了移植的需要,项目的需要。额,最近几年少儿编程大火,然后这些厂子也首当其冲的发布了一些产品,但是都是空心杯的产品,然后带来的问题就是动力不足,接着就是这个东西本身的扩展性不够。很多任务需要IO或者图像识别的帮助。

所以我就在想,APM裁剪版的飞控+空心杯电机+树莓派zero(可以是别的)可以使用ROS,Mavlink等东西组装一个无人机。

只是一种想法而已,目前没有可以参考的东西,我也在做。

F4的飞控,百来块钱

10块钱的电调

小桨叶

移植成功以后,其实使用便宜的MCU也可以,只是想利用已经比较完善的生态罢了,我觉得300多一个无刷无人机也可以,将高性能引入少儿教育,怎么看都是一件比较有趣的事情。

如果非要便宜的话,ESP8266+MPU6050+4个MOS管,一共也不要20块钱

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://ardupilot.org/dev/docs/ap-peripheral-landing-page.html

AP_Periph 是 ArduPilot Peripheral 的缩写,即。基于现有 ArduPilot 自动驾驶仪代码的 ArduPilot 外围设备。它采用了 ArduPilot 的外围设备驱动程序库,并使其适应运行在独立的外围设备上,这些外围设备通过 CAN、MSP 或其他外围总线协议与主飞控通信。我有点没看懂,好像是就单主控+单传感器的设置方案。

代码的位置再Tools里面:

位置在此

也可以使用浏览器打开,看一些英文的注释

这个APM可以使用make编译,也可以使用一个叫WAF的东西编译:其实就是Python的一个包,没有使用新的语言什么的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://waf.io/book/

先走马观花的看下来,细节遇到再看:

这里是所有的构建环境的安装

Ubuntu下开发是个正经事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Tools/environment_install/install-prereqs-ubuntu.sh -y

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. ~/.profile

生效

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf clean

构建后可以使用这个清楚编译的垃圾文件

接下来看看编译步骤

先把库拉下来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone --recursive https://github.com/ArduPilot/ardupilot.git
cd ardupilot

waf应该在APM的根目录下运行,而且是每次都应该这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf configure --board CubeBlack
./waf copter

第一个命令一般就使用一次,选择你要编译的硬件

二是编译一个直升飞机出来

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf configure --board skyviper-v2450
./waf copter

如果更改的话就是这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf configure --board bebop --static
./waf copter

这个是编译一共二进制的固件,使用一共参数,静态构建

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf list_boards

获取支持的板子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./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

出现了这么多的板子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf configure --board satl            
#软件在环模拟器
./waf configure --board satl --debug    
#带调试符号的软件在环模拟器

未来我们主要看这个东西,在机器上面仿真

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./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

可以构建出来的项目类型。

清理构建:

命令clean和distclean都可以用来清理 构建,第一个会保留配置的信息,只是清理板子的对象,第二个比较彻底,要啥没啥。一般来说别来执行这东西,因为现在大多数的编译系统都是增量编译的,就是编译前会检查哪些内容需要重新编译,如果不需要就用以前的。学过c语言都知道源码到成品,是需要经过链接的,其实构建系统就是在搞链接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf --targets bin/arducopter --upload

上传参数可以将构建好的二进制文件传到板子上面(PIxhawk和Linux的板子)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf configure --board <board> --rsync-dest <destination>

语法是这样的

对Linux板子来说,还需要配置IP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf configure --board navio2 --rsync-dest root@192.168.1.2:/
./waf --target bin/arducopter --upload

连起来就是这样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf copter
DESTDIR=/my/temporary/location ./waf install

还可以进行安装,到某个临时目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Quad frame of ArduCopter
./waf --targets bin/arducopter

# unit test of our math functions
./waf --targets tests/test_math

只构建一个二进制文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./waf -h

可以输出所有的帮助文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Configure the Linux board
./waf configure --board=linux

用于配置板子的类型选项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Build programs from bin group
./waf

# Waf also accepts '-j' option to parallelize the build.
./waf -j8

waf = waf build,就使用waf就行。

j是并行编译,j8(jb)真快。一般来讲,不用你寡b的设置这个东西,自动就是加j了,如果想更快,哥们儿牛逼。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /usr/lib/ccache
sudo ln -s /usr/bin/ccache arm-none-eabi-g++
sudo ln -s /usr/bin/ccache arm-none-eabi-gcc

还可以使用ccahe,大幅度的提升编译的速度,你要是真搞开发,就不用用Windows,或者是远程搞个Linux。

干说不练怎么行?我正好有WLS2,安装一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git@github.com:yunswj/ardupilot.git

切到自己的分支,搞了下我的GT没配置,算球了。

构建完出现的文件类型

飞控板+Linux主机,这个Linux主机上面就是运行的我下面写的这个库,控制飞控板的运行.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://dronekit-python.readthedocs.io/en/latest/

DroneKit-Python 2.x 可帮助您为无人机创建强大的应用程序。这些应用程序在无人机的配套计算机上运行,并通过执行计算密集型和需要低延迟链接(例如计算机视觉)的任务来增强自动驾驶仪。我记得是Python2 的库,emmmm

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/dronekit/dronekit-python

GitHub地址

一些简单的描述

链接的时候,使用串口就行

或是这样,PC->Pi ,Pi->RC

需要上面的电台,距离会很远。

APM的代码只有对直升飞机详细解释的,四轴的没有,有的看就行。

就是这个Copter

这个构架图真好

其实读源码除了对细节的把控,更需要的是宏观的理解。

硬件就是PX4和Linux的变形板

因为任务多,所以引入了操作系统

这是我们在意的东西,飞行代码

  1. 抽象的硬件层
  2. 共享的库,传感器,EKF算法
  3. 一些特殊的代码

飞控这么多的信息,比如电池电量,姿态等,使用MAVLink协议发送,接着就是给高层的应用,地面站以及你加了机载的计算机。

对上面的一个总结

这是对上面层的

目录里面的这个文件是说明当前的所有依赖

这个目录里面的文件归所有的顶层项目共有

这是核心库

传感器

其它库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd $ARDUPILOT_HOME # the top-level of an AruPilot repository
./waf configure --board=Pixhawk1
./waf build --target examples/INS_generic --upload

编译的命令 ,先转到库的位置

然后编译,后面是编译的东西+上传

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd $ARDUPILOT_HOME
./waf list | grep 'examples'

这样是可以输出所有的例子,就用了个grep的函数

如果你安装了MAVProxy,就可以执行下面的命令来看输出了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://ardupilot.org/mavproxy/docs/getting_started/download_and_installation.html#mavproxy-downloadinstallwindows

安装位置在此

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mavproxy.py --setup --master /dev/serial/by-id/usb-3D_Robotics_PX4_FMU_v2.x_0-if00

执行的命令如上,使用 –setup 选项将 mavproxy 置于原始串口模式,而不是已处理的 MAVLink 模式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd $ARDUPILOT_HOME # the top-level of an AruPilot repository
./waf configure --board sitl
./waf build --target examples/RCProtocolDecoder

在环仿真用这个,这个是RC协议解码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./build/sitl/examples/RCProtocolDecoder -M quad -C

开始运行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
drone无人机操作教程_无人机怎么起飞教程
DroneKit-Python是一个用于控制无人机的Python库。DroneKit提供了用于控制无人机的API,其代码独立于飞控,单独运行在机载电脑(Companion Computer)或其他设备之上,通过串口或无线的方式经MAVLink协议与飞控板通信。除了DroneKit-Python以外,还有DroneKit-Android以及DroneKit-Cloud的API供不同的开发者使用。
全栈程序员站长
2022/09/21
3K0
无人机wifi图传模块(手机远程控制)
首先你得会用APM或Pixhawk飞控、电机、电调、舵机、GPS、电池 装好一台多旋翼或固定翼无人机、或无人车/船,不会装的话就去百度,这个不在本贴的介绍范围。 至于图传、数传电台、增程设备、OSD这些 就不需要了,后面的方案就是 可以替代这些功能的。
全栈程序员站长
2022/08/01
4.8K1
无人机wifi图传模块(手机远程控制)
APM飞控若干整理
ArduPilot 源代码包括AP-HAL 硬件抽象层,使得将代码移植到各种自动驾驶板变得相对容易。
云深无际
2021/12/01
2.1K0
APM飞控若干整理
MAVLink是什么?
昨天在看matlab的文档的时候看到了一个关于无人机的计算包,眼前一亮,不过是比较通用的协议MAVLink(翻译过来就是无人机Link,后面这个Link不太哈翻译,反正就是链接的意思)
云深无际
2021/08/20
9670
细数无人机的幕后功臣:开源飞控流派全揭秘
无人机能被快速普及,很大程度上是得益于开源飞控的发展,因为困扰着无人机发展的关键设备是自动驾驶仪。那么,开源飞控是什么?又是如何发展过来的? 在纷繁复杂的无人机产品中,四旋翼飞行器以其结构简单、使用方
机器人网
2018/04/24
5.2K0
细数无人机的幕后功臣:开源飞控流派全揭秘
drone无人机操作_无人机怎么平稳降落
摘要:本文基于dronekit在实体无人机上实现最基本的起飞和降落,测试了这一过程中速度的变化以及起落位置的偏移。
全栈程序员站长
2022/09/21
1.1K0
mavlink协议解析_jlink 串口
MAVLink是为微型飞行器MAV(Micro Air Vehicle)设计的(LGPL)开源的通讯协议。是无人飞行器和地面站(Ground Control Station ,GCS)之间,以及无人飞行器之间通讯常用的协议。APM、PIXHAWK飞控,Mission Planner、QGroundControl地面站均使用了MAVLink协议进行通讯。
全栈程序员站长
2022/08/03
4.1K0
mavlink协议解析_jlink 串口
从开源代码入场无人机学术研究到商业化市场的全路径指南-优雅草卓伊凡
优雅草卓伊凡在这里告诉大家,如果真的要开始进入无人机领域,我们需要一步步开始研究。目前先去看看开源无人机代码是尤为重要的,首先学习下目前已经取得的成就和成果,对无人机技术有初步的知悉。
卓伊凡
2025/06/17
1860
[AC]技术贴:开源飞控那些事
原文链接:https://blog.csdn.net/humanking7/article/details/85335364
祥知道
2020/03/10
2.4K0
Intel神经网络计算棒2代(NCS预热篇上)
面板社区的老哥手上多一块计算棒,我申请来了,准备做一些小玩意儿。因为计算棒害没有到我手,这篇文章算预热,简单的认识一下,收集一些资料。
云深无际
2022/02/08
1.2K0
Intel神经网络计算棒2代(NCS预热篇上)
开源飞控StarryPilot无人机的制作
近年来无人机应用市场日趋火热,无人机开始被应用在多个领域之中,比如航拍,植保,运输,安防等。随着应用场景的增加,对于无人机的大脑一飞控,的性能和功能要求也变得越来越高。国内具有一大批优质的无人机企业,如DJI,零度,亿航,极飞等。可是这些企业的飞控系统并不开源,而开源飞控市场却基本被国外所垄断,比如APM, PX4, Autoquad等,国内目前还没有一款开源飞控可以与之抗衡,在国际上也没有令人熟知的“国产”开源飞控。 正是基于开发出一款世界知名的中国的开源飞控,我从2016年开始了StarryPilot这个项目。飞控的设计理念是一款轻量,功能强大的飞控,主要面向科研和无人机行业应用,使得无人机开发技术更加普及,也更容易将无人机技术应用到各个行业。
刘盼
2018/08/16
2K0
开源飞控StarryPilot无人机的制作
Dji Onboard SDK(边缘高性能SDK)
按照我的理解就是,行业机器本身就性能强劲,完全可以放一个高性能的计算机上去,比如Intel的NPC,英伟达的TX2等,进行空中的实时处理。这个过程中势必要使用一个中间层连接记载计算机和无人机,这个中间层就是我们的重点。
云深无际
2021/12/20
3.5K0
Dji Onboard SDK(边缘高性能SDK)
​无人机监控:视觉导航技术在农业监测中的革新
随着科技的发展和创新,无人机监控技术在农业监测中的应用正日益受到关注。传统的农业监测方式通常依赖于人工勘察或传统的航空摄影,但这些方法存在着成本高、效率低、覆盖范围有限等问题。而无人机监控技术的出现,为农业监测带来了新的解决方案。
二一年冬末
2024/04/21
4720
极客DIY:使用树莓派制作一架四轴无人机
如果你想DIY一台属于自己的无人机,那么接下来可以阅读这篇文章,阅读完毕之后也许对你会有启发。 这个项目主要用到的零件主要来自Erle Robotics(一个使用Linux系统的开源四轴飞行器项目)。本文的作者并不为这家公司工作,如果对该场景感兴趣也可以关注以树莓派相关联的基础项目,例如 Dexter Industries以及PiBOT。 另外在一些相关网站上也更多的教程可以观看。在今年 Robotics是向爱好者提供了相对廉价而又易上手的一次机会,可以在芯片上烧录程序同时可以不断添加新硬件,这一切可以
FB客服
2018/02/07
4.2K0
极客DIY:使用树莓派制作一架四轴无人机
Dronebridge-基于ESP32的廉价数字遥测
因为我系列的文章还在做一些前期的规划,所以现在主要以一些领域的研究成果以及开源的代码的解读为主。
云深无际
2022/09/06
1.3K0
Dronebridge-基于ESP32的廉价数字遥测
盘点国外互联网最受欢迎的6个Jetson NANO项目
过去,人工智能(AI)由于训练AI模型需要大量的处理能力而被委托给强大的计算机。因此,AI应用在规模上受到限制。在创建较小的AI项目时,存在一些解决方法,但大多数情况下,精度和速度与计算能力和价格相互矛盾。
GPUS Lady
2023/05/30
3.1K0
盘点国外互联网最受欢迎的6个Jetson NANO项目
软件公司进军无人机领域的战略指南与生态合作全景-优雅草卓伊凡
那么找到细分领域我们应该如何开始真正加入无人机开发的梯队呢,卓伊凡看了大疆创新加入成为认证开发者也是非常不错的选择。
卓伊凡
2025/06/20
910
Raspberry Pi Pico是个啥(云体验)+云点灯
首先,这个芯片不知道有没有卖的。如果有就可以自己打板,diy。因为齐全用了ARM的处理器,不知道一些高级特性是不是支持。
云深无际
2021/01/27
2.3K0
Raspberry Pi Pico是个啥(云体验)+云点灯
bootefi分多大合适_boot from network
转载:http://blog.csdn.net/olei_oleitao/article/details/7919307
全栈程序员站长
2022/09/21
1.2K0
Crazyradio PA 2.4 GHz USB dongle
最近在看无人机方面的源码,准备看俩套,分别是Crazy和PX4的。后者略微有些复杂,但是干货太干,准备之后看。这里就先看Crazy的。
云深无际
2021/05/20
1.1K0
推荐阅读
相关推荐
drone无人机操作教程_无人机怎么起飞教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验