调车流程 武汉大学定位组官网

调车说明

  • 实验目的

    标定CM1,CM2(含正反轮径系数),β,Ψ,α,L,SCALE(含正反积分系数)共10个参数,以达到定位精度。

1. 陀螺仪标定

在进行车标定之前,必须进行陀螺仪标定实验,确定陀螺仪的积分系数。陀螺仪的数据直接影响后面的实验结果。

积分系数和陀螺仪的转速相关,因此,我们需要测定不同速度下陀螺仪的输出,并拟合得到转速和积分系数的函数。具体的实验流程和实验设备参考这里

以VG910为例,我们可以得到这样的数据。更新后的积分系数就是原始积分系数*陀螺仪输出的转角/359.99

陀螺仪转动角速度(°/s)陀螺仪输出的转角(°)更新后的积分系数filted_rate
35362.85406515758.96969184.7739196
40362.63046315749.25852211.0400642
45362.34643615736.92306237.2341151
50362.16516115729.05018263.4615905
55361.94348115719.42248289.6303592
60361.6556415706.92137315.7091196
65361.43945315697.53224341.8137646
70361.02023315679.32527367.6801775
75360.71627815666.12432393.6113735

有了这些数据后,我们就可以二次曲线拟合陀螺仪积分系数与转速的关系啦。不过在实际处理的时候,考虑到运算速度等原因,我们并不是直接拟合一条以转速为自变量,积分系数为因变量的曲线,而是借助一个中间变量filted_rate来直接拟合。大家可以在代码中看看filted_rate到底是一个什么东西。

陀螺仪曲线

我们借助excel拟合得到filted_rate和积分系数的关系式。考虑到单片机计算量,我们在excel中算出filted_rate从0变化到1500时的积分系数,制成一张表格(写一个数组),放进代码中,用牺牲空间的方法换时间。当然,后面大家也可以直接将函数关系式带入解算,不过务必观察陀螺仪输出的角度是否准确。

另外,陀螺仪正转和反转的积分系数不同,但变化的趋势相同。也就是说两者的函数表达式是相同的,都是二次函数,只是二次函数前的系数不同。考虑到这一点,我们对参数进行微调。在标定结束后,我们会让陀螺仪在低速(30)、中速(75)和高速(120)下分别正转和反转,观察输出角度。

陀螺仪转动角速度(°/s)陀螺仪输出的转角(°)
30359.9079
75360.0508
120359.9715
-120-360.153
-75-359.765
-30-359.896

我们分别对正转和反转的三组角度取均值,与359.99做商,就得到了积分系数前的系数。

最后在代码中积分系数长这样

POS_SCALE = 0.999776814425075 * SCALE_TAB[(int)(filted_rate)];
NEG_SCALE = 0.99976596441063 * SCALE_TAB[(int)(-filted_rate)];

2. 直线参数标定

  • 2.1实验准备

  1. 小车安装

为了让小车沿着导轨走,需要机械组同学以一定安装要求把小车固定在导轨上。安装要求如下:

(1)稳定性。用于固定小车和滑块的两个夹子需要隔得远一些,否则两个夹子安装太近时,小车容易晃动。

(2)平行要求。保证车的边缘和导轨边缘平行。限位板可能有很大的加工误差,比如之前有一次孔打反了,小车的边缘和导轨就是倾斜的;

