误碰撞分析处理

[TOC]

一、误碰撞是什么

碰撞检测是 aubo 协作机器人自带的一项重要的安全功能,它使机械臂在工作过程中能够实时检测外力矩,从而降低碰撞造成的伤害。

误碰撞是指非预期的碰撞停机,比如机械臂运动过程中没有与其他障碍物发生真实的碰撞,却弹窗碰撞报警。

二、误碰撞的原因

碰撞检测原理大致为:根据机械臂的 位置、速度、加速度、关节电流、摩擦力参数、负载、碰撞阈值 等参数,计算关节的外力矩,如果外力矩超过阈值,则会抛出碰撞错误码。

所以,误碰撞的主要原因大致有几类:

  • 真实负载和设置的负载参数不匹配
  • 工装夹具配合公差小,机械臂速度快时确实容易受力碰撞
  • 碰撞阈值偏小
  • 机械臂路点下发不连续

误碰撞总结可在 TR#10197 查看,以下分析也均基于该TR

三、误碰撞的原因排查及处理方案

可从几个方面来分析和处理误碰撞的问题

1. 工艺应用优化

1.1 负载设置正确

负载设置主要包括 质量和质心,详细的操作请参考 用户手册。

举例一个工程内切换负载的实际场景:

机械臂夹爪重量 1KG,待取放的工件重量 2KG。机械臂从 A点取工件,放到 B点。

Payload无工件:1KG Payload有工件:3KG

img

在导出的日志文件中,log/.trace/rob1_xxxxxxx.csv 文件里可以看到报错前后的负载参数,和辅助分析: 下载触发碰撞时的CSV,将数据拉到第一个 PS ,确认负载参数设置,参考标准负载参数文档

可以在导出的日志包中的 /log/.trace 中查看

5

1.2 尽量避开奇异区域

常见的奇异区域有:

  1. joint5 在 0° 或者 180° 附近
  2. joint3 在 0° 附近
  3. tcp 在 base 的 圆柱体空间 附近

奇异区域附近的 直线运动/圆弧运动 容易引起关节超速而误碰撞,应当降低此处的 线速度和线加速度。

1.3 点位示教尽量减少机械臂受力

比如一个非常常见的夹取工件场景,应当尽量保证夹爪居中夹取

img

如果点位示教没有保证居中,如下,那么当夹爪闭合时,外力就会传递到机械臂本体,也容易引起误碰撞。

img

1.4 取放料时降低加速度

取放料点是一个上下料项目中最重要的点位,取放料点处工件和工件定位工装之间的配合精度通常较高,降低取放料点处的加速度,能够有效缓解此处引起的误碰撞问题。

1.5 保证机械臂安装牢固

负载及底座安装松动,会在运动过程中引入不可预测的额外力矩干扰,从而被误判为碰撞。

2. 碰撞阈值优化

碰撞阈值是碰撞检测中一项非常重要的参数,碰撞阈值如果太大,不容易触发碰撞,碰撞不灵敏;碰撞阈值如果太小,则很容易触发误碰撞,无法正常连续工作。

其实碰撞等级(1~10级)在底层是对应到不同的碰撞阈值,比如 等级1 对应的阈值要大于 等级10 对应的阈值。

通常情况下,等级6对应的碰撞阈值是一组比较折中的数值,既要保证连续工作中不会误碰撞,又要保证机械臂的碰撞力不会过大。

如果在实际中,负载设置正确的情况下,碰撞等级6触发误碰撞,请按照以下步骤分析排查和优化

2.1 确认摩擦参数和力矩常数

从CSV确认力矩常数和摩擦参数是否存在为0的情况,若存在,请参照进行处理

8

2.2 确认外力矩与碰撞阈值之间的大小关系

碰撞是算法端将外力矩和阈值进行对比进行判断的,如果触发碰撞时,日志显示外力矩的绝对值小于阈值绝对值,需要联系 算法部钟一辰 处理

正常例子:

6

错误例子:

7

2.3 阈值计算及写入

可以在专家模式里的碰撞阈值一栏确认底座是否有碰撞阈值,或者通过日志里搜索 collision_threshold 关键字查看底座的碰撞阈值。若阈值全为0,说明未做过出厂阈值计算,需要按照计算流程进行阈值优化。大致流程为 空载运行一组特征轨迹,带载运行一组特征轨迹,记录两组数据,计算碰撞阈值。 具体请参考 阈值抓取流程

3. 操作系统实时性

在 arcs 系统中,实时性是一个非常重要的指标,具备高实时性,才能实现诸如 力控、动态遥操 等功能。

如果系统的实时性有问题,比如时间周期抖动,就会影响下发到伺服目标路点的连续性,在伺服层收到不连续的目标路点,就很可能导致关节电流的突变,从而引起误碰撞报警。

目前 arcs 在多个方面来提高系统实时性:

  1. 打实时内核补丁
  2. 孤立cpu内核(cpu1)单独给到实时计算任务使用
  3. 将网卡中断绑定到实时内核(cpu1),提高工控机和接口板之间的通信实时性
  4. 将其他系统中断绑定到其他cpu核心,避免影响实时任务
  5. 将cpu强制为性能模式
  6. 实时任务线程绑定到实时内核(cpu1),并且提高线程优先级
  7. 提高网卡中断线程和RTLINK RECV线程优先级并均大于50 等等

