Robot Workbench/jp

KukaKR16FreeCAD.jpg

ロボットワークベンチはKukaのような産業用6軸ロボットのシミュレートのためのツールです。 以下の作業を行うことができます:

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

ツール

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

ロボット

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))
Online version: "http://www.freecadweb.org/wiki/index.php?title=Robot_Workbench/jp&oldid=174427"

Navigation menu