此项目用作帮助用户实现Mercury系列机型(A1/B1/X1)的手臂跟随效果
PTP模式是机械臂默认的控制方法,机械臂以0的起始\终止速度运动到目标位置,适用于绝大部分的应用场景
其速度规划曲线如下:
当连续调用PTP接口时,可以看到在运动衔接处存在速度的启停:
使用以下接口可切换至PTP模式,其中MovJ表示坐标运动时执行非直线轨迹,MovL表示坐标运动时执行直线轨迹
set_movement_type(0) #MovJ非直线运动
set_movement_type(1) #MovL直线运动(默认)
在PTP模式下支持多点位的缓存,控制器会依次执行缓存的运动指令
CP模式支持连续的轨迹、速度控制
其速度规划曲线如下,可以看到在运动衔接处速度未降到零:
使用以下接口可切换至CP模式
set_movement_type(4) #CP
在CP模式下不支持多点位的缓存,控制器会始终执行最新一条运动指令,指令衔接不会导致机械臂停止,而是在原速度的基础上继续规划
FUSION模式不是一个通用的控制模式,它是为了适配VR遥操作、外骨骼跟随等应用场景的高速响应模式,在CP模式中我们可以做到运动指令的速度衔接,但由于无法严格控制指令的运动时间,可能会出现机械臂响应速度较慢的情况
为了解决联动场景中的延迟问题,FUSION模式严格限制了指令的运动周期,用户可规定运动指令的执行时间,每一段的周期T是可控的,周期的控制优先级高于位置:
使用以下接口可切换至FUSION模式
基于位置环的融合规划,适用于对位置精度要求高的场景,适用于VR控制
set_movement_type(2) #pos
基于速度环的融合规划,适用于对位置精度要求低的的应用场景,适用于外骨骼联动等应用场景!
set_movement_type(3) #speed
注意,在速度环模式下,机器会跟随采样点位的差分速度而不是实际位置!
开启融合模式后,使用以下接口开始速度融合控制
send_angles(angles, time)
send_coords(coords, time)
其中angles\coords表示目标位置,time表示控制周期(单位为7ms),例如:
send_angles([0, 0, 0, 0, 0, 0, 0], 3)
表示在3个周期(3*7=21ms)内抵达[0, 0, 0, 0, 0, 0, 0]位置
本文提供的速度融合接口适用于带位置采样器的应用场景,采集器以固定采样周期采集位置数据并下发给机械臂,从而实现机械臂跟随
mouse.py 坐标跟随
mouse_joint.py 角度跟随
在上述脚本中,我用鼠标作为采样器模拟了MercuryA1跟随的应用场景,用户移动鼠标采集位置信息,通过调用速度融合接口即可实现机械臂的跟随效果
mouse.py 双臂坐标跟随
用户可基于此框架进行VR坐标控制的功能开发
MercuryControl.py 外骨骼跟随主程序
exoskeleton_api.py 外骨骼控制库
在上述脚本中,外骨骼作为采样器,用户通过转动外骨骼关节采集关节信息,通过调用速度融合接口即可实现机械臂的跟随效果
1.若在指定周期内无法抵达目标位置,则会运动到周期内的最远距离
2.若在机械臂执行完指定周期后仍未收到新的运动指令,则会以最大减速度减速至静止
3.速度环的采样频率建议小于100Hz
-
由于规则2的限制,采样器的采样频率需高于执行频率,否则当机械臂内部点位缓存为空时,会发生急停引发卡顿 (采样周期可通过脚本中的time.time()得到,执行周期为见第2章速度融合接口说明,一般情况下建议采样周期为10~20ms,执行周期为TIME>=3(3*7=21ms))
-
在位置环的融合控制下,机械臂对位置高度敏感,若采样器采集到的点位差分速度不平滑,例如存在急停和急启动的情况,会导致执行卡顿 (大部分情况建议使用速度环控制,除非你对精度要求很高,并且了解规划的加减速知识)
-
在速度环的融合控制下,机械臂通过采样器的差分速度控制运动趋势,若采样频率过高(>100hz)则可能导致差分速度过小,引发执行卡顿 (加10ms延迟即可)
-
由于规则1的限制,位置模式下可能出现位置误差 (多次发送目标位置即可消除该误差)
-
在速度环的融合控制下,由于接口存在速度的映射关系,机械臂会出现位置的累积误差 (中断联动控制,待机械臂停止后重新调用融合接口,机械臂会自动校准位置误差)