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
HMC5883BMP085 按理说挺有发展前景的 但我不知道为什么没有下文
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层的初始化 通常不需要关心它的具体实现
比上面简单建立目录\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(10);//必须延时 不然上面的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