误碰撞分析处理
[TOC]
一、误碰撞是什么
碰撞检测是 aubo 协作机器人自带的一项重要的安全功能,它使机械臂在工作过程中能够实时检测外力矩,从而降低碰撞造成的伤害。
误碰撞是指非预期的碰撞停机,比如机械臂运动过程中没有与其他障碍物发生真实的碰撞,却弹窗碰撞报警。
二、误碰撞的原因
碰撞检测原理大致为:根据机械臂的 位置、速度、加速度、关节电流、摩擦力参数、负载、碰撞阈值 等参数,计算关节的外力矩,如果外力矩超过阈值,则会抛出碰撞错误码。
所以,误碰撞的主要原因大致有几类:
- 真实负载和设置的负载参数不匹配
- 工装夹具配合公差小,机械臂速度快时确实容易受力碰撞
- 碰撞阈值偏小
- 机械臂路点下发不连续
误碰撞总结可在 TR#10197 查看,以下分析也均基于该TR
三、误碰撞的原因排查及处理方案
可从几个方面来分析和处理误碰撞的问题
1. 工艺应用优化
1.1 负载设置正确
负载设置主要包括 质量和质心,详细的操作请参考 用户手册。
举例一个工程内切换负载的实际场景:
机械臂夹爪重量 1KG,待取放的工件重量 2KG。机械臂从 A点取工件,放到 B点。
Payload无工件:1KG Payload有工件:3KG
在导出的日志文件中,log/.trace/rob1_xxxxxxx.csv 文件里可以看到报错前后的负载参数,和辅助分析: 下载触发碰撞时的CSV,将数据拉到第一个 PS ,确认负载参数设置,参考标准负载参数文档
可以在导出的日志包中的 /log/.trace 中查看
1.2 尽量避开奇异区域
常见的奇异区域有:
- joint5 在 0° 或者 180° 附近
- joint3 在 0° 附近
- tcp 在 base 的 圆柱体空间 附近
奇异区域附近的 直线运动/圆弧运动 容易引起关节超速而误碰撞,应当降低此处的 线速度和线加速度。
1.3 点位示教尽量减少机械臂受力
比如一个非常常见的夹取工件场景,应当尽量保证夹爪居中夹取
如果点位示教没有保证居中,如下,那么当夹爪闭合时,外力就会传递到机械臂本体,也容易引起误碰撞。
1.4 取放料时降低加速度
取放料点是一个上下料项目中最重要的点位,取放料点处工件和工件定位工装之间的配合精度通常较高,降低取放料点处的加速度,能够有效缓解此处引起的误碰撞问题。
1.5 保证机械臂安装牢固
负载及底座安装松动,会在运动过程中引入不可预测的额外力矩干扰,从而被误判为碰撞。
2. 碰撞阈值优化
碰撞阈值是碰撞检测中一项非常重要的参数,碰撞阈值如果太大,不容易触发碰撞,碰撞不灵敏;碰撞阈值如果太小,则很容易触发误碰撞,无法正常连续工作。
其实碰撞等级(1~10级)在底层是对应到不同的碰撞阈值,比如 等级1 对应的阈值要大于 等级10 对应的阈值。
通常情况下,等级6对应的碰撞阈值是一组比较折中的数值,既要保证连续工作中不会误碰撞,又要保证机械臂的碰撞力不会过大。
如果在实际中,负载设置正确的情况下,碰撞等级6触发误碰撞,请按照以下步骤分析排查和优化
2.1 确认摩擦参数和力矩常数
从CSV确认力矩常数和摩擦参数是否存在为0的情况,若存在,请参照进行处理
2.2 确认外力矩与碰撞阈值之间的大小关系
碰撞是算法端将外力矩和阈值进行对比进行判断的,如果触发碰撞时,日志显示外力矩的绝对值小于阈值绝对值,需要联系 算法部钟一辰 处理
正常例子:
错误例子:
2.3 阈值计算及写入
可以在专家模式里的碰撞阈值一栏确认底座是否有碰撞阈值,或者通过日志里搜索 collision_threshold 关键字查看底座的碰撞阈值。若阈值全为0,说明未做过出厂阈值计算,需要按照计算流程进行阈值优化。大致流程为 空载运行一组特征轨迹,带载运行一组特征轨迹,记录两组数据,计算碰撞阈值。 具体请参考 阈值抓取流程 。
3. 操作系统实时性
在 arcs 系统中,实时性是一个非常重要的指标,具备高实时性,才能实现诸如 力控、动态遥操 等功能。
如果系统的实时性有问题,比如时间周期抖动,就会影响下发到伺服目标路点的连续性,在伺服层收到不连续的目标路点,就很可能导致关节电流的突变,从而引起误碰撞报警。
目前 arcs 在多个方面来提高系统实时性:
- 打实时内核补丁
- 孤立cpu内核(cpu1)单独给到实时计算任务使用
- 将网卡中断绑定到实时内核(cpu1),提高工控机和接口板之间的通信实时性
- 将其他系统中断绑定到其他cpu核心,避免影响实时任务
- 将cpu强制为性能模式
- 实时任务线程绑定到实时内核(cpu1),并且提高线程优先级
- 提高网卡中断线程和RTLINK RECV线程优先级并均大于50 等等
如何判断系统是否有实时性问题?
答:通过日志中的
cmd not update
、RTLink slave period abnormal
、TRACE RPDO 丢失警告
等关键字来定位
3.1 确认系统是带有实时核心的系统
可以在导出的日志包中的 /system/X.Org 中查看
如下图,第一个结尾是rtxx,代表带有实时内核的系统。第二个结尾是generic,代表不带有实时内核的系统
如果是X86+非实时系统,可以参考文档 安装系统 对系统进行升级
如果是ARM+非实时系统,请联系 软件部贾存虎 进行处理
3.2 确认网卡驱动
对于X86的控制柜+REATEK网卡,系统是2204时,网卡驱动需要确认是否为r8168,如果是r8169,需要参考网卡驱动 进行升级。
如果是intel的网卡,驱动为igb,不需要进行升级网卡驱动
可以在导出的日志包中的 /system/dmesg 中查看
3.3 确认周期问题
查看日志,看触发碰撞前,是否出现 “RTLINK slave period abnormal” 、 “Period delay exceed 20% xxxx > 6000. CycleTime is xxxxs” 和 “joint1 cmd not update“
如有出现以上三种字样,请联系 软件部贾存虎 进行处理
3.4 一些系统指令
查看隔离核心(cpu1)上面的线程
ps -eLo pid,tid,cls,rtprio,ni,pri,psr,%cpu,%mem,stat,wchan,command,comm| awk '{if($7==1 && $3=="FF")print $0}'
查看中断运行所在核心
watch -n 1 "cat /proc/interrupts"
查看CPU是否在性能模式
/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
grub查看隔离核心核中断亲和性设置
cat /etc/default/grub
查看aubo_control上运行的线程
top -Hp
pgrep aubo_control
系统是否带有实时核心补丁
uname -a 系统版本后面带有 rt 则代表有实时核心补丁
查看网卡驱动
2204系统:dmesg | grep 8168 1604系统:dmesg | grep 8169
查看CPU信息,是否存在降频问题
cat /proc/cpuinfo
查看CPU温度信息
cat /sys/class/hwmon/hwmon1/temp2_input (temp2是0核,...,temp5是3核)
4. 模型问题
4.1 确认机械臂模型没有出现问题
如果出现类似与下图所示机械臂模型问题,请联系 算法部刘赛男 确认模型和DH误差
5. 硬件问题
5.1 上电刹车报碰撞
查看日志触发碰撞时是否有大电流,若存在大电流,请联系生产或者工艺排查关节硬件问题
6. 日志分析
- 出现碰撞后,首先需要对日志和CSV进行初步分析,确认系统和负载等设置没问题
- 可以对日志进行检索关键词: “发生碰撞!当前碰撞检测阈值为“ 来确认碰撞发生的位置,该条信息 左边对应的时间为诊断文件的时间戳,后续分析的诊断文件也是该诊断文件
- 通过观察诊断文件中触发碰撞关节的 电流、速度(差分速度)、加速度、路点 等信息,几乎可以确认误碰撞问题所在
分析 csv 的方法(此处假设 joint3 触发碰撞):
6.1 查看关节最大电流限制
诊断文件中 “ Joints max curr “描述的是关节最大电流限制( 0.29.5-rc.15、0.31.0-rc.16、0.32.0-alpha.102 及以上版本带有此输出)
6.2 提取路点、速度、加速度等信息
在诊断文件中新建工作表,将 SafetyMode、q3、qd3、qdd3、current3、voltage3、target_q3、plan_q3 共8列复制到新的工作表中,并冻结 tiltle 窗口(选中title下面的第一行数据,然后在视图--->冻结窗口中点击冻结窗格)
同时需要确保所有数据不为0,若存在q、qd、qdd某个参数的一列全部为0的情况,请联系硬件部滕超 处理
6.3 数据分析
数据使用范围:SafetyMode的第一个PS上面的NOR
- 确认 target_q 和 plan_q 保持一致
在旁边的表格处输入 target_q - plan_q ,计算 PS 前 300 个周期即可,需要保证全部小于 1E-06,如下图所示
若存在 target_q - plan_q > 1E-06 的数据,则表示 target_q 和 plan_q 没有保持一致,该问题可以说明 下发的点存在重复点
存在该问题请联系 软件部贾存虎 处理
- 确认跟踪精度
在旁边的表格处输入 (target_q - q) / PI() * 180 ,计算PS前300个周期即可,需要保证全部小于10,如下图所示
跟踪精度可以说明机械臂对目标点的跟踪能力,当电流没有饱和时,出现了跟踪精度的问题,需要联系 硬件部张世亮 开启速度前馈后测试
- 对 q 和 target_q 做速度差分
由于只看 q和target_q 的曲线不能很清晰的表明是否存在跳点或者重复点,亦或者其他问题,所以需要对 q和target_q 进行差分处理
假设 target_q 在 H 列,在旁边的表格处输入 (target_q - last_target_q) / 0.005 ,若 target_q 是 H20,则 last_target_q 就是 H19。q 作与 target_q 相同的处理,计算 PS 前 300 个周期即可,target_q 差分速度的曲线趋势与 q 差分速度的曲线趋势需要保持相同,如下图所示
若 q 差分速度的曲线趋势与 target_q 差分速度的曲线趋势不同,不光滑或者有突变,则表示有跳点或者重复点,亦或者存在周期问题。首先需要排查是否存在周期问题。若不存在周期问题且 target_q 和 plan_q 保持一致,此类问题需要抓取以太网报文和 CAN 报文去进一步确认关节问题还是上位机问题,抓取报文后联系 软件部贾存虎 处理
- 确认电流、加速度和电压是否稳定
选用 qdd、current、voltage 三列插入曲线,由于是否发生突变需要对比之前周期的电流、加速度和电压,所以至少需要 1500 个周期的数据,如下图所示
在一般情况下,3中的 q 差分出来的速度曲线是光滑无突变,则该曲线也不会产生突变。若电流和加速度存在突变,需要和3得到的曲线一起分析确认是否是周期异常、跳点重复点、亦或者需要抓包文来确认是否是关节问题。
- 确认电流是否饱和
此问题仅在3、4的曲线趋势是正常的情况下确认
将诊断文件中 Joints max curr 和 碰撞前后的电流 进行对比,可以看到电流是否饱和
若电流饱和且曲线趋势正常,则需要降低程序中的加速度和速度跑程序,并联系 软件部贾存虎 确认 aubo_description 中速度和加速度限制是否正确
若电流没有饱和且曲线趋势正常,则表明阈值存在问题, 请参照 阈值抓取流程 处理
7. 固件优化
部分由于操作系统实时性不足引起的路点不连续问题,通过在关节固件层增加插值保护,可在一定程度上得到缓解。
开发测试中...
8. 软伺服功能
从底层对机械臂和工件“硬碰硬”的情况做优化,避免机械臂关节碰撞报警
开发测试中...