RoboMaster

标题: 「2019-11」【每周分享】陀螺仪:少了我你连直线都走不了! [打印本页]

作者: 火星探索    时间: 2019-6-2 22:21
标题: 「2019-11」【每周分享】陀螺仪:少了我你连直线都走不了!
[attach]23625[/attach]
我们看到一些先进的机器人,走在路上非常稳,不仅在平地上行动不会摔跤,走在坑洼里也可以极好地保持平衡。
[attach]23626[/attach]
却有另一些机器人走路歪歪扭扭,在平地上都可以把自己摔一跤,因为它不知道自身的平衡状态,一步歪,步步歪。
[attach]23627[/attach]
再看 RoboMaster 的机器人比赛,虽然机器人都有四个轮子,不容易摔倒,但要随心所欲地实现跑直线、转弯漂移,也需要很好地控制自己的平衡。
[attach]23628[/attach]
因为机器人的控制系统会有误差,所以假设你让轮子转 5圈,可能有一个轮子只转了 4 圈。还有机械安装上的误差,以及轮子磨损造成了不同的摩擦力,会导致机器人越跑越歪。
在 PID 科普的文章中,我们学过反馈控制:《什么是机器人比赛中的PID控制?》。反馈控制的好处就是,假设有传感器去测量实际数据,那我们就有办法消除误差,让实际数据稳定在期望的数据上。
所以我们要让机器人只有察觉到误差,及时消除误差,才能随心所欲地奔跑。那如何发现误差呢?

假设我们的目标是让机器人走出一条直线。机器人走得歪歪扭扭,是因为各种扰动使它发生了绕着垂直于地面方向的旋转,也就是头的方向左右摆动。因此,我们要寻找一种传感器来测量机器人垂直于地面方向的旋转量,然后消除这个旋转。
[attach]23629[/attach]
寻找适合的传感器

一般来说,找寻传感器会从物理的原理上找。高中物理分为力、热、声、光、电和磁。我们先看力学,物体在自旋时会有一个向心力 F,向心力的公式为:
[attach]23630[/attach]
可以看到,虽然 F 和 ω(角速度)相关,似乎可以通过 F 求得 ω,但 F 也和 r(旋转的半径)相关,而这个 r 我们无法测量,所以向心力这个思路不行。

除了向心力,还有另一种力叫做科里奥利力。如果旋转物体中,有质点由于惯性进行了直线运动,相对于旋转物体产生了偏移,这个力就会产生。它的公式为:
[attach]23631[/attach]

v 是内部产生的可测量的震动。科里奥利力与向心力不同,它和旋转的半径没有关系,所以这个思路可行。

现实中就有一种传感器利用这个原理测量角速度,这种传感器叫 MEMS 陀螺仪(微机械陀螺仪)。MEMS 陀螺仪测得角速度后,我们将角速度进行积分,就可以得到相对角度(参考系为自身的某一状态,比如和刚启动时的状态),最后再用 PID 修正角度,达到直行的效果。
[attach]23632[/attach]
我们都知道,凡是测量都总是会有误差,靠积分获得的角度在一定时间内虽然是可靠的,而积分将误差同样累计,在一段时间后这个角度也会越来越不准,这个时间的长短基本正相关于器件的价格。
[attach]23633[/attach]
利用类似原理的还有机械式陀螺仪和光纤陀螺仪。机械式陀螺仪是唯一一个真的有个陀螺在转的传感器。而在光学中,一般是基于萨格纳克(Sagnac)效应的陀螺。
[attach]23634[/attach]
实际上,这几种传感器更准确的叫法应该是:角速度传感器。但由于各种原因,现在一般都叫陀螺仪。结合成本和测量方法,我们一般选用 MEMS 陀螺仪。
[attach]23635[/attach]
获取旋转角度

我们以 ADI(亚德诺半导体)公司的 ADIS16470 陀螺仪为例,讲解陀螺仪如何获取角度。
刚刚说过,陀螺仪可以测出角速度,把角速度进行积分,就可以获得角度。如果想获得实时的角度,就要知道每次测量的时间间隔,利用时间和角速度再积分,就可以得到实时的角度了。
获得时间间隔的方法有两种:


1、装一个计时器:计时器计算时间间隔,再告知陀螺仪。但这样会有时间延迟。
[attach]23636[/attach]
2、陀螺仪自己计时:ADIS16470陀螺仪有计时功能,自己给自己汇报时间,不会有延迟误差。


[attach]23637[/attach]

陀螺仪的误差

