2. 手动移动机器人关节

任务目标

在RoboDK中加载机器人后,通过关节运动面板手动调整各关节角度值,实时观察3D场景中机器人位姿的对应变化,并读取当前末端执行器的位姿坐标。

操作步骤

  1. 打开RoboDK,加载任意工业机器人模型(如库中的ABB IRB 120)。
  2. 在左侧树形结构中选择机器人,双击或右键选择“Move Joint”(移动关节),打开关节运动面板。
  3. 面板中显示J1~J6(或对应轴数)的关节角度值,拖动滑块或直接输入数值修改角度。
  4. 观察3D视图中机器人构型随角度变化,同时面板下方或状态栏显示末端位姿(X, Y, Z, Rx, Ry, Rz)。

Python API控制方式

除手动操作外,RoboDK提供Python API实现相同的关节运动控制,便于批量测试或集成到自动化流程中。以下代码演示如何连接RoboDK、加载机器人、读取/设置关节角度并获取末端位姿。

# 手动移动机器人关节 - RoboDK Python API示例
from robodk.robolink import *    # RoboDK API
from robodk.robomath import *    # 机器人数学工具

# 连接RoboDK(需先打开RoboDK并加载机器人)
RDK = Robolink()

# 获取当前打开的机器人(若场景中有多个,可指定名称)
robot = RDK.Item('', ITEM_TYPE_ROBOT)
if not robot.Valid():
    raise Exception('未找到机器人,请先在RoboDK中加载机器人模型')

# 读取当前关节角度(单位:度)
joints_current = robot.Joints()
print('当前关节角度:', joints_current)

# 定义新的关节角度(示例:J1=10°, J2=20°, J3=30°, J4=0°, J5=45°, J6=0°)
joints_new = [10, 20, 30, 0, 45, 0]

# 移动机器人到指定关节角度
robot.MoveJ(joints_new)

# 读取移动后的末端位姿(4x4齐次变换矩阵)
pose = robot.Pose()
# 转换为欧拉角格式(X, Y, Z, Rx, Ry, Rz)
xyz = pose.Pos()
euler = pose.RotEuler()  # 默认使用XYZ欧拉角
print('末端位置 (mm):', xyz)
print('末端姿态 (deg):', euler)

# 验证:将机器人移回初始位置
robot.MoveJ(joints_current)
print('已恢复初始关节角度')

运行与验证

  • 环境要求:安装RoboDK(含Python API),并确保RoboDK正在运行。
  • 执行方式:在RoboDK菜单栏选择 Tools → Python Script → Run Script,或使用外部Python解释器运行上述代码。
  • 通过条件:
    ① 控制台输出当前关节角度数值;
    ② 执行MoveJ后,3D场景中机器人构型与设定的[10, 20, 30, 0, 45, 0]一致;
    ③ 输出的末端位置与姿态数值与RoboDK状态栏显示一致;
    ④ 脚本末尾机器人恢复初始角度,场景回到初始状态。

常见问题

  • 关节角度超限:若设定的角度超出机器人关节限位,RoboDK会弹出警告并拒绝执行,需调整数值。
  • 连接失败:确保RoboDK已打开且未处于“断开脚本”模式(Tools → Options → Python,勾选Allow Python scripting)。
  • 多机器人场景:若场景中有多个机器人,需通过名称指定目标机器人,例如 RDK.Item('ABB IRB 120', ITEM_TYPE_ROBOT)。
关节运动控制流程 关节角度控制面板 J1 10° J2 20° J3 30° J4 0° J5 45° J6 0° 末端位姿反馈 X: 452.3 mm Y: 128.7 mm Z: 310.5 mm Rx: 15.2° Ry: -8.4° Rz: 22.1° 拖动滑块 → 机器人实时运动 → 位姿数值同步更新

说明:上述SVG示意了关节角度输入与末端位姿输出之间的联动关系。实际数值会随机器人型号和当前构型不同而变化,请以RoboDK界面显示为准。