servoj控制UR3(8MS周期),报C204A3错误

PC通过30003实时控制UR3 ,你好,报C204A3后,保护停止了,可能是某个电机的实际位置和下一时刻要求的位置距离比较大,即对电机的加速度要求太高了。但我通过限制加速度后还是报错。

目前UR3没有固定,只是通过一个大圆盘放在地上,能移动。轨迹规划过程中,运动速度按照0.15M/S进行规划。

用的servoj指令,gain和lookaheadtime都在不断调整,还是不能长时间稳定运行。

关节空间最好状态是运行了3小时没错,笛卡尔空间直线运动一个多小时没有报错

C204A3报警是加速度太快了,若要中止运动,请在使用"wait" 之前用 "stopj"或 "stopl"脚本
命令形成平稳减速。避免在交融的路点之间中止运动
命令具体用法请参考以下示例:
servoj(q, a, v, t=0.008, lookahead_time=0.1, gain=300)
Example Commands
servoj([0.0,1.57,-1.57,0,0,3.14], t=0.1, lookahead_time=0.1, gain=300)
or
servoj([0.0,1.57,-1.57,0,0,3.14], 0, 0, 0.1, 0.1, 300)
q = [0.0,1.57,-1.57,0,0,3.14] – joint angles in radians representing rotations of base=0°,
shoulder=90°, elbow=-90°, wrist1=0°, wrist2=0°, wrist3= 180°
a = 0 not used in current version
v = 0 not used in current version
t=.1 time where the command is controlling the robot. The function
is blocking for time t [S]
lookahead time=.1 time [S], range [0.03,0.2] smoothens the trajectory with this
lookahead time
gain=300 proportional gain for following target position, range [100,2000]

谢谢回答,我是在PC端做轨迹规划,规划(生成轨迹点后)完成后,每8ms下发一次位置点给UR3,

根据读到的关节实际位置和下发关节位置的差,如果差值大于0.8rad,在下一个8ms到的时候就按关节实际

位置+朝着运动方向+0.8rad,如何差值比0.8rad小,则按我规划的位置发送。这里的0.8是根据观察得到的,

作用相当于限制电机的加速度,从0.35~0.8基本都设置过。路径规划的时候按照0.15米/秒的速度做的,所以速度和加速度其实都比较好,

不知道啥原因。不知道机器人示教器上有没有参数要设置,我有点担心机器人没有固定,有没有影响,目前就像水杯放在桌子上一样的放着的

Hi @18719665

请问你是PC发位置信息给UR控制器, 在UR控制器上执行servoj

还是PC直接发servoj给UR控制器?

我是PC发servoj和servoj要用到的位置信息,以及lookahead,gain等,机器人端没有写程序

现在发现实际机器人和URSIM在同一关节角下面,两者的位置相差达16mm,

机器人目前处于没有固定状态,运行速度计划是0.15米每秒状态,谢谢

HI @18719665 ,

建议透过PC藉由modbus或socket发送位置到Robot controller, 然后把servoj code写在Robot controller裡,
若透过Client interface发送单行运动指令会有以下问题:
每一次新发的servoj指令会中断前一次servoj的运动, 因此造成运动卡顿

Thanks

1 Like

我用matlab作为socket server,URSim作为socket Client。matlab发送目标位置给UR,UR收到后用get_inverse_kin得到关节位置,再用servoj执行,不能正常工作。具体表现:
(1)matlab socket server有时会超时,有时能正常连续发送(URClient收到位置会发送收到的位置序号给server,server在timeout前收到返回的位置序号认为正常传送,否则认为超时,但都继续发送下一点)
(2)在超时点时,UR基本不动,在正常发送点时能连续运动一段距离

求指点

Hi,

把timout 的時間設定為0可以取消超时的警報

(1)UR并不会产生timeout报警,socket_read_ascii_float能正常读到位置并发送反馈序号。
(2)matlab程序会提示timeout(没有及时收到反馈序号引起),但多次timeout后仍能收到这些原来反馈的序号,从而变成预期的发送一点位置,收到一个反馈序号。但成功多点后,matlab又会出现timeout。

Hi,

从你描述, 听起来你URClien(URSim)t会发送收到的位置序号给server(matlab), 所以你的matlab无法及时收到URsim发的位置序号导致matlab发出time out? 怎么超时的我不清楚, 不过你使用servoj command是会block在这个命令下直到完成运动才会返回, 或许是这个在影响回传的位置序号时机

谢谢您及时回复,我另开了一个贴,其中贴出了UR程序。我是先返回其接收序号,返回成功才启动执行运动的。从您贴出的解释看,缺省情况下8ms就返回了,我matlab设置的超时大得多,不应该block吧。

您好,可以给我一份关于servoJ的源代码嘛? 有偿!!