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创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
随机推荐
- Android Studio的配置
第一次使用Android Studio时你应该知道的一切配置 - 生命壹号 - 博客园http://www.cnblogs.com/smyhvae/p/4390905.html
- 图片处理之-Bitmap.Config,jpeg压缩与大小
关于ARGB_8888.ALPHA_8.ARGB_4444.RGB_565的理解 A:透明度 R:红色 G:绿 B:蓝 Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4 ...
- 浅谈Oracle数据库性能优化的目标
Oracle性能优化保证了Oracle数据库的健壮性,为了保证Oracle数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略.从数据库性能优化的场景来区分,可以将性能优化分为如 ...
- C#扩展方法的理解 (转)
“扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.” 这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些 ...
- OCI_INVALID_HANDLE 什么原因
查看oci.dll应用版本和服务器版本是否一致
- mybatis动态sql语句问题
1.关于mybatis的insertintoselect命令未结束问题 添加: useGeneratedKeys="false" 官网的解释是 允许 JD ...
- Lua中强大的元方法__index详解
今天要来介绍比较好玩的内容:__index元方法 我是备胎,记得回头看看 咳咳,相信每一位女生都拥有或者不知不觉中拥有了一些备胎,啊!当然,又或许是成为过别人的备胎. 没有备胎的人,就不是完整的人生. ...
- String类(C++练习二)
字符串类(String),熟悉内存管理与拷贝控制 类定义 #include <iostream> //#include <cstring> using std::cout; u ...
- MIT6.828 虚拟地址转化为物理地址——二级分页
这个分页,主要是在mit6.828的lab2的背景下来说的. Mit6.828 Lab2:http://pdos.csail.mit.edu/6.828/2014/labs/lab2/ lab2主要讲 ...
- 加密传输SSL协议6_验证公钥
如上图所示,我怎么能确定我手里的公钥就是我心中的接收方的公钥呢?怎么防止被钓鱼呢? 解决的办法就是引入一个第三方,一个权威机构,一个我们都相信的机构. 验证公钥,Digital Certificate ...