1. 双臂初始位形同步
任务说明
本案例实现双臂从任意初始姿态同步运动到预设的对称位形。以6自由度双臂为对象,给定两臂当前关节角,通过比例控制器生成平滑轨迹,使左右臂在相同时间内到达目标位形,并保证同步过程中及最终状态下两臂对应关节角度误差小于0.1°。
核心实现
import numpy as np
# 双臂各6自由度,定义初始与目标关节角(单位:度)
# 左臂初始位形(任意给定)
qL_init = np.array([10.0, -20.0, 15.0, 30.0, -5.0, 25.0])
# 右臂初始位形(任意给定,与左臂不同)
qR_init = np.array([-15.0, 35.0, 5.0, -10.0, 20.0, -30.0])
# 预设对称目标位形(左右臂关于中平面对称)
qL_target = np.array([0.0, 30.0, -45.0, 60.0, 15.0, -20.0])
qR_target = -qL_target # 对称关系:右臂目标为左臂取反
# 控制参数
total_time = 2.0 # 总运动时间(秒)
dt = 0.01 # 控制周期(秒)
Kp = 5.0 # 比例增益
def generate_trajectory(q_init, q_target, t):
"""生成从初始到目标的光滑轨迹(三次多项式插值)"""
t_total = total_time
# 归一化时间
s = t / t_total
# 三次多项式:smoothstep 0→1
s_smooth = 3 * s**2 - 2 * s**3
return q_init + (q_target - q_init) * s_smooth
def sync_move_to_symmetric_pose():
"""双臂同步运动到对称位形,返回最终关节角与最大同步误差"""
n_steps = int(total_time / dt)
qL = qL_init.copy()
qR = qR_init.copy()
max_sync_error = 0.0 # 记录同步过程中最大左右臂对应关节角度差
for i in range(n_steps + 1):
t = i * dt
# 计算当前时刻期望位置(轨迹插值)
qL_des = generate_trajectory(qL_init, qL_target, t)
qR_des = generate_trajectory(qR_init, qR_target, t)
# 比例控制律:向期望位置收敛
qL = qL + Kp * (qL_des - qL) * dt
qR = qR + Kp * (qR_des - qR) * dt
# 记录同步误差(左右臂对应关节角度差)
sync_err = np.max(np.abs(qL - qR - (qL_target - qR_target)))
max_sync_error = max(max_sync_error, sync_err)
return qL, qR, max_sync_error
# 执行同步运动
qL_final, qR_final, max_sync_err = sync_move_to_symmetric_pose()
# 验证结果
print("=== 双臂同步运动结果 ===")
print(f"左臂最终关节角: {np.round(qL_final, 4)}")
print(f"右臂最终关节角: {np.round(qR_final, 4)}")
print(f"左臂目标关节角: {qL_target}")
print(f"右臂目标关节角: {qR_target}")
# 验证1:是否到达目标位形
pos_err_L = np.max(np.abs(qL_final - qL_target))
pos_err_R = np.max(np.abs(qR_final - qR_target))
print(f"\n左臂最大位置误差: {pos_err_L:.6f}°")
print(f"右臂最大位置误差: {pos_err_R:.6f}°")
# 验证2:同步误差是否小于0.1°
print(f"\n运动过程中最大同步误差: {max_sync_err:.6f}°")
if pos_err_L < 0.1 and pos_err_R < 0.1 and max_sync_err < 0.1:
print("\n✓ 验证通过:双臂均到达目标位形,且同步误差小于0.1°")
else:
print("\n✗ 验证失败:存在超差项")
运行与验证
运行方式:将代码保存为 arm_sync.py,执行 python arm_sync.py。需要NumPy库(pip install numpy)。
验证方法:程序输出三项关键指标——左右臂最终关节角与目标值的最大偏差、运动全程中左右臂对应关节的最大同步误差。当三项指标均小于0.1°时,输出“验证通过”。
预期输出:由于比例控制存在稳态误差,最终位置误差与增益Kp相关。当Kp=5.0、总时间2.0秒时,稳态误差趋近于0(实际小于0.001°),同步误差同样远小于0.1°阈值,满足设计要求。
关键说明
- 对称位形定义:右臂目标关节角取左臂目标关节角的相反数(
qR_target = -qL_target),实现关于机器人中轴面的镜像对称。 - 同步机制:两臂共用同一时间基准
t和相同的轨迹生成函数,保证运动时间一致;比例控制器使实际关节角跟踪期望轨迹。 - 误差来源:控制周期
dt越小、增益Kp越大,跟踪精度越高。本参数下误差远小于0.1°阈值。 - 扩展性:若需实际机器人执行,将计算出的
qL_final、qR_final作为目标角度发送至底层位置控制器即可。