APM代码学习笔记1
libraries目录
传感器
AP_InertialSensor 惯性导航传感器 就是陀螺仪加速计
AP_Baro 气压计 居然支持BMP085 在我印象中APM一直用高端的MS5611
AP_Compass 指南针
AP_GPS GPS定位
还有些飞行姿态的
AP_ARHS 姿态解算 输出Roll Yaw Pitch
AP_AttitudeControl 姿态控制 APM飞这么稳就靠它了
硬件抽象层
AP_HAL 头文件
AP_HAL_AVR APM2.X时代的板子 ATMega2560处理器
AP_HAL_FLYMAPLE 好几年前中国一个团队出的基于Maple(STM32版Arduino)飞控
从硬件规格上STM32RET6 ITG3205 ADXL345
HMC5883 BMP085 按理说挺有发展前景 但不知怎么没了下文
AP_HAL_Linux 基于嵌入式Linux的飞控 有树莓派加扩展板 uavio+ 国内的raspilot
BeagleBoard加扩展板Erle Brain 2
也有商品飞行器Parrot Bebop Drone
应该是目前最有发展前景的平台。
AP_HAL_PX4 Pixhawk 目前主推的平台 用料足 价格贵 不亚于上面Linux的那种 性价比不高
AP_HAL_SITL 模拟器 不用买硬件直接在电脑上模拟
了解示例代码GPS_AUTO_test
- 定义hal变量作为引用
- 代码粗糙缺乏注释
- setup() loop()函数 和arduino一样
hal引用
每一个用到HAL层的文件都需要hal变量 它获得AP_HAL::HAL对象,提供所有硬件特性的调用,包括打印消息到控制台,睡眠,I2C和SPI总线
实际的hal实现都在AP_HAL_XXX库中
常用hal方法有(类似arduino)
- hal.console->printf() hal.console->printf_P() 打印消息到控制台(_P在avr上能节约内存)
- hal.scheduler->millis() hal.scheduler->micros() 启动时间
- hal.scheduler->delay() hal.scheduler->delay_microseconds() 延迟指定时间
- hal.gpio->pinMode() hal.gpio->read() hal.gpio->write() 设置 读写gpio
- hal.i2c I2C访问
- hal.spi SPI访问
AP_HAL_MAIN 宏
做一些HAL层的初始化 通常不用关心它的具体实现
Hello World
比上面的还简单 建立目录\libraries\AP_HelloWorld\examples\HelloWorld_test
建立三个文件
HelloWorld_test.cpp
#include <AP_HAL/AP_HAL.h> const AP_HAL::HAL& hal = AP_HAL::get_HAL(); void setup()
{
hal.console->println("Hello World");
} void loop()
{
hal.scheduler->delay();//必须延时 不然上面的println都不会执行
} AP_HAL_MAIN();
make.inc
LIBRARIES += AP_HelloWorld
只编译当前库
Makefile
include ../../../../mk/apm.mk
可以从GPS_AUTO_test复制
开始编译
make linux -j4
运行
sudo ./HelloWorld_test.elf
最后分享下WalkAnt大神的源码分析 http://blog.sina.com.cn/s/blog_402c071e0102v59r.html
APM代码学习笔记1的更多相关文章
- APM代码学习笔记2:编译过程
make编译 所有位置的Makefile 引用的都是/mk/apm.mk target.mk 设置CONFIG_HAL_BOARD 例如linux就是HAL_BOARD_LINUX environ.m ...
- APM代码学习笔记3:执行过程
以Linux平台ArduPlane为例 \ArduPlane\Plane.cpp 定义Plane类 继承自AP_HAL::HAL::Callbacks ,获取hal对象. \ArduPlane\Ard ...
- Learning Memory-guided Normality代码学习笔记
Learning Memory-guided Normality代码学习笔记 记忆模块核心 Memory部分的核心在于以下定义Memory类的部分. class Memory(nn.Module): ...
- DeepLearnToolbox-master代码学习笔记
卷积神经网络(CNN)博大精深,网上资料浩如烟海,让初学者无从下手.笔者以为,学习编程还是从代码实例入们最好.目前,学习CNN最好的代码实例就是,DeepLearnToolbox-master,不用装 ...
- C# 好代码学习笔记(1):文件操作、读取文件、Debug/Trace 类、Conditional条件编译、CLS
目录 1,文件操作 2,读取文件 3,Debug .Trace类 4,条件编译 5,MethodImpl 特性 5,CLSCompliantAttribute 6,必要时自定义类型别名 目录: 1,文 ...
- 1.JAVA中使用JNI调用C++代码学习笔记
Java 之JNI编程1.什么是JNI? JNI:(Java Natibe Inetrface)缩写. 2.为什么要学习JNI? Java 是跨平台的语言,但是在有些时候仍然是有需要调用本地代码 ( ...
- boost timer代码学习笔记
socket连接中需要判断超时 所以这几天看了看boost中计时器的文档和示例 一共有五个例子 从简单的同步等待到异步调用超时处理 先看第一个例子 // timer1.cpp: 定义控制台应用程序的入 ...
- cc代码学习笔记1
#define #define INT32 int #define INT8 char #define CHAR char #define SSHORT signed short #define IN ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
随机推荐
- VB.NET数据库编程基础教程
关键词:作者罗姗 众所周知,VB.NET自身并不具备对数据库进行操作的功能,它对数据库的处理是通过.NET FrameWork SDK中面向数据库编程的类库和微软的MDAC来实现的.其中,ADO. ...
- javascript中对象的不同创建方法
javascript中的对象与一般的面向对象的程序设计语言(c++,Java等)不同,甚至很少有人说它是面向对象的程序设计语言,因为它没有类.javaScript只有对象,不是类的实例.javascr ...
- Maven 打包到Tomcat下
1.在tomcat/conf下tomcat-users.xml 文件下添加 <role rolename="manager"/> <user usern ...
- Linux学习之awk命令
一. AWK 说明 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能 ...
- [转]前端CSS规范整理
一.文件规范 1.文件均归档至约定的目录中. 具体要求通过豆瓣的CSS规范进行讲解: 所有的CSS分为两大类:通用类和业务类.通用的CSS文件,放在如下目录中: 基本样式库 /css/core 通用 ...
- Javascript中的attribute和property分析
attribute和property这两个单词,都有属性的意思,attribute有属性.特质的意思,property则有性质,性能的意思. 首先需要明确的是,在规范中,读取和设置attribute的 ...
- javascript外部ファイル
function myFunction() { document.getElementById("demo").innerHTML = "Paragraph cha ...
- DMVsinSQLServer -- 备
/*************************************************************************************************** ...
- docker 私有仓库镜像的存储位置
docker 私有仓库的镜像 是存储在5739360d1030 registry "docker-registry" 3 days ago Up 28 hours 0.0.0.0: ...
- iOS6和iOS7代码的适配(2)——status bar
用Xcode5运行一下应用,第一个看到的就是status bar的变化.在iOS6中,status bar是系统在处理,应用中不需要考虑这部分,iOS7之后是应用在处理,每个ViewControlle ...