Robot Workbench/ja



ロボットワークベンチはKukaのような産業用6軸ロボットのシミュレートのためのツールです. 以下の作業を行うことができます：
 * ロボット、加工物とシミュレーション環境のセットアップ
 * 軌道の作成と書き込み
 * CAD部品形状を軌道に分解
 * ロボットの動作と到達可能範囲のシミュレート
 * ロボットプログラムファイルへの軌道のエクスポート

以下で例を見ることができます： サンプルファイル または ロボットのチュートリアル

ツール
ロボット設定を作成するのに使う主要なコマンドです.

ロボット
6軸ロボットを作成、管理するためのツール


 * [[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 必要であればこのファイルを直接使用することもできます.

6軸産業用ロボットを表す基本ロボットクラスRobot6Axisの使用例です. ロボットモジュールはパートモジュールにのみ依存します. その動作にはほとんどの場合は基本的な型であるPlacement、Vector、Matrixで事足ります. 従って必要なのは以下のモジュールだけです： from Robot import * from Part import * from FreeCAD import *

基本的なロボット処理
ロボットを作成. 異なるキネマティックを指定しない限りはPuma560になります. 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") 視覚的な表示と運動の記述を定義します（詳細については六軸ロボットとロボットシミュレーション用のVRMLの準備を見てください） 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

シミュレーション
作っておきます..... ;-)

軌道のエクスポート
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))

Tools
Here the principal commands you can use to create a robot set-up.

Robots
The tools to create and manage the 6-Axis robots


 * [[Image:Robot_CreateRobot.png|30px]] Create a robot: Insert a new robot into the scene
 * [[Image:Robot_Simulate.png|30px]] Simulate a trajectory: Opens the simulation dialog and lets you simulate
 * [[Image:Robot_Export.png|30px]] Export a trajectory: Export a robot program file
 * [[Image:Robot_SetHomePos.png|30px]] Set home positon: Set the home position of a robot
 * [[Image:Robot_RestoreHomePos.png|30px]] Restore home positon: move the robot to its home position

Trajectories
Tools to create and manipulate trajectories. There are two kinds, the parametric and non parametric ones.

non parametric trajectories

 * [[Image:Robot_CreateTrajectory.png|30px]] Create a trajectory: Inserts a new empty trajectory-object into the scene
 * [[Image:Robot_SetDefaultOrientation.png|30px]] Set the default orientation: Set the orientation way-points gets created by default
 * [[Image:Robot_SetDefaultValues.png|30px]] Set the default speed parameter: Set the default values for way-point creation
 * [[Image:Robot_InsertWaypoint.png|30px]] Insert a waypoint: Insert a way-point from the current robot position into a trajectory
 * [[Image:Robot_InsertWaypointPre.png|30px]] Insert a waypoint: Insert a way-point from the current mouse position into a trajectory

parametric trajectories

 * [[Image:Robot_Edge2Trac.png|30px]] Create a trajectory out of edges: Insert a new object which decompose edges to a trajectory
 * [[Image:Robot_TrajectoryDressUp.png|30px]] Dress-up a trajectory: Lets you override one or more properties of a trajectory
 * [[Image:Robot_TrajectoryCompound.png|30px]] Trajectory compound: Create a compound out of some single trajectories

Scripting
This section is generated out of: https://github.com/FreeCAD/FreeCAD_sf_master/blob/master/src/Mod/Robot/RobotExample.py You can use this file directly if you want.

Example how to use the basic robot class Robot6Axis which represents a 6-axis industrial robot. The Robot module is dependent on Part but not on other modules. It works mostly with the basic types Placement, Vector and Matrix. So we need only:

Basic robot stuff
create the robot. If you do not specify another kinematic it becomes a Puma 560

accessing the axis and the Tcp. Axes go from 1-6 and are in degree:

move the first axis of the robot:

the Tcp has changed (forward kinematic)

move the robot back to start position (reverse kinematic):

the same with axis 2:

Waypoints:

generate more. The trajectory always finds automatically a unique name for the waypoints

create a trajectory

see a list of all waypoints:

Working with the document objects
Working with the robot document objects: first create a robot in the active document

Define the visual representation and the kinematic definition (see Robot 6-Axis and VRML Preparation for Robot Simulation for details about that)

start positon of the Axis (only that which differ from 0)

retrieve the Tcp position

move the robot

create an empty Trajectory object in the active document

get the Trajectory

add the actual TCP position of the robot to the trajectory

insert some more Waypoints and the start point at the end again:

Simulation
To be done.....

Exporting the trajectory
The trajectory is exported by Python. That means for every control cabinet type there is a post-processor Python module. Here is in detail the Kuka post-processor described

and that's kind of how it's done:

Tutorials

 * Robot 6-Axis
 * VRML Preparation for Robot Simulation