刚刚也说过,测量总会有误差,陀螺仪的误差产生来自于各种外力干扰和温度变化。误差会导致用陀螺仪修正过的机器人也在左右摆动,走不出平滑的线,或者静止时会慢慢地自旋。我们把这种现象叫做漂移。
[attach]23638[/attach]
这点误差对于地面机器人的影响可能不大,但是对于无人机或者其他精度要求超高的机器人来说,稍微有点偏差都很致命。

如何消除误差
温度因素的误差

温度导致的漂移简称温漂,主要原因是内部测量器件会随着温度的变化而变化,一般有两种方法解决:
1、硬件式:在陀螺仪旁边加一个大电阻进行加热,强制陀螺仪达到某一个温度,就可以保持恒温状态;
2、软件式:先测量不同温度下的温漂情况,然后进行拟合和补偿,也就是温漂标定,使陀螺仪在不同的温度下有不同的拟合和补偿。
其他因素的误差

除了测量相对角度,还有传感器可以测量绝对角度(参考系为大地坐标系)。我们可以用绝对角度和相对角度进行互补来矫正角度。

另一种传感器就可以帮助我们,它叫地磁计,相当于电子式的指南针,可以指出地磁场的方向。这种传感器测量的是自己与地磁场的角度,也就是绝对角度。
[attach]23639[/attach]
由于磁场环境非常的敏感,电机转动和房屋的钢筋结构都会对磁场造成影响,所以磁场的角度一般是不准的,但是在同一环境内是稳定的。

可以得知,陀螺仪适合短时和动态的,长时间下会有漂移;磁力计适合长时和静态的,动态情况下会有误差。我们各取所长,将两个数据进行融合,并使用比较合适的滤波和算法融合手段,最终得到准确的角度值。这个过程也就是姿态解算。
[attach]23640[/attach]
我们一般用卡尔曼滤波器进行解算。除了卡尔曼滤波算法,还有其他的融合算法,比如一阶的互补滤波、二阶互补滤波和权重参数自适应互补滤波等等。它们的复杂程度不同,我们要根据实际需求选择适合的算法。
[attach]23641[/attach]
对于角度值的求取解算,一个传感器往往是无能为力的,需要多个传感器取长补短。而陀螺仪数据就是最核心的部分,其他传感器基本是为了抑制陀螺仪的漂移而打辅助。
在实际的工程中,测量一个物体的姿态是非常常见的需求,所以很多产品都会把多种传感器比如陀螺仪、加速度计、电子罗盘等等集成到一个模块上,不需要我们一一安装,是不是方便又体贴呀。

[attach]23642[/attach]
通过上述一系列方法,我们获得了一个物体相对于起始位置的角度,就可以利用 PID 反馈控制让机器人随心所欲地奔跑了。
我们还可以把这样一套传感器安装在云台上,将底盘的运动视为扰动。在底盘来回抖动时,云台会以地面为参考系保持静止,我们就可以单独地控制云台。
[attach]23643[/attach]
总而言之,机器人走直线或者像上图一样扭腰,看起来像是一个很简单的事情,但是影响因素有很多,每一步的实现都需要全面考量,只有选择了合适的传感器,才能更好地解决问题。

本期作者
[attach]23644[/attach]


华南理工大学 华南虎
RoboMaster校机器人队
生命不息、搞机不止的百人天团
[attach]23645[/attach]


本文来自 RoboMaster 技术智囊团华工机器人实验室,文章部分有修改。如果你也希望加入技术智囊团,请通过 robomaster@dji.com 联系我们。文章部分素材来自公共网络,侵权删除。
[attach]23646[/attach]



作者: 火星探索    时间: 2019-6-4 20:29
看来大家比完赛都不玩论坛了  帖子都没人回复
作者: Dior    时间: 2019-6-4 21:54
感谢老哥,我又来了要pdf啦~~
作者: hfx1395095377    时间: 2019-6-5 23:30
谢谢大佬
顶(shui)起来
作者: 我的远大前程    时间: 2019-6-6 08:42
谢谢大佬
作者: shawnyao    时间: 2019-6-6 15:59
跌倒的那位Atlas其實是因為沙地採下去會凹陷,導致實際地面高度為非零負數,校正後就好了。
和IMU無關啦
作者: Dior    时间: 2019-6-6 17:44
@火星探索 大哥 该干活啦
作者: rainire    时间: 2019-6-6 19:53
TvT

作者: michaelzhong009    时间: 2019-6-8 04:24
红红火火恍恍惚惚!

