打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
APM开发阅读

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

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

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

F4的飞控,百来块钱

10块钱的电调

小桨叶

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

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

https://ardupilot.org/dev/docs/ap-peripheral-landing-page.html

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

代码的位置再Tools里面:

位置在此

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

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

https://waf.io/book/

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

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

Ubuntu下开发是个正经事情:

Tools/environment_install/install-prereqs-ubuntu.sh -y

安装

. ~/.profile

生效

./waf clean

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

接下来看看编译步骤

先把库拉下来:

git clone --recursive https://github.com/ArduPilot/ardupilot.gitcd ardupilot

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

./waf configure --board CubeBlack./waf copter

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

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

./waf configure --board skyviper-v2450./waf copter

如果更改的话就是这样

./waf configure --board bebop --static./waf copter

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

./waf list_boards

获取支持的板子

./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

出现了这么多的板子

./waf configure --board satl            #软件在环模拟器./waf configure --board satl --debug    #带调试符号的软件在环模拟器

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

./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语言都知道源码到成品,是需要经过链接的,其实构建系统就是在搞链接。

./waf --targets bin/arducopter --upload

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

./waf configure --board <board> --rsync-dest <destination>

语法是这样的

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

./waf configure --board navio2 --rsync-dest root@192.168.1.2:/./waf --target bin/arducopter --upload

连起来就是这样。

./waf copterDESTDIR=/my/temporary/location ./waf install

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

# Quad frame of ArduCopter./waf --targets bin/arducopter
# unit test of our math functions./waf --targets tests/test_math

只构建一个二进制文件

./waf -h

可以输出所有的帮助文档

# Configure the Linux board./waf configure --board=linux

用于配置板子的类型选项

# 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了,如果想更快,哥们儿牛逼。

cd /usr/lib/ccachesudo ln -s /usr/bin/ccache arm-none-eabi-g++sudo ln -s /usr/bin/ccache arm-none-eabi-gcc

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

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

git@github.com:yunswj/ardupilot.git

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

构建完出现的文件类型

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

https://dronekit-python.readthedocs.io/en/latest/

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

https://github.com/dronekit/dronekit-python

GitHub地址

一些简单的描述

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

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

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

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

就是这个Copter

这个构架图真好

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

硬件就是PX4和Linux的变形板

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

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

  1. 抽象的硬件层

  2. 共享的库,传感器,EKF算法

  3. 一些特殊的代码

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

对上面的一个总结

这是对上面层的

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

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

这是核心库

传感器

其它库

cd $ARDUPILOT_HOME # the top-level of an AruPilot repository./waf configure --board=Pixhawk1./waf build --target examples/INS_generic --upload

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

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

cd $ARDUPILOT_HOME./waf list | grep 'examples'

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

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

https://ardupilot.org/mavproxy/docs/getting_started/download_and_installation.html#mavproxy-downloadinstallwindows

安装位置在此

mavproxy.py --setup --master /dev/serial/by-id/usb-3D_Robotics_PX4_FMU_v2.x_0-if00

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

cd $ARDUPILOT_HOME # the top-level of an AruPilot repository./waf configure --board sitl./waf build --target examples/RCProtocolDecoder

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

./build/sitl/examples/RCProtocolDecoder -M quad -C

开始运行。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PX4(Pixhawk)和Audupilot(APM)的区别与联系
开源无人机项目盘点
不能不知道的几大无人机飞控系统
源码笔记:APM代码基本结构
飞控APM还是Pixhawk?
PIXHAWK飞控概览
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服