如果这篇博客帮助到你,那么希望你今天开心~
CC BY 4.0 (除特别声明或转载文章外)
调车说明
实验目的
标定CM1,CM2(含正反轮径系数),β,Ψ,α,L,SCALE(含正反积分系数)共10个参数,以达到定位精度。
1. 陀螺仪标定
在进行车标定之前,必须进行陀螺仪标定实验,确定陀螺仪的积分系数。陀螺仪的数据直接影响后面的实验结果。
积分系数和陀螺仪的转速相关,因此,我们需要测定不同速度下陀螺仪的输出,并拟合得到转速和积分系数的函数。具体的实验流程和实验设备参考这里
以VG910为例,我们可以得到这样的数据。更新后的积分系数就是原始积分系数*陀螺仪输出的转角/359.99
陀螺仪转动角速度(°/s) | 陀螺仪输出的转角(°) | 更新后的积分系数 | filted_rate |
---|---|---|---|
35 | 362.854065 | 15758.96969 | 184.7739196 |
40 | 362.630463 | 15749.25852 | 211.0400642 |
45 | 362.346436 | 15736.92306 | 237.2341151 |
50 | 362.165161 | 15729.05018 | 263.4615905 |
55 | 361.943481 | 15719.42248 | 289.6303592 |
60 | 361.65564 | 15706.92137 | 315.7091196 |
65 | 361.439453 | 15697.53224 | 341.8137646 |
70 | 361.020233 | 15679.32527 | 367.6801775 |
75 | 360.716278 | 15666.12432 | 393.6113735 |
有了这些数据后,我们就可以二次曲线拟合陀螺仪积分系数与转速的关系啦。不过在实际处理的时候,考虑到运算速度等原因,我们并不是直接拟合一条以转速为自变量,积分系数为因变量的曲线,而是借助一个中间变量filted_rate来直接拟合。大家可以在代码中看看filted_rate到底是一个什么东西。
我们借助excel拟合得到filted_rate和积分系数的关系式。考虑到单片机计算量,我们在excel中算出filted_rate从0变化到1500时的积分系数,制成一张表格(写一个数组),放进代码中,用牺牲空间的方法换时间。当然,后面大家也可以直接将函数关系式带入解算,不过务必观察陀螺仪输出的角度是否准确。
另外,陀螺仪正转和反转的积分系数不同,但变化的趋势相同。也就是说两者的函数表达式是相同的,都是二次函数,只是二次函数前的系数不同。考虑到这一点,我们对参数进行微调。在标定结束后,我们会让陀螺仪在低速(30)、中速(75)和高速(120)下分别正转和反转,观察输出角度。
陀螺仪转动角速度(°/s) | 陀螺仪输出的转角(°) |
---|---|
30 | 359.9079 |
75 | 360.0508 |
120 | 359.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)稳定性。用于固定小车和滑块的两个夹子需要隔得远一些,否则两个夹子安装太近时,小车容易晃动。
(2)平行要求。保证车的边缘和导轨边缘平行。限位板可能有很大的加工误差,比如之前有一次孔打反了,小车的边缘和导轨就是倾斜的;
(3)使用原装钉子。
确定小车坐标系以及对应参数。小车坐标系由主控指定,码盘坐标系是码盘固有属性,我们规定当脉冲数为整的方向为轮子的正方向,码盘坐标系为右手系。
找机械组量模型,确定β,α,L理论值,以及小车装在轴承上后,旋转180°坐标改变量x,y。(相对小车坐标系)x,y是圆弧标定所需参数,这里一起问。随后把数据记录进表格
做好文件整理工作。新建一个文件夹,格式和内容如下
– 日期-车
– 代码(注释掉圆弧解算部分)
2.2导轨直线度标定
实验目的
由于导轨可能存在弯曲,小车走的并不是直线,如果直线的曲率过大,将会对标定结果造成影响,因此,我们先确定导轨直线度,选出一段可用距离调车。可用距离d为长度大于180cm(对应码盘脉冲数大于30000),起点和终点角度差小于0.1°的一段距离。
实验流程
- 安装检查:
- 滑块是否配套原装钉?除非原装钉长度不够,否则用原装钉
- 打扫场地
- 码盘和轮子是否着地?否,找机械组人员看看,抽去树脂垫板
- 小车推动是否顺滑?否,导轨上油擦灰、添加滑块中滚珠或者更换滑块和导轨
代码检查:
- 在代码中修改从量模型中获取的参数,接上码盘,保证码盘没有反接。
- 直线度检查:
将小车从导轨起点推到终点,每隔36cm记录一次角度值,记录AngleDeg,选出可用距离
选出可用距离后,需要再推一次小车,验证在该段AngleDeg变化是否小于0.1
如果没有可用距离,需要重新拧导轨
2.3联合标定
实验目的
确定CM1,CM2(含正反轮径系数),β,Ψ,确保小车能走准直线。
流程
检查小车坐标系、码盘坐标系和对应参数。注释掉圆弧更新部分。
在可用距离内来回推小车。比如从导轨标注有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 | -38144 | 37909 | -37762 |
38205 | -38339 | -38021 | 38114 | |
第二次 | 38066 | -38145 | 37900 | -37770 |
38204 | -38340 | -38010 | 38105 | |
第三次 | 38066 | -38144 | 37909 | -37771 |
38211 | -38346 | -38014 | 38102 | |
第四次 | 38067 | -38136 | 37900 | -37776 |
38202 | -38341 | -38007 | 38108 | |
平均值 | 38068.75 | -38142.25 | 37904.5 | -37769.75 |
38205.5 | -38341.5 | -38013 | 38107.25 |
- 将数据取均值再取整,放入计算表格。
初值 | y负x负 | y正x正 | y负x正 | y正x负 |
---|---|---|---|---|
走y轴,△x = 0 | ||||
Encoder1 | 38069 | -38142 | 38069 | -38142 |
Encoder2 | 38206 | -38342 | 38206 | -38342 |
△d = | -216 | 216 | -216 | 216 |
走x轴,△y = 0 | ||||
Encoder1 | 37905 | -37770 | -37770 | 37905 |
Encoder2 | -38013 | 38107 | 38107 | -38013 |
中间的计算参数只需要关注
中间参数 | ||||
---|---|---|---|---|
β的解一 | -2.358726662 | -2.359268425 | -2.35749178 | -2.36050328 |
β的解二 | 2.35403586 | 2.351294118 | 2.352251948 | 2.353078007 |
mp_a_w | 0.004690801 | 0.007974307 | 0.00523983 | 0.007425278 |
CM1-解1 | 0.004020754 | 0.004024083 | 0.004027901 | 0.004016951 |
CM2-解1 | 0.004007826 | 0.003995846 | 0.00400291 | 0.00400073 |
CM1-解2 | -0.002661902 | -0.007969801 | -0.00400691 | -0.0039872 |
CM2-解2 | 0.005323804 | 0 | 0.003981935 | 0.003971168 |
然后我们就可以得到结果啦,一般解1就是正确结果。
结果 | |
---|---|
CM1-解1 | 0.004020754(正轮径系数),0.004024083(反轮径系数) |
CM2-解1 | 0.00400291(正轮径系数),0.00400073(反轮径系数) |
β-解1 | -2.358997537 |
mp | 0.006332554 |
正反轮径系数根据实际情况确定,如y负x负时,码盘1的脉冲数都为正,那么对应的0.004020754就是码盘1的正轮径系数。
CM1、CM2解算出来都是0.0040左右,mp,即Ψ解算出来小于0.01,如果数据不在这个范围内,就需要检查输入数据和β值。
根据实际情况在中间参数栏将β修改为β±PI(),比如实际中β应该是45°,而表格解算出来的β是-135°,那么β为β-PI()。这是因为三角函数运算具有多解,我们必须选出符合实际情况的解才能算出正确结果。
检验
解算完成后,在导轨上将小车任意推动一段距离,检验小车输出的距离是否准确。重复三次精度都达到要求后就可以进行圆弧标定实验。
3. 圆弧参数标定
实验目的
标定α,L,使小车能走准曲线。实际上直线标定后小车就能走弧线了,但从理论上,圆弧解算精度更高。
实验准备
让机械组同学把小车固定在轴承上。轴承难装,大概会花半个小时。装完后需要检查是否有轴向偏移。
实验流程
检查程序中圆弧反算的部分,将K1 = arc_K1 - x ;K2 = arc_K2 - y处的x,y改成表格里的数值。随后,注释直线更新
选一块地势平坦的区域,让小车顺时针转180°(Angle_Deg的值为180),截图记录解算出来的α,L(对应代码中的msg_Angle_OO和msg_OO_Distance)的值。Angle_Deg约接近180,解算精度越高,一般希望精确到小数点后两位。推车的同学可以从小车远端慢慢推,注意不要有回程和抖动。reset,让小车逆时针旋转180°,截图记录。
推完四组之后,记录数据。确认数据波动不大的情况下,比如正转几次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%,则认为标定结束。
额外说明
- 现在圆弧标定很费时间,因为实验值理论值总是不能很好吻合。可以看到,正转和反转算出来的L和α有明显不同。现在的做法要么是把一边尽量推准,如算出来x,y的误差都在千分之一,标定就完成了。另一种是定性分析。
- 3m长的jlink特别容易掉,最好换用无线jlink,或者检查keil和jlink兼容性。硬件一般不会出问题,如果是硬件接口松了,重接即可。