4. 设置机器人工具坐标系
任务说明
在RoboDK中,机器人默认工具坐标系(TCS)位于法兰盘中心。实际应用中需为机器人安装吸盘、焊枪等末端执行器,并定义工具坐标系的原点(TCP)与姿态,使机器人能够准确控制工具末端位置。本案例以吸盘为例,演示如何创建自定义工具、设置TCP偏移量及工具姿态,并验证设置结果。
环境依赖
- RoboDK软件(v5.0及以上)
- RoboDK Python API(
robodk包,随软件安装) - 任意工业机器人模型(如ABB IRB 120,RoboDK库自带)
实现代码
以下代码完成:加载机器人→创建吸盘工具→设置TCP位置与姿态→将工具附加到机器人法兰→输出工具坐标系验证信息。
from robodk import robolink, robomath
RDK = robolink.Robolink()
# 1. 加载机器人(若场景中已有则复用)
robot = RDK.Item('', robolink.ITEM_TYPE_ROBOT)
if not robot.Valid():
robot = RDK.AddFile(RDK.getParam('ROBODK_PATH') + '/library/Robots/ABB/IRB 120.robot')
if not robot.Valid():
raise Exception('无法加载机器人模型,请手动添加')
# 2. 创建吸盘工具(基于简单几何体)
suction_cup = RDK.AddCylinder(50, 10) # 半径50mm,高度10mm
suction_cup.setName('Suction Cup')
suction_cup.setPose(robomath.transl(0, 0, 100)) # 初始位置在法兰前方100mm
# 3. 定义工具坐标系:TCP位置 + 姿态
# 吸盘底面中心为TCP,相对法兰偏移 (0, 0, 120)mm,姿态与法兰一致
tcp_pose = robomath.transl(0, 0, 120) * robomath.rotz(0) # 无旋转
suction_cup.setPose(tcp_pose)
# 4. 将工具作为机器人子物体(安装到法兰)
robot.addChild(suction_cup, robot)
# 5. 在RoboDK中设置该工具为机器人的活动工具坐标系
RDK.setTool(suction_cup, robot)
# 6. 验证:读取并输出工具坐标系相对法兰的变换
tool_pose = suction_cup.PoseTool()
print('工具坐标系相对法兰的变换矩阵:')
print(tool_pose)
print('TCP位置 (X, Y, Z) mm:', tool_pose.Pos())
print('TCP姿态 (Rx, Ry, Rz) deg:', robomath.Pose_2_KUKA(tool_pose)[3:6])
运行方式
- 打开RoboDK软件,新建空白站(或打开已有站)。
- 在RoboDK的Python脚本编辑器(或外部IDE)中粘贴上述代码。
- 确保Python解释器已关联RoboDK API(RoboDK菜单→Tools→Options→Python)。
- 运行脚本。若场景中已有机器人,脚本会复用;否则自动加载ABB IRB 120。
验证方法
- 视觉检查:运行后,吸盘应出现在机器人法兰前方,且吸盘底面中心(TCP)位于法兰坐标系Z轴正方向120mm处。
- 数据验证:控制台输出的变换矩阵中,平移向量应为
[0, 0, 120](单位mm),旋转部分为单位矩阵(姿态与法兰一致)。 - 交互验证:在RoboDK中手动移动机器人(如沿X轴平移),吸盘应随法兰同步运动,且TCP点位置始终与法兰保持固定偏移。
若输出平移向量为 [0, 0, 120] 且视觉上吸盘正确附着,则工具坐标系设置成功。