作者: 18029619841    时间: 2019-6-8 09:26
哈哈哈哈哈哈哈哈哈
作者: PIKA_BI    时间: 2019-6-8 18:20
火星探索 发表于 2019-6-4 20:29
看来大家比完赛都不玩论坛了  帖子都没人回复

比完赛要补作业和实验啊
作者: hongliang    时间: 2019-6-8 22:21
金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累
作者: GM6020    时间: 2019-6-12 10:19
巧了我也是
作者: cookie不甜    时间: 2019-6-18 23:37
感谢楼主的分享知识
作者: 视觉小白    时间: 2019-7-14 14:20
火星探索 发表于 2019-6-4 20:29
看来大家比完赛都不玩论坛了  帖子都没人回复

比完赛要补作业和实验啊

作者: 戴斯塔罗斯    时间: 2019-7-17 13:08
                  
作者: Runner9    时间: 2019-8-22 09:14
感谢大佬分享
作者: 七捷捷捷    时间: 2019-8-27 08:47
太强辽,谢谢
作者: scau_kxj    时间: 2019-8-27 10:25

作者: Bohr    时间: 2019-9-2 16:37
感谢,能学到很多,开拓了视野
作者: 鹿迒    时间: 2019-10-23 11:22
感谢大佬分享

作者: Ferita    时间: 2019-11-5 17:29
赚金币真的好累= =
作者: You蓝    时间: 2019-11-8 20:57
哈哈哈,赚金币的还是有的
作者: XinF    时间: 2019-11-20 19:10
我只记住了,想要精度就给钱,这个精髓。
作者: qq504164376    时间: 2019-11-30 21:58
小白学习了
作者: 此名为Ta    时间: 2019-12-1 10:06
经过测试和小范围修改,3510电机配820R电调,也适用于官方步兵开源
作者: RML    时间: 2019-12-21 12:23
想要陀螺仪的开源代码
作者: QuokeCola    时间: 2019-12-26 12:44
我把科里奥利力。。。看成了奥利给 =(
作者: djiuser_L2JxfAD    时间: 2020-1-8 17:05
感谢分享
作者: djiuser_F9hYX13    时间: 2020-1-18 14:19
点赞支持
作者: djiuser_F9hYX13    时间: 2020-1-19 11:59
点赞支持
作者: 勤学好问大学生    时间: 2020-8-23 14:22
我现在寻思我用A板集成的IMU(标是标的MPU6600)读取的解算后的相位角都很鬼畜,还有飘来飘去的问题也没解决,心里甚是烦躁
作者: 菠萝    时间: 2020-11-24 21:05
看来大家比完赛都不玩论坛了  帖子都没人回复
作者: djiuser_Cmrr4VR    时间: 2020-12-2 22:33
这可真的是个好家伙呀

作者: 咦咦咦    时间: 2020-12-6 01:28
感谢大佬分享
作者: 深浅与共    时间: 2020-12-10 13:28
学习学习
作者: 我可以睡足六小时吗    时间: 2021-5-18 23:58
学习!!!!!!!!!!!!!!
作者: McScofield    时间: 2021-6-1 12:46
看来大家比完赛都不玩论坛了  帖子都没人回复
作者: 明轩    时间: 2021-6-3 22:04
干货满满啊
作者: djiuser_2f57RVk    时间: 2021-7-4 16:43
哈哈哈哈哈哈哈哈哈
作者: djiuser_L77qMDp    时间: 2021-12-16 16:20
谢谢大佬
作者: 是alen    时间: 2022-2-8 11:04
哈哈哈哈
作者: 是alen    时间: 2022-2-8 12:48
谢谢大佬  
作者: djiuser_ROil0yQ    时间: 2022-4-3 15:00
阿斯顿法国红酒看来
作者: AstrocatD.    时间: 2022-6-21 10:21
水一水,学习学习
作者: 人类的赞歌    时间: 2022-8-7 12:00
金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累賺金幣好累
作者: djiuser_salLMw4    时间: 2022-10-29 17:19
火星探索 发表于 2019-6-4 20:29
看来大家比完赛都不玩论坛了  帖子都没人回复

你好强啊,你都半年没上线了

作者: 陆行舟    时间: 2022-11-16 15:24
tqltqltqltql
作者: 之地star    时间: 2023-3-12 20:10
感谢大佬!!!!
作者: 头发茂密者    时间: 2023-3-15 16:59
感谢大佬
作者: djiuser_0LDYQOc    时间: 2023-3-15 19:40
好好好好好好




欢迎光临 RoboMaster (https://bbs.robomaster.com/) Powered by Discuz! X3.2