3. 使用鼠标拖拽机器人末端

任务目标

在RoboDK仿真环境中,通过鼠标直接拖拽机器人末端执行器(TCP),直观调整机器人位姿。拖拽过程中机器人逆解实时更新各关节角度,松开鼠标后机器人停留在目标位姿。本案例实现一个独立可运行的Python脚本,调用RoboDK API完成拖拽交互的启用与参数配置。

环境依赖

  • RoboDK软件(含仿真环境)
  • RoboDK Python API(robodk包,随RoboDK安装自动提供)
  • Python 3.x

实现原理

RoboDK内置setDragMode方法可启用鼠标拖拽模式。启用后,用户在仿真视口中用鼠标左键按住机器人末端并移动,RoboDK自动完成逆运动学求解并实时更新关节值。松开鼠标即完成位姿调整。脚本只需正确获取机器人对象并设置拖拽模式即可,无需手动处理逆解。

关键完整代码

from robodk.robolink import *  # RoboDK API
from robodk.robomath import *  # 数学工具

# 连接RoboDK(若已打开则连接,否则启动新实例)
RDK = Robolink()

# 获取仿真环境中的机器人(默认取第一个)
robot = RDK.Item('', ITEM_TYPE_ROBOT)
if not robot.Valid():
    raise Exception('未在RoboDK中找到机器人,请先加载机器人模型')

# 获取机器人末端工具(TCP)
tool = robot.Item('', ITEM_TYPE_TOOL)
if not tool.Valid():
    # 若未定义工具,则使用机器人法兰盘作为拖拽参考点
    tool = robot

# 启用鼠标拖拽模式(参数1表示拖拽末端执行器)
robot.setDragMode(1)

print('拖拽模式已启用。请在RoboDK视口中用鼠标左键按住机器人末端并拖动。')
print('当前拖拽参考点: ' + tool.Name())
print('按Ctrl+Shift+M可切换回手动移动模式。')

运行与操作步骤

  1. 打开RoboDK,加载任意机器人模型(如ABB IRB 120)。
  2. 在RoboDK的Python脚本编辑器(或外部IDE)中运行上述代码。
  3. 运行成功后,控制台输出提示信息。
  4. 在RoboDK主视口中,将鼠标光标移动到机器人末端(TCP坐标系的Z轴原点附近),按住鼠标左键并拖动。
  5. 观察机器人各关节随鼠标移动实时变化,松开鼠标后机器人保持当前位姿。

验证方法

  • 拖拽生效验证:拖拽时机器人关节值(可在RoboDK左侧面板查看)应实时更新,且机器人末端跟随鼠标光标移动。
  • 逆解正确性验证:拖拽到任意可达位置后松开鼠标,点击RoboDK工具栏的“移动机器人”按钮,确认机器人末端位置与松开鼠标时的位置一致。
  • 模式切换验证:按Ctrl+Shift+M退出拖拽模式后,鼠标拖拽不再改变机器人位姿,说明模式切换正常。

常见问题

  • 拖拽无反应:确认鼠标点击位置在机器人末端TCP坐标系的Z轴原点附近(通常显示为彩色坐标轴中心),且机器人处于可达空间内。
  • 拖拽时机器人跳动:可能是逆解多解导致,RoboDK默认选择最近解。可在拖拽前调用robot.setPoseTool()明确工具坐标系,或调整机器人关节限位。
  • 代码报错“未找到机器人”:确认RoboDK中已加载机器人模型,且未处于隐藏状态。

补充说明

本脚本仅启用拖拽交互,不包含自动路径规划或碰撞检测。若需在拖拽时实时获取位姿数据,可在循环中调用robot.Pose()读取当前末端位姿矩阵,但本案例聚焦于拖拽功能本身的最小实现。