项目记录|喷涂机器人里用IMU做空间定位:Z轴五分钟累计误差怎么压到3度以内
项目记录|喷涂机器人里用IMU做空间定位:Z轴五分钟累计误差怎么压到3度以内
最近整理之前做过的一个喷涂机器人项目,觉得其中"用IMU做喷枪空间位置追踪、Z轴航向角五分钟内累计误差不能超过3度"这部分还挺有代表性,就简单记录一下。

一、先说清楚:喷涂机器人为什么要IMU
这个项目要解决的问题是:机器人的喷枪在三维空间里运动时,系统需要实时知道喷枪的准确空间位置和姿态,才能控制喷涂轨迹的精度。
传统方案是在机械臂各关节上装编码器,通过正向运动学算出末端喷枪位置。但这个项目用的不是标准六轴机械臂,而是自有结构的喷涂臂——关节多、臂长不规则、运动学模型复杂,纯靠编码器做正解算误差累积很大。
所以方案改成"IMU+拉线编码器"的组合:拉线编码器测线量变化推算喷枪到基点的距离,IMU测喷枪在空间中的姿态角——两个数据合起来,就能确定喷枪在三维空间里的位置。
这里有个背景要补一下。IMU输出的姿态信息里,俯仰角和横滚角可以靠加速度计测重力分量直接解算出来,这两个角静止时精度很高、也没有累积误差 T R A E R E F ] ( h t t p s : / / b l o g . c s d n . n e t / w e i x i n 4 4788542 / a r t i c l e / d e t a i l s / 129328712 ) 。但 Z 轴航向角( Y a w )不一样——加速度计在水平面上分不清重力和运动加速度,没法给 Y a w 提供绝对参考,只能靠陀螺仪积分 [ TRAE_REF](https://blog.csdn.net/weixin_44788542/article/details/129328712)。但Z轴航向角(Yaw)不一样——加速度计在水平面上分不清重力和运动加速度,没法给Yaw提供绝对参考,只能靠陀螺仪积分 [ TRAEREF](https://blog.csdn.net/weixin44788542/article/details/129328712)。但Z轴航向角(Yaw)不一样——加速度计在水平面上分不清重力和运动加速度,没法给Yaw提供绝对参考,只能靠陀螺仪积分[TRAE_REF。
问题就出在这里:陀螺仪积分必然有累积误差。零偏、噪声、温漂,这些每时每刻都在往角度里加误差,时间一长,Yaw就"飘"了。
二、五分钟3度是什么概念
项目给的要求是:空间运动5分钟之后,Z轴累计误差不能超过3度。
这个要求看起来不极端,但做起来很实在。算一笔账:5分钟=300秒,3度=300秒里平均每秒0.01度。陀螺仪零偏如果能控制在0.01°/s以内,5分钟的积分误差就是3度——刚好卡在线上 $TRAE_REF。
实际上没有这么理想。陀螺仪零偏不是恒定的,它会随温度变化、随时间随机游走。即使出厂时标定到一个很小的值,到了实际工况——温度波动、振动干扰——零偏可能漂移到0.02-0.05°/s,5分钟下来就是6-15度的误差,远超3度。
所以"5分钟3度"这个指标,不是靠芯片本身的精度就能自然达成的,必须有算法层面的补偿。
三、坐标系:第一个坑
项目刚开始跑的时候,发现IMU输出的坐标系跟喷枪的运动坐标系对不上。
这个事情要展开说一下。IMU芯片出厂时有一个默认的坐标轴定义——X轴朝什么方向、Y轴朝什么方向、Z轴朝什么方向,对应的姿态角(Roll/Pitch/Yaw)是绕哪个轴的。但喷枪安装在机器人臂上时,IMU的物理X轴可能朝的是机器人的Y轴方向,Z轴可能朝的是X轴方向。两个坐标系不一致,输出角度全对不上 $TRAE_REF。
更关键的是,喷涂臂的运动平面不一定是水平面。喷枪可能在斜面上运动,Z轴的物理朝向和重力方向有个夹角,加速度计测出来的"重力分量"分配到了不该分配的轴上,俯仰和横滚的解算也会受影响。
这个问题的解法是改轴向和改算法:把IMU的内部坐标系定义改成和喷枪运动坐标系一致,相当于在传感器层面做一次坐标系旋转。说起来简单,做起来要把姿态解算的全套代码——加速度分解、陀螺积分、卡尔曼融合——按新的轴定义重新推一遍。这个过程反复改了好几轮,才把坐标系对齐到喷枪实际需要的方向上 $TRAE_REF。

四、Z轴漂移:核心难题
坐标系对齐之后,静态精度达标了,但动态运动5分钟后Z轴还是会漂。
这是这个项目最难的地方,也是任何用六轴IMU做航向测量的应用都绕不开的问题。展开讲一下几种应对手段:
零偏校准。 最基础的:开机时静止几秒,采集陀螺仪数据求平均值得出零偏,后续数据减去这个零偏 $TRAE_REF。但这个方法只对恒定零偏有效,温度变化和随机游走补偿不了。
动态零偏估计。 更进一步的做法是在运行过程中持续估计零偏——当检测到短时间内运动变化不大时(比如喷枪在某个位置停顿),用这段时间的陀螺数据更新零偏估计值 $TRAE_REF。这种方法的难点是判断"什么时候算静止"——喷涂臂一直在动,真正完全静止的窗口很短。
卡尔曼滤波融合。 把加速度计的低频静态精度和陀螺仪的高频动态响应结合起来 $TRAE_REF。加速度计在低频段可以校正俯仰和横滚的漂移,但对Yaw没用——因为Yaw没有加速度计可参考的绝对方向。所以卡尔曼滤波对Z轴漂移的改善有限,主要作用在XY轴上。
四元数表示法。 用四元数替代欧拉角做姿态表示 T R A E R E F ] ( h t t p s : / / b l o g . c s d n . n e t / q q 4 1204464 / a r t i c l e / d e t a i l s / 123388193 ) 。四元数没有万向节死锁问题,计算效率高,但本质上它只是换了种数学表示方法,并不能消除陀螺积分的物理误差来源 [ TRAE_REF](https://blog.csdn.net/qq_41204464/article/details/123388193)。四元数没有万向节死锁问题,计算效率高,但本质上它只是换了种数学表示方法,并不能消除陀螺积分的物理误差来源 [ TRAEREF](https://blog.csdn.net/qq41204464/article/details/123388193)。四元数没有万向节死锁问题,计算效率高,但本质上它只是换了种数学表示方法,并不能消除陀螺积分的物理误差来源[TRAE_REF。项目里用四元数做内部姿态表示和空间坐标换算,输出给上位机的是四元数和Z轴角度,上位机再用四元数算空间坐标。
温补。 温度变化是零偏漂移的主要外部驱动因素 $TRAE_REF。出厂时做过温度循环标定,建立了温度-零偏的查找表,实际运行时根据当前温度实时补偿零偏。这步做好了,环境温度波动带来的漂移能压下来一大块。
项目里这几招组合用,反复调了几轮算法参数,最终把5分钟的Z轴累计误差压到了3度以内。
五、标定治具:被低估的环节
这个项目还有一个容易被忽略的难点:标定。
标准品的标定流程是固定的——放到转台上,按标准流程走一遍。但这个项目的传感器安装轴向被改过,坐标系定义也改了,标准标定流程不再适用。得做专门治具,把传感器按改后的轴向固定到转台上,再走标定流程。
治具的精度直接影响标定精度——治具本身的安装面如果不平、传感器装上去有角度偏差,标定时算出来的零偏和标度因子就是错的,后面用多准都没用。所以治具的加工精度、安装重复性、和传感器壳体的配合公差都得控制。
流程上比标准品多了几步:先装治具→确认安装方向→跑标定→拆下来验证→如果不对再重来。这几步加起来,单台标定时间比标准品多出不少,产能上要留余量。
六、回头看
这个项目做完,最深的体会是:用IMU做空间定位,Z轴航向是最难的那一关。 俯仰和横滚有加速度计兜底,静态精度可以做得很高;但Z轴只有陀螺积分这一条路,零偏、温漂、随机游走每一样都在往误差里加码。
如果以后再做类似的IMU空间定位项目,我会先把三个问题想清楚:
应用的运动时长是多少? 5分钟和5小时的误差累积量级完全不同,时间越长对零偏补偿的要求越高。
有没有其他传感器可以做Z轴的绝对参考? 磁力计在户外开阔地带可以做地磁参考,但喷涂机器人工作环境里电机和金属结构多,磁干扰大,用不了。拉线编码器能给距离但不能给方向。如果没有绝对参考,就只能靠算法把漂移压慢,不可能消除。
坐标系定义是出厂就改好还是到了装机现场再改? 出厂改好意味着标定治具也要定制,产能和一致性要重新评估;装机现场改意味着每台都要现场标定,一致性更难控制。
这三件事想明白以后,再看芯片选型、算法方案、标定流程,就会知道Z轴漂移这个问题的天花板在哪里,能做到什么程度心里有数。
在这里插入图片描述
————————————————
版权声明:本文为CSDN博主「维特智能瑞德」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)