Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9395728
  • 博文数量: 1747
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20060
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1747)

文章存档

2024年(23)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2019-03-21 20:32:17





操作说明


9轴传感器 
 (MEMS triple-axis gyro),  (triple-axis accelerometer), and (triple-axis magnetometer) 以及 MCU ATmega328 
  串口命令:
  
  "#c" - SET _c_alibration parameters. The available options are:
    [a|m|g|c|t] _a_ccelerometer, _m_agnetometer, _g_yro, magnetometerellipsoid_c_enter, magnetometerellipsoid_t_ransform
    [x|y|z] x,y or z 
    [m|M|X|Y|Z] _m_in or _M_ax (accel or magnetometer), X, Y, or Z of transform (magnetometerellipsoid_t_ransform)


  "#p" - 打印当前校准的数据.


  "#o" - 设置输出的数据和格式.
  
      // Streaming output
      "#o0" - 禁止连续输出
      "#o1" - 使能连续输出
      
      // 角度输出
      "#ob" - 二进制输出 (yaw/pitch/roll as binary float 共 12字节)
      "#ot" - 文本输出. 类似 ("#YPR=-142.28,-5.38,33.52\r\n").
      "#ox" - 以单位度输出角度
      以单位 (m/s^2) 输出加速度.
      以单位 rad/s^2 输出角速度.
      类似于 "#YPRAG=-142.28,-5.38,33.52,0.1,0.1,1.0,0.01,0.01,0.01\r\n"
     
      // 校准
      "#oc" - 进入校准输出模式, 第一个为加速计.
      "#on" - 在校准模式下, 进入下个sensor的校准. 第二个为磁力计, 第三个为陀螺仪.
      
      // 数据输出.
      "#osct" - 输出9轴上的校准数据, 文本模式.  共三行, 分别为 : acc, mag, gyr.
      "#osrt" - 输出9轴上的原始数据, 文本模式. 共三行, 分别为 : acc, mag, gyr.
      "#osbt" - 输出9轴上的原始和校准数据, 文本模式. 共六行, 先是 原始数据三行, 然后 校准数据三行
      "#oscb" - 输出9轴上的校准数据, 字节流模式. 为三个  3x3 float = 36 bytes. 书序为: acc x/y/z, mag x/y/z, gyr x/y/z.
      "#osrb" - 输出9轴上的原始数据, 字节流模式. 为三个  3x3 float = 36 bytes. 书序为: acc x/y/z, mag x/y/z, gyr x/y/z.
      "#osbb" - 输出9轴上的原始和校准数据, 字节流模式, 72字节, (先 RAW, 后 CALIBRATED)的组合.
      
      // 错误信息输出    
      "#oe0" - 禁止错误信息的输出.
      "#oe1" - 使能错误信息的输出.
    
    
  "#f" - 获取一个输出帧. 用于没有使能连续输出的模式下, 手动的求取一帧数据, 但是不能求取的频率不能超过50Hz.
  "#s" - 同步命令, xy为序列号, 返回 "#SYNCH\r\n"
          
          
  ("#C" and "#D" - 为蓝牙模块进行的预留命令.)
  输入时可以连写, 并且没有换行的必要, 如 发送"#ob#o1#s"
  LED的状态为 streaming output 是否enable的状态.  
  输出为小端字节序

切记: 这个板子为右手坐标系, X指向前, Y指向右, Z指向下. 所以整个板子要反着看.


先校准, 校准后的数据写入 Razor_AHRS.ino 的 "USER SETUP AREA" / "SENSOR CALIBRATION" 的部分.


标准校准程序


准备加速计校准. 原则为找出每个轴上的最大和最小地球引力值. 移动的时候要尽量的慢,因为我们仅需要纯重力.
串口输入 #oc, 进入校准模式.
看到输出 为 accel x,y,z (min/max) = -5.00/-1.00  25.00/29.00  225.00/232.00 类似样式.


X轴垂直向下. 保持静止, 然后发送 #oc 指令. 然后小心的向各个方向倾斜, 得到X的最大值(第二个值).
然后X轴垂直向上同样做一遍, 取X轴的最小值(第一个值).
同理, Y轴, Z轴同样做这个动作.


磁强计校准: 随心所欲地摇动电路板, 但远离引起磁变形的物件. 发送 #on. (推荐使用扩展的磁力校准方法.)
我们试着找出每个轴上地球磁场的最小和最大输出值. 地球的磁场以一定的角度指向北-上(南半球)或北-下(北半球)。这个角叫做倾斜角.
把X轴指向(前方)北方, 然后在东西轴线上旋转.从串口输出中找出X的最大值(第二个值).  再次向各个方向倾斜一点,直到数值不再变大。
同样X轴指向(后方)南方, 然后在东西轴线上旋转.从串口输出中找出X的最小值(第一个值).  再次向各个方向倾斜一点,直到数值不再变大。
对于磁强计,我们不需要在两次测量之间用#oc重置
对z轴(上/下)和y轴(左/右)执行相同的操作。
注意:板子绕着你想测量的轴旋转并不重要,只要它指向正确的方向。例如当你开始测量z轴时,x轴是向上还是向下,向左还是向右并不重要。
把最终或的结果放入razor_ars.ino中。




陀螺仪校准: 发送 #on, 从磁强计校准调到陀螺仪校准校准. 发送#oc重置
保持静止10秒, 模块自动收集并平均陀螺仪在所有三个轴上的噪声. 
可以看到输出类似于  gyro x,y,z (current/average) = -29.00/-27.98  102.00/100.51  -5.00/-5.85
然后将每对的第二个值放入razor_ars.ino中。


扩展的磁力校准. 标准磁强计校准只补偿硬铁误差,而扩展校准则补偿硬铁和软铁误差 (环境 ubuntu 14.04 32位,jdk-6u45-linux-i586.bin, processing-processing-1.2.1.zip(github下载, 安装ant, 在build目录下 ant run即可. ) )
把Sensor放到实际的应用环境中. 不在使用串口输出看数据的方式, 使用 Processing/Magnetometer_calibration (先安装EJML库)
试着旋转传感器,这样你就能覆盖所有的方向,这样你就能产生或多或少均匀覆盖球体的点。
按空格键, 可以看到控制台的输出, 可以放到 razor_ars.ino中。




程序更新步骤:
打开Razor_AHRS.ino, USB串口连接电脑, 切记连接DTR引脚 (此教用于自动复位, Arduino软件通过USB使用DTR线重置电路板).  
选择 tools, 选择 Arduino Pro or Pro Mini. Processor为(3.3v, 8mhz) w/ATmega328, 以及对应的串口, 编程器为 ArduinoISP, 编译上传.
连接到应用板上时, 切记不要接 DTR 引脚.



模块内部采用方向余弦矩阵(DCM)算法实现加速度计、磁强计和陀螺仪数据的融合. 该算法还处理了传感器的噪声和数值误差
磁强计在校准时具有一定的特殊性,不仅存在内部传感器的误差和噪声,而且还存在外部磁场的畸变。
良好的磁强计性能是最关键的, 在所有方向产生正确的航向-所以,如果你校准在一个扭曲的环境,你总是会有误差。
目前,校准补偿了硬铁和软铁的误差,其中铁随着传感器移动/旋转。在失真源不受传感器约束的情况下,对硬/软铁误差的补偿只能在一定程度上实现,需要相当复杂的自适应算法。
目前还没有计划在不久的将来增加对这类错误的补偿

阅读(9587) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~