Curve
CVMove命令による自由曲線CP動作で使用する動作軌跡のファイルを作成します。与えられたポイントをすべて通るような曲線が動作軌跡となります。
書式
Curve ファイル名,動作曲線の開閉,モード指定,座標軸数 [,補間方式],連続ポイントデータ指定
パラメーター
ファイル名
ポイントデータが保存されるファイル名を文字列で指定します。拡張子は".CVT"固定です。拡張子を省略した場合、.CVTの拡張子が自動的に追加されます。Curve命令が実行されると、ファイルが作成されます。パスを指定することはできません。また、ChDiskなどの影響を受けません。詳細は、ChDiskを参照してください。
動作曲線の開閉
曲線動作の終了時における動作曲線の開閉を指定します。このパラメーターは、下記のいずれかの文字を指定します。
- C -生成する曲線が閉曲線
- O -生成する曲線が開曲線
開曲線を指定すると、Curve命令は、連続ポイントデータの最後のポイントでアームが停止します。閉曲線を指定すると、Curve命令は、最終ポイントを通過した後も動作を継続し、アームを連続ポイントデータの始点に戻して動作を停止します。
閉曲線を指定すると、開始ポイントと最終ポイントの接線方向が一致するようになります。
下の図はP1~P4を入力とした場合の閉曲線と開曲線を比較したものです。閉区間の場合、P1まで動作します。また、動作の開始と終了が滑らかにつながります。
モード指定
0~3ビット目を用いて姿勢補正するかどうか (ツールの姿勢を曲線の接線方向に自動的に補間するかどうか)を指定します。4~7ビット目でECP番号が指定できます。
| モード指定 | 姿勢補正 | ECP番号 | |
|---|---|---|---|
| 16進数 | 10進数 | ||
| &H00 | 0 | しない | 0 |
| &H10 | 16 | 1 | |
| &H20 | 32 | 2 | |
| … | … | … | |
| &HA0 | 160 | 10 | |
| &HB0 | 176 | 11 | |
| &HC0 | 192 | 12 | |
| &HD0 | 208 | 13 | |
| &HE0 | 224 | 14 | |
| &HF0 | 240 | 15 | |
| &H02 | 2 | する | 0 |
| &H12 | 18 | 1 | |
| &H22 | 34 | 2 | |
| … | … | … | |
| &HA2 | 162 | 10 | |
| &HB2 | 178 | 11 | |
| &HC2 | 194 | 12 | |
| &HD2 | 210 | 13 | |
| &HE2 | 226 | 14 | |
| &HF2 | 242 | 15 | |
姿勢補正を指定する場合は、アームは、連続ポイントデータの始点の姿勢のみを使います。途中のポイントのUVW座標は無視されます。姿勢補正を有効にした場合は、自由曲線の接線方向から見た時に、ツールの姿勢が常に一定になるように姿勢を維持します。これは、カッターのように、継続して接線方向への制御が必要なツールのときに指定します。
ワークの外周をなぞるようなポイントデータに対して、閉曲線と姿勢補正を同時に選択した場合、最終ポイントでは初期姿勢と同一姿勢になりますが、J6Flagまたはボールねじの回転数が異なります。
下の図は水平多関節型ロボットでの例になります。閉曲線かつ姿勢補正なしでP1~P8を指定した場合、P1~P8までを通過します。一方で、閉曲線と姿勢補正を同時に選択した場合、曲線の接線方向に従ってツール姿勢が補正されます。それにより、ツールはP1,P2’~P8’を通過します。P2~P8で指定した姿勢は無視されます。閉曲線のため、自由曲線の開始位置までツールは動作しますが、CVMove動作前後でボールねじがU軸に対して1回転した状態になります。
左:姿勢補正無し/右:姿勢補正有り
ECPを使用する場合は、4~7ビット目にECP番号を指定してください。
ECPは、ロボットでワークを把持し、ロボット周辺に固定されたツールを用いてワークの稜線に沿って軌跡制御させたい場合に有効です。外部制御点(ECP)座標系(オプション)についての基本的な説明は以下を参照ください。
"Epson RC+ ユーザーズガイド - SPEL+言語 - 座標系 - 外部制御点(ECP)座標系(オプション)"
ポイントデータに含まれる付加軸の位置を考慮した自由曲線を生成する場合、8ビット目を"1"に指定してください。例えば、姿勢補正およびECPを使用せず、付加軸位置を考慮した自由曲線を生成する場合には、"&H100"を指定します。
付加軸で自由曲線を生成する場合は、ロボット座標系とは関係なくS関節、T関節それぞれ独立に連続ポイントデータをつなぎます。
ただし、付加軸がPG軸で構成されている場合は、連続ポイントによる自由曲線は生成されず、最終ポイントに動作するデータが作成されます。
モード指定のビットと機能の対応は以下の通りです。
| ビット | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|
| データ | 付加軸 | ECP番号 | 姿勢補正 | ||||||
座標軸数
曲線動作中に制御される座標軸数を2, 3, 4, 6の整数で指定します。
- 2 - 姿勢を含まないXY平面で自由曲線を生成します。 (垂直6軸型 (Nシリーズを含む)以外)
- 3 - 姿勢を含まないXYZ空間で自由曲線を生成します。 (垂直6軸型 (Nシリーズを含む)以外)
- 4 - 姿勢を含むXYZ空間で自由曲線を生成します。 (垂直6軸型 (Nシリーズを含む)以外)
- 6 - 姿勢を含むXYZ空間で自由曲線を生成します。 (垂直6軸型 (Nシリーズを含む)のみ)
制御対象に選択されていない軸は、前回のエンコーダーパルス位置を保持し、Curve動作中は動作しません。例えば、水平多関節型ロボットで座標軸数に2を指定してカーブファイルを作成した場合、指定したポイントのZ座標によらず、CVMove動作中にZ軸は動作しません。
補間方式
曲線の補間方式を指定します。IM_CMPTBLを指定した場合、Ver8.1.1より前のファームウェアと互換性のある補間方式となります。IM_NORMALを指定した場合、新しい補間方式となります。省略可能で、省略した場合IM_CMPTBLで実行されます。
新しい補間方式では下記のようなメリットがあります。
- カーブファイル作成時間が短くなります
- 動作速度の調整機能により、姿勢変化の大きい動作でもエラーが発生しずらくなります。
- 直線区間を作成しやすくなります
- 姿勢補間がなめらかになります
通常はIM_NORMALを指定してください。補間方式の違いについては解説を参照してください。
連続ポイントデータ指定 { ポイントデータ| ポイント番号(初め:終わり) } [,出力コマンド] ...
このパラメーターそれぞれのポイントデータをカンマ (,)で区切って指定します。ポイントデータに抜けがなく、昇順、または降順に並んでいる場合は、2つのポイント番号をコロンで結合してP(1:5)のように指定できます。
ポイントデータはすべて同一の座標系で定義されている必要があります。異なるローカル座標系で定義されたポイントが含まれる場合はエラーになります。また、垂直6軸型ロボットの場合、ポイントデータのハンド姿勢、肘姿勢、手首姿勢はすべて一致している必要があります。水平多関節型ロボットの場合、ハンド姿勢はすべて一致している必要があります。
動作に同期して、途中でI/Oの出力ポートをオン、またはオフする場合は、カンマ (,)で区切って出力命令を記述することができます。
通常は、連続ポイントデータは、下記のようにカンマで区切って指定します。
Curve "MyFile", O, 0, 4, P1, P2, P3, P4
または、コロンを使って下記のように指定します
Curve "MyFile", O, 0, 4, P(1:4)
上記の例では、P1、P2、P3、P4を使って曲線を指定しています。出力コマンドは、省略可能で、曲線動作中に出力操作を制御するときに使います。このコマンドは、I/OまたはメモリーI/Oのオンオフを指定します。出力命令は、直前の、連続ポイントデータの特定のポイントを、アームが通過した後に実行されます。1つのCurveステートメントに含むことのできる出力コマンドの数は、最大16個です。下記の例では、アームがP2を通過した後に"On 2"コマンドが実行され、その後アームは、P3からP10までのすべてのポイントを通過します。
Curve "MyFile", C, 0, 4, P1, P2, ON 2, P(3:10)
解説
この命令は、指定されたポイントデータによって、ロボットアームが自由曲線CP動作を行うためのファイルを作成し、そのデータをコントローラーのファイルに保存します。この命令によって作成されたデータは、CVMove命令によるCP動作実行時に使用されます。
Curve命令は指定された各ポイントのX, Y, Z, U, V, W座標値を独立に、3次スプライン関数を用いて計算し、それにより軌跡を生成します。よって、ポイント間の間隔が大きかったり、姿勢の変化が大きい場合には、生成される軌跡は想定しづらくなります。
軌跡を重視したい区間や姿勢が急激に変化する区間ではポイントを細かく指定してください。
動作時の速度・加減速度は、Curve命令前に指定しておく必要はありません。CVMove実行前ならSpeedSやAccelSなどの命令を使って変更できます。
ポイントデータがローカル座標系で指定されている場合、ローカル座標系を基準にカーブファイルが作成されます。Curve命令実行後にLocal命令でローカル座標系を変更した場合、CVMove命令も変更後のローカル座標系に合わせてオフセットされます。
モード指定にECPを指定した場合、ECP座標を基準にカーブファイルが作成されます。Curve命令実行後にECPSet命令でECP座標を変更した場合、CVMove命令も変更後のECP座標に合わせてオフセットされます。
Ver8.1.1以降のファームウェアでは、曲線の補間方式を追加しています。通常は補間方式にIM_NORMALを指定してください。
補間方式がIM_NORMALのとき、隣り合う4点が直線上に並んでいる場合、真ん中の区間は必ず直線になります。また、ポイントデータの中のあるポイントを変更した場合、変更した点の前後2点間の経路が変わります。
下の図はP1~P8をカーブファイルに指定した場合の自由曲線になります。P3,P4,P5,P6は直線上に配置されているため、P4-P5間は必ず直線になります。
P5を変更した場合は、P3-P4,P4-P5,P5-P6,P6-P7の区間の経路が変わります。
また、Ver8.1.1以降のファームウェアでは、動作速度の調整機能が有効です。そのため、姿勢が急激に変化する区間ではTCP速度を低下させ可能な限り加速度エラーが発生しないように調整します。この調整機能は、補間方式にIM_NORMALを指定した場合のみ有効です。
注意
開曲線におけるポイント群のポイント数の範囲
開曲線では、3~1000ポイントを指定してください。
閉曲線におけるポイント群のポイント数の範囲
RC800系コントローラーの場合、閉曲線では、3~1000ポイントを指定してください。
ポイント数が多い場合、処理時間が長くなります
Ver8.1.1より前のファームウェア、または、Ver8.1.1以降のファームウェアで補間方式にIM_CMPTBLを指定した場合、最大ポイント数でCurveコマンドを実行すると、開曲線では数秒程度、閉曲線では数十秒程度の時間がかかります。
処理時間が問題になる場合は補間方式にIM_NORMALを指定してください。
ファイルの互換性
Ver.7.5.1以降のファームウェアで作成されたファイルは、それより前のバージョンのファームウェアで使用できません。また、Ver.7.5.1より前のファームウェアで作成されたファイルは、Ver.7.5.1以降のファームウェアで使用できます。
Ver.8.1.1以降のファームウェアで作成されたファイルは、それより前のバージョンのファームウェアで使用できません。また、Ver.8.1.1より前のファームウェアで作成されたファイルは、Ver.8.1.1以降のファームウェアで使用できます。
起こりやすいエラー
可動範囲外で、アームを動作させようとしたとき
Curve命令は、設定された曲線の動作範囲のチェックを行うことができません。これは、ロボットアームの動作中にユーザーが設定した曲線の軌跡が、可動範囲外に出るかもしれないことを意味します。このような場合、動作命令実行中に「動作範囲外」のエラーになります。
ポイントの間隔が不均一な場合
ポイント間隔が不均一な場合、生成される曲線の加速度が異常に高くなることがあります。このような場合、異常加速度エラーが発生することがあります。
CVMove実行中に異常加速度エラーが発生する場合、補間方式をIM_NORMALに変更してください。
参照
AccelS関数, Arc, Arc3, CVMove, ECP, Move, SpeedS
Curve使用例1
下記のプログラムは水平多関節型ロボットを用いた場合の例です。mycurve.CVTという名前のカーブファイルを作成します。
ロボットはP1~P7を通過する曲線をトレースします。動作実行中、P2を通過時に出力ポートをオンします。
自由曲線を設定
> curve "mycurve", O, 0, 4, IM_NORMAL, P1, P2, On 2, P(3:7)
アームをP1へJump命令で動作
> jump P1
定義した自由曲線"mycurve"でアームを移動
> cvmove "mycurve"
Curve使用例2 直線区間の作成
自由曲線動作を利用する際に、直線区間と曲線区間をギャップなく接続したい場合があります。4点を直線上に配置することで中間の2点間は完全に直線になりますが、端の区間は直線からズレます。この場合は、端の区間を短くとることでズレを低減できます。
下記のプログラムは仮想コントローラー「GX8-C Sample」で試すことができます。
(1) コーナー部分の区間が長いケース P3,P4,P5,P6は直線上に並んでいるため、P4-P5の区間は直線になります。
Function Test2_1
P1 = XY(100, 300, -50, 0)
P2 = XY(100, 360, -50, 0)
P3 = XY(100, 400, -50, 0)
P4 = XY(60, 400, -50, 0)
P5 = XY(-60, 400, -50, 0)
P6 = XY(-100, 400, -50, 0)
P7 = XY(-100, 360, -50, 0)
P8 = XY(-100, 300, -50, 0)
Motor On
Power High
Curve "Test2_1", O, 0, 4, IM_NORMAL, P(1:8)
Go P1
CVMove "Test2_1"
Fend
(2) コーナー部分の区間が短いケース (1)のP2,P4,P5,P7の代わりにP12,P14,P15,P17を用いると、直線区間P14-P15を長く取ることができます。
Function Test2_2
P1 = XY(100, 300, -50, 0)
P12 = XY(100, 395, -50, 0)
P3 = XY(100, 400, -50, 0)
P14 = XY(95, 400, -50, 0)
P15 = XY(-95, 400, -50, 0)
P6 = XY(-100, 400, -50, 0)
P17 = XY(-100, 395, -50, 0)
P8 = XY(-100, 300, -50, 0)
Motor On
Power High
Curve "Test2_2", O, 0, 4, IM_NORMAL, P1, P12, P3, P14, P15, P6, P17, P8
Go P1
CVMove "Test2_2"
Fend
Curve使用例3 姿勢補正の有無
姿勢補正機能のサンプルです。カーブファイル「Test3_1」では姿勢補正なしでU座標を指定していないためツールは一定の姿勢で動作します。カーブファイル「Test3_2」では姿勢補正が有効なため、ツールは曲線の接線方向に対して一定の角度を保ったまま動作します。途中のポイントの姿勢は無視されます。
下記のプログラムは仮想コントローラー「GX8-C Sample」で試すことができます。
(1) コーナー部分の区間が長いケース P3,P4,P5,P6は直線上に並んでいるため、P4-P5の区間は直線になります。
Function Test3
Integer i
' 円周上にポイントを登録
Local 1, XY(0, 350, -50, 0)
For i = 0 To 8
P(i) = XY(100 * Cos(2 * PI() * i / 8), 100 * Sin(2 * PI() * i / 8), 0, 0) /1
Next
Motor On
Power High
Curve "Test3_1", C, 0, 4, IM_NORMAL, P(0:8) '姿勢補正なし
Curve "Test3_2", C, 2, 4, IM_NORMAL, P(0:8) '姿勢補正あり
Go P0
CVMove "Test3_1"
Go P0
CVMove "Test3_2"
Fend
左:姿勢補正無し(Test3_1)/右:姿勢補正有り(Test3_2)