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