Robot Workbench/ja: Difference between revisions
No edit summary |
(Updating to match new version of source page) |
||
Line 1: | Line 1: | ||
<languages/> |
<languages/> |
||
[[Image: |
[[Image:Workbench_Robot.svg|64px]] |
||
== Introduction == |
|||
<div class="mw-translate-fuzzy"> |
|||
ロボットワークベンチは[http://kuka.com/ Kuka]のような産業用[[6-Axis Robot/jp|6軸ロボット]]のシミュレートのためのツールです。 |
ロボットワークベンチは[http://kuka.com/ Kuka]のような産業用[[6-Axis Robot/jp|6軸ロボット]]のシミュレートのためのツールです。 |
||
以下の作業を行うことができます: |
以下の作業を行うことができます: |
||
Line 9: | Line 12: | ||
* ロボットの動作と到達可能範囲のシミュレート |
* ロボットの動作と到達可能範囲のシミュレート |
||
* ロボットプログラムファイルへの軌道のエクスポート |
* ロボットプログラムファイルへの軌道のエクスポート |
||
</div> |
|||
You can do the following tasks: |
|||
* Set up a simulation environment with a robot and work pieces. |
|||
* Create and fill up movement trajectories. |
|||
* Decompose features of a CAD part to a trajectory. |
|||
* Simulate the robot movement and reaching distance. |
|||
* Export the trajectory to a robot program file. |
|||
<div class="mw-translate-fuzzy"> |
|||
以下で例を見ることができます: |
以下で例を見ることができます: |
||
[http://www.freecad-project.de/svn/ExampleData/Examples/RobotSimulation/ サンプルファイル] または [[Robot tutorial/jp|ロボットのチュートリアル]] |
[http://www.freecad-project.de/svn/ExampleData/Examples/RobotSimulation/ サンプルファイル] または [[Robot tutorial/jp|ロボットのチュートリアル]] |
||
</div> |
|||
{{TOCright}} |
|||
[[Image:Robot_Workbench_example.jpg|600px]] |
|||
== ツール == |
== ツール == |
||
Line 20: | Line 36: | ||
6軸ロボットを作成、管理するためのツール |
6軸ロボットを作成、管理するためのツール |
||
<div class="mw-translate-fuzzy"> |
|||
* [[Image:Robot_CreateRobot.png|30px]] [[Robot_CreateRobot/jp|ロボットを作成]]: シーンに新しいロボットを挿入します |
* [[Image:Robot_CreateRobot.png|30px]] [[Robot_CreateRobot/jp|ロボットを作成]]: シーンに新しいロボットを挿入します |
||
* [[Image:Robot_Simulate.png|30px]] [[Robot_Simulate/jp|軌道をシミュレート]]: シミュレーションダイアログを開き、シミュレートを行います |
* [[Image:Robot_Simulate.png|30px]] [[Robot_Simulate/jp|軌道をシミュレート]]: シミュレーションダイアログを開き、シミュレートを行います |
||
Line 25: | Line 42: | ||
* [[Image:Robot_SetHomePos.png|30px]] [[Robot_SetHomePos/jp|定位置を設定]]: ロボットの定位置を設定します |
* [[Image:Robot_SetHomePos.png|30px]] [[Robot_SetHomePos/jp|定位置を設定]]: ロボットの定位置を設定します |
||
* [[Image:Robot_RestoreHomePos.png|30px]] [[Robot_RestoreHomePos/jp|定位置に戻す]]: ロボットを定位置に動かします |
* [[Image:Robot_RestoreHomePos.png|30px]] [[Robot_RestoreHomePos/jp|定位置に戻す]]: ロボットを定位置に動かします |
||
</div> |
|||
=== 軌道 === |
=== 軌道 === |
||
軌道を作成し、操作するためのツールです。パラメトリックなものと非パラメトリックなものの二種類があります。 |
軌道を作成し、操作するためのツールです。パラメトリックなものと非パラメトリックなものの二種類があります。 |
||
<div class="mw-translate-fuzzy"> |
|||
==== 非パラメトリック ==== |
==== 非パラメトリック ==== |
||
* [[Image:Robot_CreateTrajectory.png|30px]] [[Robot_CreateTrajectory/jp|軌道を作成]]: シーンに新しいロボットを挿入します |
* [[Image:Robot_CreateTrajectory.png|30px]] [[Robot_CreateTrajectory/jp|軌道を作成]]: シーンに新しいロボットを挿入します |
||
Line 35: | Line 54: | ||
* [[Image:Robot_InsertWaypoint.png|30px]] [[Robot_InsertWaypoint/jp|通過点を挿入]]: 現在のロボット位置から軌道に通過点を挿入します |
* [[Image:Robot_InsertWaypoint.png|30px]] [[Robot_InsertWaypoint/jp|通過点を挿入]]: 現在のロボット位置から軌道に通過点を挿入します |
||
* [[Image:Robot_InsertWaypointPre.png|30px]] [[Robot_InsertWaypointPre/jp|通過点を挿入]]: 現在のマウス位置から軌道に通過点を挿入します |
* [[Image:Robot_InsertWaypointPre.png|30px]] [[Robot_InsertWaypointPre/jp|通過点を挿入]]: 現在のマウス位置から軌道に通過点を挿入します |
||
</div> |
|||
<div class="mw-translate-fuzzy"> |
|||
==== パラメトリック ==== |
==== パラメトリック ==== |
||
* [[Image:Robot_Edge2Trac.png|30px]] [[Robot_Edge2Trac/jp|エッジから軌道を作成]]: エッジを軌道に分解した新しいオブジェクトを挿入します |
* [[Image:Robot_Edge2Trac.png|30px]] [[Robot_Edge2Trac/jp|エッジから軌道を作成]]: エッジを軌道に分解した新しいオブジェクトを挿入します |
||
* [[Image:Robot_TrajectoryDressUp.png|30px]] [[Robot_TrajectoryDressUp/jp|軌道をドレスアップ]]: 軌道の一つ以上のプロパティを上書きします |
* [[Image:Robot_TrajectoryDressUp.png|30px]] [[Robot_TrajectoryDressUp/jp|軌道をドレスアップ]]: 軌道の一つ以上のプロパティを上書きします |
||
* [[Image:Robot_TrajectoryCompound.png|30px]] [[Robot_TrajectoryCompound/jp|軌道を合成]]: 複数の単一軌道を合成したものを作成します |
* [[Image:Robot_TrajectoryCompound.png|30px]] [[Robot_TrajectoryCompound/jp|軌道を合成]]: 複数の単一軌道を合成したものを作成します |
||
</div> |
|||
<div class="mw-translate-fuzzy"> |
|||
== スクリプト処理 == |
== スクリプト処理 == |
||
このセクションは以下のスクリプトから生成されています: http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Robot/RobotExample.py?view=markup |
このセクションは以下のスクリプトから生成されています: 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 * |
|||
{{Code|code= |
|||
from Robot import * |
|||
from Part import * |
|||
from FreeCAD import * |
|||
}} |
|||
=== 基本的なロボット処理 === |
|||
ロボットを作成。異なるキネマティックを指定しない限りはPuma560になります。 |
|||
rob = Robot6Axis() |
|||
print rob |
|||
{{Code|code= |
|||
rob = Robot6Axis() |
|||
print rob |
|||
}} |
|||
軸とTCPにアクセスします。軸は1から6まであり、単位は度(°)です。 |
|||
Start = rob.Tcp |
|||
print Start |
|||
print rob.Axis1 |
|||
{{Code|code= |
|||
Start = rob.Tcp |
|||
print Start |
|||
print rob.Axis1 |
|||
}} |
|||
move the first axis of the robot: |
|||
{{Code|code= |
|||
rob.Axis1 = 5.0 |
|||
}} |
|||
the Tcp has changed (forward kinematic) |
|||
{{Code|code= |
|||
print rob.Tcp |
|||
}} |
|||
move the robot back to start position (reverse kinematic): |
|||
{{Code|code= |
|||
rob.Tcp = Start |
|||
print rob.Axis1 |
|||
}} |
|||
the same with axis 2: |
|||
{{Code|code= |
|||
rob.Axis2 = 5.0 |
|||
print rob.Tcp |
|||
rob.Tcp = Start |
|||
print rob.Axis2 |
|||
}} |
|||
Waypoints: |
|||
{{Code|code= |
|||
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 |
|||
{{Code|code= |
|||
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 |
|||
{{Code|code= |
|||
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: |
|||
{{Code|code= |
|||
print t.Waypoints |
|||
del rob,Start,t,l,w |
|||
}} |
|||
=== ドキュメントを使った処理 === |
|||
<div class="mw-translate-fuzzy"> |
|||
ロボットドキュメントオブジェクトを使った処理 |
|||
まずアクティブなドキュメントにロボットを作成します |
|||
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)) |
|||
</div> |
</div> |
||
{{Code|code= |
|||
if(App.activeDocument() == None):App.newDocument() |
|||
App.activeDocument().addObject("Robot::RobotObject","Robot") |
|||
}} |
|||
Define the visual representation and the kinematic definition (see [[Robot_6-Axis|Robot 6-Axis]] and [[VRML Preparation for Robot Simulation|VRML Preparation for Robot Simulation]] for details about that) |
|||
{{Code|code= |
|||
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) |
|||
{{Code|code= |
|||
App.activeDocument().Robot.Axis2 = -90 |
|||
App.activeDocument().Robot.Axis3 = 90 |
|||
}} |
|||
retrieve the Tcp position |
|||
{{Code|code= |
|||
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp |
|||
}} |
|||
move the robot |
|||
{{Code|code= |
|||
pos.move(App.Vector(-10,0,0)) |
|||
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos |
|||
}} |
|||
create an empty Trajectory object in the active document |
|||
{{Code|code= |
|||
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory") |
|||
}} |
|||
get the Trajectory |
|||
{{Code|code= |
|||
t = App.activeDocument().Trajectory.Trajectory |
|||
}} |
|||
add the actual TCP position of the robot to the trajectory |
|||
{{Code|code= |
|||
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: |
|||
{{Code|code= |
|||
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 |
|||
{{Code|code= |
|||
from KukaExporter import ExportCompactSub |
|||
See the [[Robot API example]] for a description of the functions used to model the robot displacements. |
|||
ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src') |
|||
}} |
|||
and that's kind of how it's done: |
|||
{{Code|code= |
|||
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)) |
|||
}} |
|||
==チュートリアル== |
==チュートリアル== |
||
* [[Robot 6-Axis|Robot 6-Axis]] |
* [[Robot 6-Axis|Robot 6-Axis]] |
||
*[[VRML Preparation for Robot Simulation|VRMLのロボットシミュレーション準備]] |
*[[VRML Preparation for Robot Simulation|VRMLのロボットシミュレーション準備]] |
||
<div class="mw-translate-fuzzy"> |
|||
{{docnav|FEM Module|Standard Menu}} |
{{docnav|FEM Module|Standard Menu}} |
||
{{docnav/jp|Drawing Module/jp|Raytracing Module/jp}} |
{{docnav/jp|Drawing Module/jp|Raytracing Module/jp}} |
||
</div> |
|||
[[Category:User Documentation]] |
Revision as of 21:13, 15 January 2019
Introduction
ロボットワークベンチはKukaのような産業用6軸ロボットのシミュレートのためのツールです。 以下の作業を行うことができます:
- ロボット、加工物とシミュレーション環境のセットアップ
- 軌道の作成と書き込み
- CAD部品形状を軌道に分解
- ロボットの動作と到達可能範囲のシミュレート
- ロボットプログラムファイルへの軌道のエクスポート
You can do the following tasks:
- Set up a simulation environment with a robot and work pieces.
- Create and fill up movement trajectories.
- Decompose features of a CAD part to a trajectory.
- Simulate the robot movement and reaching distance.
- Export the trajectory to a robot program file.
以下で例を見ることができます: サンプルファイル または ロボットのチュートリアル
ツール
ロボット設定を作成するのに使う主要なコマンドです。
ロボット
6軸ロボットを作成、管理するためのツール
軌道
軌道を作成し、操作するためのツールです。パラメトリックなものと非パラメトリックなものの二種類があります。
非パラメトリック
- 軌道を作成: シーンに新しいロボットを挿入します
- デフォルトの方向を設定: デフォルトで作成される方位通過点を設定します
- デフォルトの速度パラメーターを設定: 通過点作成時に使用されるデフォルト値を設定します
- 通過点を挿入: 現在のロボット位置から軌道に通過点を挿入します
- 通過点を挿入: 現在のマウス位置から軌道に通過点を挿入します
パラメトリック
- エッジから軌道を作成: エッジを軌道に分解した新しいオブジェクトを挿入します
- 軌道をドレスアップ: 軌道の一つ以上のプロパティを上書きします
- 軌道を合成: 複数の単一軌道を合成したものを作成します
スクリプト処理
このセクションは以下のスクリプトから生成されています: http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Robot/RobotExample.py?view=markup 必要であればこのファイルを直接使用することもできます。
See the Robot API example for a description of the functions used to model the robot displacements.