采用 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("控制结束,已断开连接。")