采用 SpeedL
模式控制 UR5e 机器人是通过控制末端执行器(TCP,工具中心点)的线性和角速度,使机器人在指定的速度和加速度下移动。SpeedL
模式适合需要连续、动态调整速度的任务,例如打磨、柔性装配等,因为它允许实时控制机器人末端的运动速度,而不是指定到达某个位置的路径。
使用 speedL
控制 UR5e 机器人末端执行器在 x 轴方向上移动,并在达到目标后停止。
import time
import rtde_control
# 连接到机器人
rtde_c = rtde_control.RTDEControlInterface("机器人IP地址")
# 设定速度向量:沿 x 轴移动 0.1 m/s,不进行其他方向和旋转运动
velocity = [0.1, 0.0, 0.0, 0.0, 0.0, 0.0] # 线速度 [vx, vy, vz, rx, ry, rz]
acceleration = 0.5 # 加速度限制 (单位:m/s²)
time_duration = 2.0 # 持续时间 (单位:秒)
# 启动速度控制模式
rtde_c.speedL(velocity, acceleration, time_duration)
# 等待指定时间
time.sleep(time_duration)
# 停止速度控制
deceleration = 0.5 # 减速度
rtde_c.stopL(deceleration)
目标:让机器人在笛卡尔空间以指定的速度沿 X 方向移动,控制时间为 2 秒,每 0.1 秒更新一次速度,同时在结束时平稳停止。
import time
import rtde_control
# 1. 创建 RTDE 控制接口实例,连接到机器人
rtde_c = rtde_control.RTDEControlInterface("机器人IP地址")
# 2. 设置控制参数
velocity = [0.1, 0.0, 0.0, 0.0, 0.0, 0.0] # 末端执行器沿 x 方向移动的速度为 0.1 m/s
acceleration = 0.5 # 加速度限制 (单位:m/s²)
control_duration = 2.0 # 总的控制持续时间 (单位:秒)
cycle_time = 0.1 # 每个控制周期的时间 (单位:秒)
# 3. 记录控制的开始时间
start_time = time.time()
# 4. 进入控制循环,控制机器人以指定速度移动
try:
while (time.time() - start_time) < control_duration:
# 记录循环的开始时间
loop_start = time.time()
# 调用 speedL 函数设置速度,time=0 表示速度持续生效直到下一次更新或停止
rtde_c.speedL(velocity, acceleration, time=0)
# 计算本次循环消耗的时间
loop_duration = time.time() - loop_start
# 5. 保持每次控制循环的周期时间为 cycle_time
# 如果本次循环花费的时间小于 cycle_time,则进行忙等待
while (time.time() - loop_start) < cycle_time:
pass # 忙等待保持控制周期的稳定性
finally:
# 6. 控制结束后,平稳停止机器人
deceleration = 0.5 # 设置停止时的减速度 (单位:m/s²)
rtde_c.stopL(deceleration)
print("机器人已停止。")
# 7. 断开 RTDE 控制接口连接
rtde_c.disconnect()
print("控制结束,已断开连接。")