Robot Workbench/jp



ロボットワークベンチは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))