12663浏览
查看: 12663|回复: 2

Arduino驱动AHRS AH-100B军工级惯性导航模块

[复制链接]
本帖最后由 lauren 于 2014-7-20 21:05 编辑

最近有一个偶然的机会,有一位小伙伴提供了他的惯性导航模块,让我帮他接入Arduino并且将进行协议解析将惯性导航数据通过WIFI推送到电脑上。说实话还挺好奇所谓的军工级惯性导航模块性能与我们常见的100+块的10 DoF传感器差异有多大。貌似就内置了卡尔曼滤波,并拥有不错的防水性能。

今天刚刚跑通,不得不吐槽下,国内的这类产品虽然价格高的离谱,淘宝价要1800RMB,但是不论从用户手册到二次开发的源码资源和周边的技术文档。我都只能说和taobao上10块的开发板没什么区别。文档和用户附加值实在太差了。我相信就算是技术牛人,也希望供应商提供更完善的资源,减少自己的开发成本。别说我们这些弱弱的用户了。开发资源实在太匮乏了。上位机源码是只有VC平台上的不说,居然还只是局部代码。。。=。难道是我玩开源的东西太多了...

不过不管怎么说,今天使用Arduino抽到了AH-100B惯性导航的数据,心情还不错(关键太久没玩这种高端传感器了,皮痒)。性能还没有和普通10轴做过对比,对比测试方法也还没构思好(希望有识之士能给点意见)。

晒晒收获....

Arduino驱动AHRS AH-100B军工级惯性导航模块图1

产品图

Arduino驱动AHRS AH-100B军工级惯性导航模块图2

模糊连线图,就是Arduino Uno Rx接惯性导航TX,然后USB推送到上位机解析好的数据。
Arduino驱动AHRS AH-100B军工级惯性导航模块图3

Arduino驱动AHRS AH-100B军工级惯性导航模块图4


附件有AH-100B的通讯协议,上图是解析出来的数据。那协议本身还挺标准,就是花时间。我最好,copy到平台上就能用,可惜不现实o(╯□╰)o
#include <Metro.h> //Include Metro library

#include "Datalink.h"
#include "Datalink.c"
#include "queue.h"
#include "queue.c"

INT16U qLength = COM1_REC_QUEUE_LENGTH;
INT8U *pQueueBuffer;

STRUCT_QUEUE_CTRL sComRxQueueCtrl;
INT8U ComRxQueueBuf[COM1_REC_QUEUE_LENGTH];

Metro printMetro = Metro(20);

void setup(){
  Serial.begin(115200);
  Serial.println("Debug");
  
  pQueueBuffer = ComRxQueueBuf;
  QueueInit(&sComRxQueueCtrl,pQueueBuffer,COM1_REC_QUEUE_LENGTH);
  Serial.println("Finish Initialization");
}

INT8U queuePostEventState = 0;

void loop(){
  
  DataLinkRead();
  if(printMetro.check())  Debugger();
  
}

void Debugger(){
  

//  Serial.print("Command Counter: ");
//  Serial.println(getCommandCounter());

/****************** Debug Datalink Info ***************
  Serial.print("DL_CLASS_MINIAHRS: ");
  Serial.println(DataLink.Class);
  Serial.print("DL_ID: ");
  Serial.println(DataLink.ID);
  Serial.print("DL_Length: ");
  Serial.println(DataLink.Length);*/
  
/****************** Debug AHRS Eular Data ***************
  Serial.print("AHRS Roll: ");
  Serial.print(DataLink.AhrsRoll);
  Serial.print("  Pitch: ");
  Serial.print(DataLink.AhrsPitch);
  Serial.print("  Heading: ");
  Serial.println(DataLink.AhrsHeading);*/
  
  
/****************** Debug AHRS Gyro Data ***************
  Serial.print("Gyro X: ");
  Serial.print(DataLink.GyroX);
  Serial.print("  Y: ");
  Serial.print(DataLink.GyroY);
  Serial.print("  Z: ");
  Serial.print(DataLink.GyroZ);*/
  
/****************** Debug AHRS Accelerometer Data ****************/
  Serial.print("Accelerometer X: ");
  Serial.print(DataLink.AccelX);
  Serial.print("  Y: ");
  Serial.print(DataLink.AccelY);
  Serial.print("  Z: ");
  Serial.println(DataLink.AccelZ);
  
}

void serialEvent(){
  INT8U data = Serial.read();
  queuePostEventState = QueuePost(&sComRxQueueCtrl,pQueueBuffer,data);
//  Serial.write(queuePostEventState);
  if(queuePostEventState == Q_OPT_FAILED){
//    Serial.println("Queue Operation Failed...");
//    Serial.println("Flush Queue...");  
    QueueFlush(&sComRxQueueCtrl,pQueueBuffer);
  }
  else{
//    Serial.println("Queue Operation Succeed...");
  }
}

以上是基于AH-100B供应商提供的数据解析包基础上,编辑的Arduino部分源码,不复杂,但是略微调整过一些他们官方解析包的内容,花了点时间。


如果还有小伙伴也在玩AH-100B,欢迎评论分享。下一步打算研究下基于惯性导航的机器人路径绘制(应朋友的需求o(╯□╰)o)。

AHRS Protocol Specification.pdf

112.02 KB, 下载次数: 3463

AH-100B通讯协议

AH100B用户手册.pdf

580.15 KB, 下载次数: 3880

hkabaga  学徒

发表于 2016-3-5 17:11:19

Good work
I want to ask where to find Datalink and queue files , I search google but I dont' find them, Please help ?
回复

使用道具 举报

lauren  高级技师
 楼主|

发表于 2016-7-25 13:17:33

hkabaga 发表于 2016-3-5 17:11
Good work
I want to ask where to find Datalink and queue files , I search google but I dont' find t ...

Though it's really late. But just share the library via Baidu Yun. Please check the link below:
http://pan.baidu.com/share/link? ... 59&uk=658304257
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail