陀螺仪标定 武汉大学定位组官网

陀螺仪标定

目的

陀螺仪采集到的数据会随转速改变,需要测定陀螺仪输出和转速之间的关系,即积分系数。

原理

陀螺仪直接输出的是AD值,我们需要对AD值进行转换才能得到当前的角速度,进而积分得到角度。因此,我们定义积分系数

\[Scale = \frac{AD}{\omega}\]

实验发现,积分系数与角速度相关,需要在不同转速下测定积分系数与角速度的关系。在代码中,我们引入中间变量filted_rate

\[filted\_rate = AD*Sample\_Time\]

根据不同转速下测定积分系数与filted_rate的关系,并用二次曲线拟合,得到

\[Scale = A*filted\_rate^2 + B*filted\_rate + C\]

单片机运算能力不足,不能实时根据角速度计算积分系数,故我们采取牺牲空间的查表法,保证filted_rate从0~1500变化时都有对应的积分系数。于是有:

\[AD = Scale*\omega\\ filted\_rate = AD*Sample\_Time\\ \theta = /sum filted\_rate/Scale\]

实验证明,陀螺仪正转和反转时积分系数也有不同,但变化趋势相同。为了减少实验量,我们定义Pos_Scale和Neg_Scale,即

\[Pos\_Scale = k_pos*Scale\\ Neg\_Scale = k_neg*Scale\]

得到Scale后我们让陀螺仪在某角速度下顺时针和逆时针旋转一圈(现有仪器只能让陀螺仪转359.9995207°),得到陀螺仪输出的转角\(Angle_Pos\)和\(Angle_Neg\),则系数为

\[k_pos = Angle_Pos/359.9995207\\ k_neg = Angle_Neg/359.9995207\]

标定仪器

  1. 陀螺仪标定专用转台带elmo

  2. 陀螺仪及采集板

  3. 驱动elmo所需的顶板、开关板、线等

  4. 无线jlink

  5. 小电池*2

  6. 匝带 、 胶枪

标定流程

1. 代码检查

  1. 注释掉程序中位于positioncount.h中的scaleTab,将积分系数设置为任意常量
  2. 检查数据传输方式。VG910用的SPI发送陀螺仪数据,VG103PT用的是USART

2. 安装检查

  1. 注意不要让机械组同学安装陀螺仪时损伤顶板
  2. 检查放置转台的地面是否平坦
  3. 无线jlink和电池是否用匝带和胶枪固定在转台上,不会给陀螺仪施加额外的力

3. 接线检查

  1. 检查电机使能后是否有轴向间隙
  2. 检查接线。先用上位机驱动elmo转一圈,检查连线、转速、转角是否正常。注意实际转速和驱动转速不能差太多,速度波动要在3%以内。
  3. 检查电池电压是否充足
  4. 检查jlink是否有警告,否则可能出现陀螺仪转了半圈数据丢包情况

4. 标定

  1. 将Position中的AngleDeg加入监视,开启周期更新窗口;
  2. 打开elmo上位机,使电机以30°/s,60°/s,120°/s转动±360°(实际是359.99度),观察角度值是否逼近±360°,误差在0.1°以内代表数据正常,结束标定;
  3. 否则,使电机按照表格中填写的数值转动。由于间隙的存在,我们需要让陀螺仪每次都转过间隙角,即开始和结束时都朝着同一方向把陀螺仪怼一下。电机转动之前保持陀螺仪静止3s,保证陀螺仪没有零漂;
  4. 将angleDeg的值填入表格中,继续下一组角速度实验,reset清空当前角度值
  5. 每个速度做一遍,做完10个速度检查一下数据。使用VG910时角度一定会有明显的减小,VG103PT则基本平稳。VG910做到150°/s即可,VG103PT做到300°/s;
  6. 绘制角速度和积分系数的图,使用二次曲线拟合,若R²小于0.97,剔除明显偏离曲线的数据,并在该角速度下重新做实验;
  7. 当R²满足要求,计算filtedRate,拟合filtedRate和积分系数的关系,使filtedRate从0到1500变化,计算积分系数,然后导出,填入代码中的ScaleTab。这里给出积分系数
  8. 确定系数。让陀螺仪在低(30)、中(75)、高(120)速下顺时针或者逆时针转360度,记录陀螺仪输出角度。分别对正转和反转的三组角度取均值,与359.99做商,就得到了积分系数前的系数。