ロボットが較正されたら、較正されたロボットの絶対精度を使用してプログラムを生成するための2つのオプションがあります。
●既存のプログラムをフィルタリングする:プログラム内のすべてのロボットターゲットは、ロボットの精度を向上させるために変更されます。手動またはAPIを使用して実行できます。
●オフラインプログラミング用のRoboDKを使用して、正確なプログラムを生成します(APIを使用して生成されたプログラムを含め、生成されたプログラムは既にフィルター処理されています)。
既存のプログラムを手動でフィルタリングするには:ロボットプログラムファイルをRoboDKのメイン画面にドラッグアンドドロップします(または[ファイル]を選択します➔開いた)、[フィルターのみ]を選択します。プログラムがフィルタリングされ、同じフォルダに保存されます。フィルターの概要では、フィルターアルゴリズムの使用に問題があったかどうかが示されます。RoboDK内でプログラムをシミュレーションする場合は、プログラムをインポートするオプションもあります。プログラムに依存関係(ツールフレームまたはベースフレームの定義、サブプログラムなど)がある場合、それらは最初のプログラムがインポートされるのと同じディレクトリに配置する必要があります。
RoboDK内にプログラムをインポートしたら、絶対的な精度の有無にかかわらず、プログラムを再生成できます。RoboDKの主な精度設定(ツール➔オプション➔正確さ)常に正確な運動学を使用してプログラムを生成するか、毎回確認するか、または現在のロボット運動学を使用するかを決定できます。現在のロボットの運動学は、ロボットを右クリックして「正確な運動学を使用する」タグをアクティブ化/非アクティブ化することで変更できます。アクティブな場合は緑色のドットが表示され、アクティブでない場合は赤いドットが表示されます。
キャリブレーションされたロボットとロボットプログラムを使用して、RoboDKを使用して完全なプログラムをフィルタリングすることが可能です。 FilterProgram コール:
ロボット。FilterProgram(file_program)
FilterProgramと呼ばれるマクロの例は、ライブラリのマクロセクションにあります。次のコードは、RoboDK APIを使用してプログラムをフィルタリングするPythonスクリプトの例です。
から ロボリンク インポート * #RoboDKと通信するためのAPI
から Robodk インポート * #基本的な行列演算
インポート os #パス操作
#現在の作業ディレクトリを取得
CWD = os。道。dirname(os。道。リアルパス(__ファイル__))
#RoboDKが実行されていない場合は起動し、APIにリンクします
RDK = Robolink()
#オプション:バックグラウンドで実行する次の引数を指定します
#RDK = ロボリンク(args = '/ NOSPLASH / NOSHOW / HIDDEN')
#キャリブレーションされたステーション(.rdkファイル)またはロボットファイル(.robot)を取得します。
#ヒント:キャリブレーション後、ロボットを右クリックして[.robotとして保存]を選択します
Calibration_file= CWD + '/KUKA-KR6.rdk'
#プログラムファイルを取得します。
file_program= CWD + '/Prog1.src'
#RDKファイルまたはロボットファイルをロードします。
calib_item= RDK。AddFile(Calibration_file)
もし ない calib_item。有効():
上げる 例外(「読み込み中に問題が発生しました」 + Calibration_file)
#ロボットを取得します(ロボットが1つだけの場合はポップアップなし):
ロボット = RDK。ItemUserPick(「フィルタリングするロボットを選択してください」、 ITEM_TYPE_ROBOT)
もし ない ロボット。有効():
上げる 例外(「ロボットが選択されていないか、利用できません」)
#精度を有効にする
ロボット。setAccuracyActive(1)
#フィルタープログラム:プログラムのコピーを自動的に保存します
#ロボットのブランドに応じて名前が変更されたファイル
状態、 概要 = ロボット。FilterProgram(file_program)
もし 状態 == 0:
印刷する(「プログラムのフィルタリングに成功しました」)
印刷する(概要)
calib_item。削除する()
RDK。閉じるRoboDK()
そうしないと:
印刷する("プログラムのフィルタリングに失敗しました!エラーコード:%i" % 状態)
印刷する(概要)
RDK。ShowRoboDK()
次のコードは、RoboDK APIを使用してターゲット(ポーズターゲットまたはジョイントターゲット)をフィルタリングするPythonスクリプトの例です。 FilterTarget コマンド:
pose_filt、joints = robot.FilterTarget(nominal_pose、estimated_joints)
この例は、サードパーティのアプリケーション(RoboDK以外)がポーズターゲットを使用してロボットプログラムを生成する場合に役立ちます。
注意: APIを使用してプログラムが自動的に生成される場合、これは必要ありません。
から ロボリンク インポート * #RoboDKと通信するためのAPI
から Robodk インポート * #基本的な行列演算
デフ XYZWPR_2_Pose(xyzwpr):
返す KUKA_2_Pose(xyzwpr)#X、Y、Z、A、B、Cをポーズに変換
デフ Pose_2_XYZWPR(ポーズ):
返す Pose_2_KUKA(ポーズ)#ポーズをX、Y、Z、A、B、Cに変換する
#RoboDK APIを起動してロボットを取得します。
RDK = ロボリンク()
ロボット = RDK。項目(」、 ITEM_TYPE_ROBOT)
もし ない ロボット。有効():
上げる 例外(「ロボットは利用できません」)
pose_tcp= XYZWPR_2_Pose([0、 0、 200、 0、 0、 0])#TCPを定義する
pose_ref= XYZWPR_2_Pose([400、 0、 0、 0、 0、 0])#参照フレームを定義
#ロボットのTCPと参照フレームを更新する
ロボット。setTool(pose_tcp)
ロボット。setFrame(pose_ref)
#SolveFKとSolveIK(フォワード/インバースキネマティクス)で非常に重要
ロボット。setAccuracyActive(誤り) #精度はオンまたはオフにできます
#ジョイントスペースに公称ターゲットを定義します。
関節 = [0、 0、 90、 0、 90、 0]
#ジョイントターゲットのロボットの公称位置を計算します。
pose_rob= ロボット。SolveFK(関節)#ロボットベースのロボットフランジ
#pose_targetの計算:参照フレームに対するTCP
pose_target= invH(pose_ref)*pose_rob*pose_tcp
印刷する('フィルターされていないターゲット:')
印刷する(Pose_2_XYZWPR(pose_target))
joints_approx= 関節 #joints_approxは20度以内でなければなりません
pose_target_filt、 real_joints = ロボット。FilterTarget(pose_target、 関節)
印刷する(「フィルターされたターゲット:」)
印刷する(real_joints。リストする())
印刷する(Pose_2_XYZWPR(pose_target_filt))