如何判断系统是否有实时性问题?

答:通过日志中的 cmd not updateRTLink slave period abnormalTRACE RPDO 丢失警告 等关键字来定位

3.1 确认系统是带有实时核心的系统

可以在导出的日志包中的 /system/X.Org 中查看

如下图,第一个结尾是rtxx,代表带有实时内核的系统。第二个结尾是generic,代表不带有实时内核的系统

如果是X86+非实时系统,可以参考文档 安装系统 对系统进行升级

如果是ARM+非实时系统,请联系 软件部贾存虎 进行处理

3

4

3.2 确认网卡驱动

对于X86的控制柜+REATEK网卡,系统是2204时,网卡驱动需要确认是否为r8168,如果是r8169,需要参考网卡驱动 进行升级。

如果是intel的网卡,驱动为igb,不需要进行升级网卡驱动

可以在导出的日志包中的 /system/dmesg 中查看

2

3.3 确认周期问题

查看日志,看触发碰撞前,是否出现 RTLINK slave period abnormalPeriod delay exceed 20% xxxx > 6000. CycleTime is xxxxsjoint1 cmd not update

如有出现以上三种字样,请联系 软件部贾存虎 进行处理

3.4 一些系统指令

  1. 查看隔离核心(cpu1)上面的线程

    ps -eLo pid,tid,cls,rtprio,ni,pri,psr,%cpu,%mem,stat,wchan,command,comm| awk '{if($7==1 && $3=="FF")print $0}'

  2. 查看中断运行所在核心

    watch -n 1 "cat /proc/interrupts"

  3. 查看CPU是否在性能模式

    /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

  4. grub查看隔离核心核中断亲和性设置

    cat /etc/default/grub

  5. 查看aubo_control上运行的线程

    top -Hp pgrep aubo_control

  6. 系统是否带有实时核心补丁

    uname -a 系统版本后面带有 rt 则代表有实时核心补丁

  7. 查看网卡驱动

    2204系统:dmesg | grep 8168 1604系统:dmesg | grep 8169

  8. 查看CPU信息,是否存在降频问题

    cat /proc/cpuinfo

  9. 查看CPU温度信息

    cat /sys/class/hwmon/hwmon1/temp2_input (temp2是0核,...,temp5是3核)

4. 模型问题

4.1 确认机械臂模型没有出现问题

如果出现类似与下图所示机械臂模型问题,请联系 算法部刘赛男 确认模型和DH误差

1

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 及以上版本带有此输出)

10

6.2 提取路点、速度、加速度等信息

在诊断文件中新建工作表,将 SafetyMode、q3、qd3、qdd3、current3、voltage3、target_q3、plan_q3 共8列复制到新的工作表中,并冻结 tiltle 窗口(选中title下面的第一行数据,然后在视图--->冻结窗口中点击冻结窗格)

同时需要确保所有数据不为0,若存在q、qd、qdd某个参数的一列全部为0的情况,请联系硬件部滕超 处理

9

6.3 数据分析

数据使用范围:SafetyMode的第一个PS上面的NOR

12

  1. 确认 target_q 和 plan_q 保持一致

在旁边的表格处输入 target_q - plan_q ,计算 PS 前 300 个周期即可,需要保证全部小于 1E-06,如下图所示

若存在 target_q - plan_q > 1E-06 的数据,则表示 target_q 和 plan_q 没有保持一致,该问题可以说明 下发的点存在重复点

存在该问题请联系 软件部贾存虎 处理

  1. 确认跟踪精度

在旁边的表格处输入 (target_q - q) / PI() * 180 ,计算PS前300个周期即可,需要保证全部小于10,如下图所示

跟踪精度可以说明机械臂对目标点的跟踪能力,当电流没有饱和时,出现了跟踪精度的问题,需要联系 硬件部张世亮 开启速度前馈后测试

13

  1. 对 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 报文去进一步确认关节问题还是上位机问题,抓取报文后联系 软件部贾存虎 处理

14

  1. 确认电流、加速度和电压是否稳定

选用 qdd、current、voltage 三列插入曲线,由于是否发生突变需要对比之前周期的电流、加速度和电压,所以至少需要 1500 个周期的数据,如下图所示

在一般情况下,3中的 q 差分出来的速度曲线是光滑无突变,则该曲线也不会产生突变。若电流和加速度存在突变,需要和3得到的曲线一起分析确认是否是周期异常、跳点重复点、亦或者需要抓包文来确认是否是关节问题。

15

  1. 确认电流是否饱和

此问题仅在3、4的曲线趋势是正常的情况下确认

将诊断文件中 Joints max curr碰撞前后的电流 进行对比,可以看到电流是否饱和

若电流饱和且曲线趋势正常,则需要降低程序中的加速度和速度跑程序,并联系 软件部贾存虎 确认 aubo_description 中速度和加速度限制是否正确

若电流没有饱和且曲线趋势正常,则表明阈值存在问题, 请参照 阈值抓取流程 处理

7. 固件优化

部分由于操作系统实时性不足引起的路点不连续问题,通过在关节固件层增加插值保护,可在一定程度上得到缓解。

开发测试中...

8. 软伺服功能

从底层对机械臂和工件“硬碰硬”的情况做优化,避免机械臂关节碰撞报警

开发测试中...

results matching ""

    No results matching ""