CS机器人servoj的使用


servoj(q, t=0.010, lookahead_time=0.1, gain=300)

该指令用于实时控制机器人的关节位置,在前瞻时间内利用时间间隔处理接收到的关节角度,并进行均值滤波,再将滤波的数据进行样条拟合,从而得到实时控制所需的关节位置。

其中q为joint类型数据,t为采样时间(s),lookahead为前瞻时间(s),lookahead/ t =运动队列长度,用于平滑数据。当前版本gain数据无作用

例如希望自行编写机器人实时轨迹并让机器人完成一个整圆的绘制,可以使用以下代码:


servoj1.script内容如下:

def checkPos(p,delta):
  # 检查当前位置与期望位置p的xyz三个方形偏差均小于delta,返回True
  p_curr = get_actual_tcp_pose()
  if (abs(p_curr[0]-p[0])<delta) and (abs(p_curr[1]-p[1])<delta) and (abs(p_curr[2]-p[2])<delta):
    return True
  else:
    return False

def servojTest(pStart,r):
  movel(pStart) #移动到起点,即圆最上方点
  pStart[2] = pStart[2] - r  # 修改参考点为圆心
  ptmp = pStart.copy()
  sample_t = 0.01 #采样时间,采样时间和每两次servoj之间发送的位置差 可以调节机器人运动速度
  lookahead = 0.1 #lookahead/采样时间 = 队列长度10(用于平滑)

  for i in range(0,360):
    ptmp[1] = pStart[1]+r*sin(d2r(i))
    ptmp[2] = pStart[2]+r*cos(d2r(i))

    jtmp = get_inverse_kin(ptmp) #求逆
    servoj(jtmp,sample_t,lookahead) #机器人会同步执行该语句,即该语句需要耗时sample_t的时长

  while not checkPos(ptmp,2):
    # 如果当前位置与终点位置偏差大于2mm,一直发送最后一个点的位置
    servoj(jtmp,sample_t,lookahead)
  
  stopj(3) #以3rad/s2 加速度停止运动
  return True



点击显示全文
赞同0
发表评论
分享

手机扫码分享
0
399
收藏
举报
收起
登录
  • 密码登录
  • 验证码登录
还没有账号,立即注册
还没有账号,立即注册
注册
已有账号,立即登录
选择发帖板块
举报
请选择举报理由
举报
举报说明