Robot Module/cn



机器人工作台是一个用于模仿工业 6-Axis Robot 的工具，就像 Kuka. 用它可以完成以下任务：
 * 用机器人和工件设立一个模拟环境
 * 创建和填补轨迹
 * 将一个 CAD 零件的特征分解为轨迹
 * 模拟机器人的运动及其可达性
 * 将轨迹导出为机器人程序文件

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

工具
这里提供了设置机器人的主要命令.

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


 * [[Image:Robot_CreateRobot.png|30px]] 创建机器人: 在场景中插入一个新机器人
 * [[Image:Robot_Simulate.png|30px]] 模拟轨迹: 打开模拟对话框并进行轨迹模拟
 * [[Image:Robot_Export.png|30px]] 导出轨迹: 导出一个机器人程序文件
 * [[Image:Robot_SetHomePos.png|30px]] 设置起始位置: 设置机器人的起始位置
 * [[Image:Robot_RestoreHomePos.png|30px]] 还原初始位置: 将机器人移动到起始位置

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

非参数性轨迹

 * [[Image:Robot_CreateTrajectory.png|30px]] 创建轨迹: 在场景中插入一个新机器人
 * [[Image:Robot_SetDefaultOrientation.png|30px]] 设置默认方位: 设置默认的方位航向点
 * [[Image:Robot_SetDefaultValues.png|30px]] 设置速度参数默认值: 设置默认的航向点创建
 * [[Image:Robot_InsertWaypoint.png|30px]] 插入航向点: 从当前机器人位置向轨迹中插入一个航向点
 * [[Image:Robot_InsertWaypointPre.png|30px]] 插入航向点: 从当前的鼠标位置向轨迹中插入一个航向点

参数性轨迹

 * [[Image:Robot_Edge2Trac.png|30px]] 由边创建轨迹: 插入一个新对象，该对象将边分解为轨迹
 * [[Image:Robot_TrajectoryDressUp.png|30px]] 修饰轨迹: 覆盖轨迹的一个或多个属性
 * [[Image:Robot_TrajectoryCompound.png|30px]] 轨迹复合: 由多个单轨迹创建一个复合轨迹

脚本编程
本节是由 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") 定义的可视化表示和运动的定义（见 6-Axis Robot 和 VRML 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))