(3)使用原装钉子。

  1. 确定小车坐标系以及对应参数。小车坐标系由主控指定,码盘坐标系是码盘固有属性,我们规定当脉冲数为整的方向为轮子的正方向,码盘坐标系为右手系。

  2. 找机械组量模型,确定β,α,L理论值,以及小车装在轴承上后,旋转180°坐标改变量x,y。(相对小车坐标系)x,y是圆弧标定所需参数,这里一起问。随后把数据记录进表格

  3. 做好文件整理工作。新建一个文件夹,格式和内容如下

    – 日期-车

    ​ – 代码(注释掉圆弧解算部分)

    ​ – 必要文件(包括process.md、陀螺仪标定表格机械组参数表格直线标定表格圆弧标定表格

  • 2.2导轨直线度标定


实验目的

由于导轨可能存在弯曲,小车走的并不是直线,如果直线的曲率过大,将会对标定结果造成影响,因此,我们先确定导轨直线度,选出一段可用距离调车。可用距离d为长度大于180cm(对应码盘脉冲数大于30000),起点和终点角度差小于0.1°的一段距离。

实验流程

  1. 安装检查:
    • 滑块是否配套原装钉?除非原装钉长度不够,否则用原装钉
    • 打扫场地
    • 码盘和轮子是否着地?否,找机械组人员看看,抽去树脂垫板
    • 小车推动是否顺滑?否,导轨上油擦灰、添加滑块中滚珠或者更换滑块和导轨
  2. 代码检查:

    • 在代码中修改从量模型中获取的参数,接上码盘,保证码盘没有反接。
  3. 直线度检查:
    • 将小车从导轨起点推到终点,每隔36cm记录一次角度值,记录AngleDeg,选出可用距离

    • 选出可用距离后,需要再推一次小车,验证在该段AngleDeg变化是否小于0.1

    • 如果没有可用距离,需要重新拧导轨

  • 2.3联合标定


实验目的

确定CM1,CM2(含正反轮径系数),β,Ψ,确保小车能走准直线。

流程

  1. 检查小车坐标系、码盘坐标系和对应参数。注释掉圆弧更新部分。

  2. 在可用距离内来回推小车。比如从导轨标注有36的孔推到252对应的孔,打开watch栏中的Position_Now,记录下码盘1和码盘2的总脉冲数。reset,然后从252推回到36,再次记录数据。这样来回推四组之后,观察四次数据里,码盘1和码盘2在走同一方向时脉冲数波动是否在20个之内。比如下表中,四次y-方向码盘1的值最大为38076,最小值为38066;码盘2脉冲最大为38211,最小值为38202,脉冲变化均小于20,因此,我们认为y-的四组数据都是有效的。

    确保每一次数据都有效之后,我们喊机械组拆车,换另一个轴继续推。比如现在在标y轴,装完之后就标x轴。最终,我们得到如下表格。

实验初始数据y-y+x-x+
第一次38076-3814437909-37762
 38205-38339-3802138114
     
第二次38066-3814537900-37770
 38204-38340-3801038105
     
第三次38066-3814437909-37771
 38211-38346-3801438102
     
第四次38067-3813637900-37776
 38202-38341-3800738108
     
平均值38068.75-38142.2537904.5-37769.75
 38205.5-38341.5-3801338107.25
  1. 将数据取均值再取整,放入计算表格。
初值y负x负y正x正y负x正y正x负
走y轴,△x = 0    
Encoder138069-3814238069-38142
Encoder238206-3834238206-38342
△d =-216216-216216
走x轴,△y = 0    
Encoder137905-37770-3777037905
Encoder2-380133810738107-38013

中间的计算参数只需要关注

中间参数    
β的解一-2.358726662-2.359268425-2.35749178-2.36050328
β的解二2.354035862.3512941182.3522519482.353078007
mp_a_w0.0046908010.0079743070.005239830.007425278
CM1-解10.0040207540.0040240830.0040279010.004016951
CM2-解10.0040078260.0039958460.004002910.00400073
CM1-解2-0.002661902-0.007969801-0.00400691-0.0039872
CM2-解20.00532380400.0039819350.003971168

然后我们就可以得到结果啦,一般解1就是正确结果。

结果 
CM1-解10.004020754(正轮径系数),0.004024083(反轮径系数)
CM2-解10.00400291(正轮径系数),0.00400073(反轮径系数)
β-解1-2.358997537
mp0.006332554

正反轮径系数根据实际情况确定,如y负x负时,码盘1的脉冲数都为正,那么对应的0.004020754就是码盘1的正轮径系数。

CM1、CM2解算出来都是0.0040左右,mp,即Ψ解算出来小于0.01,如果数据不在这个范围内,就需要检查输入数据和β值。

根据实际情况在中间参数栏将β修改为β±PI(),比如实际中β应该是45°,而表格解算出来的β是-135°,那么β为β-PI()。这是因为三角函数运算具有多解,我们必须选出符合实际情况的解才能算出正确结果。

  1. 检验

    解算完成后,在导轨上将小车任意推动一段距离,检验小车输出的距离是否准确。重复三次精度都达到要求后就可以进行圆弧标定实验。


3. 圆弧参数标定


实验目的

标定α,L,使小车能走准曲线。实际上直线标定后小车就能走弧线了,但从理论上,圆弧解算精度更高。

实验准备

让机械组同学把小车固定在轴承上。轴承难装,大概会花半个小时。装完后需要检查是否有轴向偏移。

实验流程

  1. 检查程序中圆弧反算的部分,将K1 = arc_K1 - x ;K2 = arc_K2 - y处的x,y改成表格里的数值。随后,注释直线更新

  2. 选一块地势平坦的区域,让小车顺时针转180°(Angle_Deg的值为180),截图记录解算出来的α,L(对应代码中的msg_Angle_OO和msg_OO_Distance)的值。Angle_Deg约接近180,解算精度越高,一般希望精确到小数点后两位。推车的同学可以从小车远端慢慢推,注意不要有回程和抖动。reset,让小车逆时针旋转180°,截图记录。

    观察msg_OO_distance和msg_Angle_OO

  3. 推完四组之后,记录数据。确认数据波动不大的情况下,比如正转几次L的差值都在0.01以内,对正转组数据取平均,刷入代码,分别将小车顺时针和逆时针旋转180°,观察watch栏中Poistion的x,y值。如果解算的x,y值与真实x_real,y_real值误差较小,比如(x-x_real)/sqrt(x_real^2+y_real^2)<=0.1%,则认为标定结束。

    观察xy

额外说明

  1. 现在圆弧标定很费时间,因为实验值理论值总是不能很好吻合。可以看到,正转和反转算出来的L和α有明显不同。现在的做法要么是把一边尽量推准,如算出来x,y的误差都在千分之一,标定就完成了。另一种是定性分析。
  2. 3m长的jlink特别容易掉,最好换用无线jlink,或者检查keil和jlink兼容性。硬件一般不会出问题,如果是硬件接口松了,重接即可。