Robot Workbench/cn

From FreeCAD Documentation
Jump to: navigation, search
KukaKR16FreeCAD.jpg

机器人工作台是一个用于模仿工业 Robot 6-Axis 的工具,就像 Kuka。 用它可以完成以下任务:

  • 用机器人和工件设立一个模拟环境
  • 创建和填补轨迹
  • 将一个 CAD 零件的特征分解为轨迹
  • 模拟机器人的运动及其可达性
  • 将轨迹导出为机器人程序文件

你可以从这儿找到例子: Example files 或者去参考 Robot tutorial.

工具

这里提供了设置机器人的主要命令。

机器人

创建和管理六轴机器人的工具

轨迹

创建和操作轨迹的工具。分为两种:参数性的和非参数性的。

非参数性轨迹

参数性轨迹

脚本编程

本节是由 http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Robot/RobotExample.py?view=markup 产生出来的,你可以直接使用这个文件。

示例如何使用基本机器人中 Robot6Axis 的来模拟工业六轴机器人。机器人模块依赖于零件模块而不是其他模块。它的工作原理主要是基本类型的布局,矢量和矩阵。因此我们只需要:

from Robot import *
from Part import *
from FreeCAD import *

基本机器人事项

创建机器人。如果你不想指定另一个的话,那么默认使用的是 Puma 560 机器人。

rob = Robot6Axis()
print rob

访问轴和 Tcp。轴的次序在 1-6 之间

Start = rob.Tcp
print Start
print rob.Axis1

移动机器人的第一个轴:

rob.Axis1 = 5.0

Tcp发生了变化(前进运动)

print rob.Tcp

移动机器人返回初始位置(后退运动)

rob.Tcp = Start
print rob.Axis1

和轴 2 相同:

rob.Axis2 = 5.0
print rob.Tcp
rob.Tcp = Start
print rob.Axis2

航点:

w = Waypoint(Placement(),name="Pt",type="LIN")
print w.Name,w.Type,w.Pos,w.Cont,w.Velocity,w.Base,w.Tool

生成更多。 轨迹总是自动找到一个独特的航点名称

l = [w]
for i in range(5):
  l.append(Waypoint(Placement(Vector(0,0,i*100),Vector(1,0,0),0),"LIN","Pt"))

创建一个轨迹

t = Trajectory(l)
print t
for i in range(7):
  t.insertWaypoints(Waypoint(Placement(Vector(0,0,i*100+500),Vector(1,0,0),0),"LIN","Pt"))

查看航点清单:

print t.Waypoints

del rob,Start,t,l,w

文档处理

处理机器人文档对象: 首先在激活的文档中创建一个机器人

if(App.activeDocument() == None):App.newDocument()

App.activeDocument().addObject("Robot::RobotObject","Robot")

定义的可视化表示和运动的定义(见 Robot 6-AxisVRML Preparation for Robot Simulation 有关细节)

App.activeDocument().Robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.wrl"
App.activeDocument().Robot.RobotKinematicFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.csv"

启动轴的位置(这只是和从 0 不同)

App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90

检索TCP位置

pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp

移动机器人

pos.move(App.Vector(-10,0,0))
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos

在激活的文档中创建一个空轨迹对象

App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")

得到轨迹

t = App.activeDocument().Trajectory.Trajectory

添加机器人的实际TCP位置轨迹

StartTcp = App.activeDocument().Robot.Tcp
t.insertWaypoints(StartTcp)
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory

插入更多的航点并再次将起始点插入到最后:

for i in range(7):
  t.insertWaypoints(Waypoint(Placement(Vector(0,1000,i*100+500),Vector(1,0,0),i),"LIN","Pt"))

t.insertWaypoints(StartTcp) # end point of the trajectory
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory

模拟

To be done..... ;-)

导出轨迹

轨迹由 Python 导出。 意思是为每个控制柜类型有一个后处理器 Python 模块。 下面详细描述了 Kuka 后处理器

from KukaExporter import ExportCompactSub

ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src')

以及它是怎么做的:

for w in App.activeDocument().Trajectory.Trajectory.Waypoints:
	(A,B,C) = (w.Pos.Rotation.toEuler())
	print ("LIN {X %.3f,Y %.3f,Z %.3f,A %.3f,B %.3f,C %.3f} ; %s"%(w.Pos.Base.x,w.Pos.Base.y,w.Pos.Base.z,A,B,C,w.Name))
其他语言版本: Flag-es.jpg Flag-ru.jpg Flag-sv.jpg