Robot Workbench/ja: Difference between revisions
(Created page with "Robot Workbench") |
(Created page with "right|400px ロボットワークベンチは[http://kuka.com/ Kuka]のような産業用6軸ロボットのシミュレー...") |
||
Line 2: | Line 2: | ||
[[Image:KukaKR16FreeCAD.jpg|right|400px]] |
[[Image:KukaKR16FreeCAD.jpg|right|400px]] |
||
<div class="mw-translate-fuzzy"> |
|||
The robot workbench is a tool to simulate industrial grade [[Robot_6-Axis|Robot 6-Axis]], like e.g. [http://kuka.com/ Kuka]. |
|||
[[Image:KukaKR16FreeCAD.jpg|right|400px]] |
|||
You can do the following tasks: |
|||
* set up a simulation environment with a robot and work pieces |
|||
ロボットワークベンチは[http://kuka.com/ Kuka]のような産業用[[6-Axis Robot/jp|6軸ロボット]]のシミュレートのためのツールです。 |
|||
* create and fill up trajectories |
|||
以下の作業を行うことができます: |
|||
* decompose features of an CAD part to a trajectory |
|||
* ロボット、加工物とシミュレーション環境のセットアップ |
|||
* simulate the robot movement and reachability |
|||
* 軌道の作成と書き込み |
|||
* export the trajectory to a robot program file |
|||
* CAD部品形状を軌道に分解 |
|||
* ロボットの動作と到達可能範囲のシミュレート |
|||
* ロボットプログラムファイルへの軌道のエクスポート |
|||
以下で例を見ることができます: |
|||
[http://www.freecad-project.de/svn/ExampleData/Examples/RobotSimulation/ サンプルファイル] または [[Robot tutorial/jp|ロボットのチュートリアル]] |
|||
== ツール == |
|||
ロボット設定を作成するのに使う主要なコマンドです。 |
|||
=== ロボット === |
|||
6軸ロボットを作成、管理するためのツール |
|||
* [[Image:Robot_CreateRobot.png|30px]] [[Robot_CreateRobot/jp|ロボットを作成]]: シーンに新しいロボットを挿入します |
|||
* [[Image:Robot_Simulate.png|30px]] [[Robot_Simulate/jp|軌道をシミュレート]]: シミュレーションダイアログを開き、シミュレートを行います |
|||
* [[Image:Robot_Export.png|30px]] [[Robot_Export/jp|軌道をエクスポート]]: ロボットプログラムファイルをエクスポートします |
|||
* [[Image:Robot_SetHomePos.png|30px]] [[Robot_SetHomePos/jp|定位置を設定]]: ロボットの定位置を設定します |
|||
* [[Image:Robot_RestoreHomePos.png|30px]] [[Robot_RestoreHomePos/jp|定位置に戻す]]: ロボットを定位置に動かします |
|||
=== 軌道 === |
|||
軌道を作成し、操作するためのツールです。パラメトリックなものと非パラメトリックなものの二種類があります。 |
|||
==== 非パラメトリック ==== |
|||
* [[Image:Robot_CreateTrajectory.png|30px]] [[Robot_CreateTrajectory/jp|軌道を作成]]: シーンに新しいロボットを挿入します |
|||
* [[Image:Robot_SetDefaultOrientation.png|30px]] [[Robot_SetDefaultOrientation/jp|デフォルトの方向を設定]]: デフォルトで作成される方位通過点を設定します |
|||
* [[Image:Robot_SetDefaultValues.png|30px]] [[Robot_SetDefaultValues/jp|デフォルトの速度パラメーターを設定]]: 通過点作成時に使用されるデフォルト値を設定します |
|||
* [[Image:Robot_InsertWaypoint.png|30px]] [[Robot_InsertWaypoint/jp|通過点を挿入]]: 現在のロボット位置から軌道に通過点を挿入します |
|||
* [[Image:Robot_InsertWaypointPre.png|30px]] [[Robot_InsertWaypointPre/jp|通過点を挿入]]: 現在のマウス位置から軌道に通過点を挿入します |
|||
==== パラメトリック ==== |
|||
* [[Image:Robot_Edge2Trac.png|30px]] [[Robot_Edge2Trac/jp|エッジから軌道を作成]]: エッジを軌道に分解した新しいオブジェクトを挿入します |
|||
* [[Image:Robot_TrajectoryDressUp.png|30px]] [[Robot_TrajectoryDressUp/jp|軌道をドレスアップ]]: 軌道の一つ以上のプロパティを上書きします |
|||
* [[Image:Robot_TrajectoryCompound.png|30px]] [[Robot_TrajectoryCompound/jp|軌道を合成]]: 複数の単一軌道を合成したものを作成します |
|||
== スクリプト処理 == |
|||
このセクションは以下のスクリプトから生成されています: 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") |
|||
視覚的な表示と運動の記述を定義します(詳細については[[6-Axis Robot/jp|六軸ロボット]]と[[VRML Preparation for Robot Simulation/jp|ロボットシミュレーション用の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)) |
|||
{{docnav/jp|Drawing Module/jp|Raytracing Module/jp}} |
|||
[[Category:User Documentation/jp]] |
|||
</div> |
|||
You can find an example here: |
You can find an example here: |
Revision as of 08:27, 6 December 2018
ロボットワークベンチはKukaのような産業用6軸ロボットのシミュレートのためのツールです。 以下の作業を行うことができます:
- ロボット、加工物とシミュレーション環境のセットアップ
- 軌道の作成と書き込み
- CAD部品形状を軌道に分解
- ロボットの動作と到達可能範囲のシミュレート
- ロボットプログラムファイルへの軌道のエクスポート
以下で例を見ることができます: サンプルファイル または ロボットのチュートリアル
ツール
ロボット設定を作成するのに使う主要なコマンドです。
ロボット
6軸ロボットを作成、管理するためのツール
- ロボットを作成: シーンに新しいロボットを挿入します
- 軌道をシミュレート: シミュレーションダイアログを開き、シミュレートを行います
- 軌道をエクスポート: ロボットプログラムファイルをエクスポートします
- 定位置を設定: ロボットの定位置を設定します
- 定位置に戻す: ロボットを定位置に動かします
軌道
軌道を作成し、操作するためのツールです。パラメトリックなものと非パラメトリックなものの二種類があります。
非パラメトリック
- 軌道を作成: シーンに新しいロボットを挿入します
- デフォルトの方向を設定: デフォルトで作成される方位通過点を設定します
- デフォルトの速度パラメーターを設定: 通過点作成時に使用されるデフォルト値を設定します
- 通過点を挿入: 現在のロボット位置から軌道に通過点を挿入します
- 通過点を挿入: 現在のマウス位置から軌道に通過点を挿入します
パラメトリック
- エッジから軌道を作成: エッジを軌道に分解した新しいオブジェクトを挿入します
- 軌道をドレスアップ: 軌道の一つ以上のプロパティを上書きします
- 軌道を合成: 複数の単一軌道を合成したものを作成します
スクリプト処理
このセクションは以下のスクリプトから生成されています: 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))
You can find an example here: Example files or try the Robot tutorial.
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
- Create a robot: Insert a new robot into the scene
- Simulate a trajectory: Opens the simulation dialog and lets you simulate
- Export a trajectory: Export a robot program file
- Set home positon: Set the home position of a robot
- 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
- Create a trajectory: Inserts a new empty trajectory-object into the scene
- Set the default orientation: Set the orientation way-points gets created by default
- Set the default speed parameter: Set the default values for way-point creation
- Insert a waypoint: Insert a way-point from the current robot position into a trajectory
- Insert a waypoint: Insert a way-point from the current mouse position into a trajectory
parametric trajectories
- Create a trajectory out of edges: Insert a new object which decompose edges to a trajectory
- Dress-up a trajectory: Lets you override one or more properties of a trajectory
- 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:
from Robot import *
from Part import *
from FreeCAD import *
Basic robot stuff
create the robot. If you do not specify another kinematic it becomes a Puma 560
rob = Robot6Axis()
print rob
accessing the axis and the Tcp. Axes go from 1-6 and are in degree:
Start = rob.Tcp
print Start
print rob.Axis1
move the first axis of the robot:
rob.Axis1 = 5.0
the Tcp has changed (forward kinematic)
print rob.Tcp
move the robot back to start position (reverse kinematic):
rob.Tcp = Start
print rob.Axis1
the same with axis 2:
rob.Axis2 = 5.0
print rob.Tcp
rob.Tcp = Start
print rob.Axis2
Waypoints:
w = Waypoint(Placement(),name="Pt",type="LIN")
print w.Name,w.Type,w.Pos,w.Cont,w.Velocity,w.Base,w.Tool
generate more. The trajectory always finds automatically a unique name for the waypoints
l = [w]
for i in range(5):
l.append(Waypoint(Placement(Vector(0,0,i*100),Vector(1,0,0),0),"LIN","Pt"))
create a trajectory
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"))
see a list of all waypoints:
print t.Waypoints
del rob,Start,t,l,w
Working with the document objects
Working with the robot document objects: first create a robot in the active document
if(App.activeDocument() == None):App.newDocument()
App.activeDocument().addObject("Robot::RobotObject","Robot")
Define the visual representation and the kinematic definition (see Robot 6-Axis and VRML Preparation for Robot Simulation for details about that)
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"
start positon of the Axis (only that which differ from 0)
App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90
retrieve the Tcp position
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
move the robot
pos.move(App.Vector(-10,0,0))
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos
create an empty Trajectory object in the active document
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
get the Trajectory
t = App.activeDocument().Trajectory.Trajectory
add the actual TCP position of the robot to the trajectory
StartTcp = App.activeDocument().Robot.Tcp
t.insertWaypoints(StartTcp)
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory
insert some more Waypoints and the start point at the end again:
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
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
from KukaExporter import ExportCompactSub
ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src')
and that's kind of how it's done:
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))
Tutorials