FlexSimのキネマティクス機能を使用すると、1つの共通のインターフェイスから単一のオブジェクトに複数の移動オペレーションを実行させることができます。移動オペレーションは、それぞれ独自の加速、減速、開始速度、終了速度、最大速度特性を持つことができます。移動オペレーションは、互いに重ねて実行することも、順番に実行することもできます。
以下は、順番に実行される2つのキネマティクスの時間ベースのプロットです。
以下は、互いに重なる2つのキネマティクスの時間ベースのプロットです。
キネマティクスを使用すると、速度、速度、加速、減速などに関連するロジックの計算を簡単に処理することもできます。
たとえば、天井クレーンには通常、クレーンを駆動するモーターが複数あります。1つのモーターがレールに沿ってブリッジを駆動し、別のモーターがブリッジに沿ってトローリーを駆動し、さらに別のモーターがケーブルでフックまたはグラバーを持ち上げます。これらのモーターは、それぞれ独自の加速、減速、最大速度特性を持つことができます。キネマティクスを使用すると、単一のキネマティクスインターフェイスからこれらすべての動作を定義し、複数の異なるモーターを同時に動かして、クレーンのエンドエフェクタを非常に動的に動作させることができます。キネマティクスが導入される前、この動作をシミュレートする最も簡単な方法は、モデルツリーで3つの異なるオブジェクトを階層的に並べ、それぞれのオブジェクトに1つの動作またはキネマティックをシミュレートさせることでした。これは非常にうまくいくこともあれば、面倒でわかりにくくなることもあります。キネマティック機能は、1つのオブジェクトが複数の動作またはキネマティクスを同時に実行できるようにすることで、この問題を解決しようとします。
キネマティクスコマンドの概要を以下に示します。
このパラメータセットは、移動するオブジェクト(トランスポーターなど)があることを前提とします。これもまた、最初のパラメータは、空白ノードのキネマティックデータで、ラベル、属性、変数のいずれかです。2番目のパラメータは、移動を行うオブジェクトです。このコマンドは、オブジェクトの初期位置と回転を保存します。オプションのmanagerotationパラメータは1または0のいずれかです。1の場合、オブジェクトの回転は、任意の時点におけるオブジェクトの速度に従って設定されます。デフォルトでは、オブジェクトの正のx方向は、常にオブジェクトの現在の速度方向の位置を示します。これは、たとえば、移動するときに常に前方を向かせるトラックがある場合に使用されます。managerotationが0として渡された場合、オブジェクトは回転するコマンドが与えられない限り、回転しません。これについては後述します。このパラメータを指定しない場合、デフォルトではmanagerotateは0に設定されます。オプションのlocalcoordsパラメータは、後続の移動コマンドの位置の方向を指定します。たとえば、トラックが45度回転していて、x方向に5単位移動する場合、これは2つの異なる意味に解釈できます。トラックの座標系に従ってx方向に5単位移動させるのか、それともモデルの座標系(またはトラックのコンテナの座標系)に従って5単位移動させるのかということです。前者の場合、オブジェクトは実際にはモデルの座標空間に従ってx方向に3.5単位、y方向に3.5単位移動します。ただし、後者の場合は、モデルの座標空間に従ってx方向に通常の5単位移動します。localcoordsパラメータは、使用する座標系を指定します。1が渡された場合は、オブジェクトの座標系が使用されます(前者のケース)。オブジェクトが後でキネマティクスで回転する場合、オブジェクトの後続の座標系ではなく、オブジェクトの初期座標系のみが位置計算に使用されることに注意してください。0が渡された場合は、オブジェクトのコンテナの座標系が使用されます(後者のケース)。このパラメータを指定しない場合、デフォルトは0です。
このパラメータセットを使用すると、オブジェクトを参照する代わりに、初期位置および回転を明示的に渡すことができます。おそらく別のパラメータセットでオブジェクトを渡すことのほうが多いでしょうが、このパラメータセットを使用すれば究極の柔軟性が得られます。このパラメータセットは、オブジェクトの初期位置および回転を明示的に渡する場合や、位置および回転の値が必ずしもモデル内の実際の位置および回転を表していない場合に使用します。たとえば、ロボットアームをシミュレートしており、そのアームに異なる加減/減速/最大速度値で移動/回転するジョイントが複数存在するとします。アームの動きの視覚化は、明示的なFlexsimの位置/回転ではシミュレートされませんが、独自の描画コマンドとラベルまたは変数によってシミュレートされます。この場合は、キネマティクスを回転と位置に直接適用するのではなく、自分でオブジェクトに保持している情報に適用します。このような状況では、所与のキネマティクスセットは、x、y、z位置およびx、y、z回転に直接適用されると見なす必要はなく、6つの個別のキネマティック動作(それぞれ1つの軸に沿って動く)と見なすことができます。これらの6つの軸は、オブジェクトにさせる動作を表すことができます。たとえば、ロボットに4つのジョイントがあり、それぞれに回転値が1つあるとします。キネマティクスを使用してロボットの4つのジョイントを動かすには、各ジョイントでキネマティクスの1つの軸をシミュレートします。キネマティクスのx部分はジョイント1の回転に、y部分はジョイント2の回転に、z部分はジョイント3の回転に、rx部分はジョイント4の回転にそれぞれ適用されます。キネマティクスのその他の2つの部分、つまりryとrzについては、気にする必要はありません。4つの関節のそれぞれの開始回転を使用してキネマティクスを初期化し、各ジョイントに個別に適用されるキネマティクスを追加できます。次に、後でロボットアームの動きを描画するためにジョイントの現在の回転値を取得する場合は、updatekinematicsコマンドの代わりにgetkinematicsコマンドを使用して明示的に値を取得します。これらの値はオブジェクトの位置または回転に適用しません。これらのコマンドについては後で説明します。
このコマンドは、managerotationがinitkinematicsに1として渡された場合にのみ使用されます。これにより、回転の管理に使用する初期回転を設定できます。デフォルトでは、オブジェクトの正のx方向は、常にオブジェクトの現在の速度方向の位置を示します。トラックの場合は、前方に移動するように常に回転させるのではなく、後方に移動させる場合があります。ここでは、(0,0,180)の回転オフセットを指定できます。
このコマンドは、キネマティクスのセットにキネマティックを追加します。x、y、zパラメータは、オフセット位置または回転を構成します。たとえば、位置(5,5,0)は、x方向に5、y方向に5移動するようキネマティックに指示します。これらはオブジェクトの現在の位置からのオフセットであり、絶対位置ではありません。targetspeedパラメータは、移動オペレーションの目標速度を指定します。他のパラメータはオプションです。accは加速を指定します。decは減速を指定します。startspeedはキネマティックの開始速度を指定します。この速度が目標速度よりも高い場合、オブジェクトは開始速度で開始し、目標速度まで減速します。endspeedはオペレーションの終了速度を指定します。endspeedがtargetspeedよりも大きい場合、オブジェクトはオペレーションの終了時に目標速度から終了速度まで加速します。starttimeは、現在の時間からのオフセットとしてではなく、シミュレーション時間でのキネマティックの開始時間です。typeパラメータは、キネマティックのタイプを指定します。この値は、通常はKINEMATIC_TRAVELまたはKINEMATIC_ROTATEのいずれかです。値がKINEMATIC_TRAVELの場合、オペレーションはx、y、z位置の値に適用されます。KINEMATIC_ROTATEの場合、オペレーションはrx、ry、rz回転の値に適用され、速度は単位時間あたりの度数、加速/減速は単位時間あたりの度数の二乗で定義されます。このコマンドは、このキネマティックオペレーションが終了する時間を返します。
以下は、加速と減速を使用してx方向に3、y方向に2移動するキネマティックの時間ベースのプロットです。
KINEMATIC_TRAVELとKINEMATIC_ROTATEに加えて、3つの「旋回」キネマティックタイプがあります。これらは、移動中のオブジェクトを指定された旋回半径で特定の角度に旋回させます。このタイプのキネマティックは、KINEMATIC_TURN_XY、KINEMATIC_TURN_YZ、KINEMATIC_TURN_ZXです。これらのキネマティックタイプの場合、addkinematic()に渡すx、y、zパラメータは、次のように異なる意味を持ちます。
このキネマティックタイプの他のすべてのパラメータ(最大速度、加速、減速など)は同じです。速度は単位時間あたりの長さ単位であり、単位時間あたりの度数ではありません。
たとえば、x軸に沿った正の移動からx軸から60度離れた移動へと旋回半径5(つまり、z軸の周りを旋回)で旋回する動作を作成する場合は、次のように呼び出します。
addkinematic(kinematics, 0, 60, 5, 1, 1, 1, 0, 0, time(),
KINEMATIC_TURN_XY);
このコマンドは、キネマティックオペレーションの途中、通常は前描画または描画時に呼び出す必要があります。追加されたすべてのキネマティクスと現在の更新時間に従って、オブジェクトの現在の位置と回転を計算して設定します。updatetimeパラメータはオプションです。渡されない場合、現在のシミュレーション時間が使用されます。
このコマンドは、キネマティクスに関する明示的な情報を取得する場合に使用します。キネマティクスセット全体または個々のキネマティックに関する情報を取得できます。このコマンドは、キネマティクスがオブジェクトの位置や回転に直接適用されない場合、またはロジックでこの情報が必要な場合に使用します。typeパラメータは、必要な情報のタイプを指定します。これについてはすぐ後で説明します。kinematicindexパラメータはオプションで、情報を取得する個々のキネマティックを指定します。たとえば、x方向に5単位移動するキネマティックを2つ目のaddkinematicコマンドとして追加する場合は、getkinematicsコマンドにkinematicindexパラメータとして2を渡します。値を渡さない場合、またはここで値0を渡した場合、デフォルトではすべてのキネマティクスに関する情報がまとめて取得されます。updatetime/traveldistパラメータはオプションです。このパラメータの意味は、指定したtypeパラメータによって異なります。このパラメータは使用されないことがあります。情報を取得するために要求した更新時間を表すこともあります。渡されない場合、現在の時間が使用されます。KINEMATIC_ARRIVALTIMEクエリの場合、このパラメータは代わりに移動距離を表します。このパラメータの使用方法については、クエリタイプごとに説明します。
情報 | typeパラメータの値 | 単一のキネマティック | すべてのキネマティクス |
---|---|---|---|
場所 | KINEMATIC_X KINEMATIC_Y KINEMATIC_Z |
指定された更新時間における指定されたキネマティックの現在の位置のx、y、またはz成分を返します。たとえば時間5に開始し、x方向に10単位移動するキネマティックを追加し、時間7におけるこの特定のキネマティックのx位置を知りたい場合は、getkinematiczs(datanode, KINEMATIC_X, index, 7)を呼び出して時間7のx位置を取得できます。 | 指定された更新時間におけるオブジェクトのx、y、またはz位置を返します。 |
終了距離 | KINEMATIC_ENDDIST | オブジェクトの初期位置からすべてのキネマティクスの最終的な目的地までの距離を返します。ここでは、updatetimeパラメータは使用されません。 | |
合計距離 | KINEMATIC_TOTALDIST | キネマティックオペレーションの合計距離を返します。 | 追加されたすべてのキネマティクスの距離の合計を返します。これはKINEMATIC_ENDDISTとは微妙に異なります。 たとえば、最初のキネマティックがx方向に10移動し、2番目のキネマティックがx方向に-10移動する場合、enddist値は0になりますが、totaldist値は20になります。ここでは、updatetimeパラメータは使用されません。 |
合計成分距離 | KINEMATIC_TOTALX KINEMATIC_TOTALY KINEMATIC_TOTALZ |
キネマティックオペレーションの合計距離のx、y、またはz成分を返します。これらはaddkinematicコマンドに渡したものと同じ値です。ここでは、updatetimeパラメータは使用されません。 | 追加されたすべてのキネマティクスのx、y、またはz成分の合計を返します。ここでは、updatetimeパラメータは使用されません。 |
累積距離 | KINEMATIC_CUMULATIVEDIST | 追加されたすべてのキネマティクスの累積移動距離を返します。enddistまたはtotaldistとは異なり、キネマティックオペレーション全体の実行中にオブジェクトがたどる(おそらくは曲線状の)パスの距離を計算します。ここでは、updatetimeパラメータは使用されません。注意:累積距離に関しては、旋回キネマティクスを使用している場合、その旋回キネマティクスは他の移動または旋回キネマティクスと重なってはなりません。旋回キネマティクスが他のキネマティクスと重なる場合、累積距離が正しく計算されません。 | |
速度 | KINEMATIC_VX KINEMATIC_VY KINEMATIC_VZ |
指定された更新時間における指定されたキネマティックの現在の速度のx、y、またはz成分を返します。 | 指定された時間のオブジェクトのx、y、またはz速度を返します。 |
開始速度 | KINEMATIC_STARTSPEED | キネマティックの開始速度を返します。これはaddkinematicコマンドで指定するstartspeedです。ここでは、updatetimeパラメータは使用されません。 | |
ピーク速度 | KINEMATIC_PEAKSPEED | キネマティックのピーク速度または「到達速度」を返します。これは通常はaddkinematicコマンドで指定される目標速度と同じですが、キネマティックが所与の移動距離で目標速度に到達できない場合は、必ずしもそうではありません。ここでは、updatetimeパラメータは使用されません。 | |
終了速度 | KINEMATIC_ENDSPEED | これはキネマティックの終了速度を返します。これは通常はaddkinematicコマンドで指定する終了速度ですが、キネマティックが所与の移動距離で指定された終了速度に減速/加速できない場合は、必ずしもそうではありません。ここでは、updatetimeパラメータは使用されません。 | |
合計速度 | KINEMATIC_VELOCITY | 指定された時間のキネマティックの合計速度を返します。 | 指定された時間の合計速度のスカラー値を返します。 |
加速(開始) | KINEMATIC_ACC1 | 開始速度から目標速度まで到達するために使用される加速度値を返します。開始速度が目標速度よりも小さい場合、この値は加速値になります。そうでない場合は、負の減速値になります。ここでは、updatetimeパラメータは使用されません。 | |
加速(停止) | KINEMATIC_ACC2 | 目標速度から最終速度まで到達するために使用される加速度値を返します。終了速度が目標速度よりも小さい場合は、負の減速値を返します。そうでない場合は、加速値を返します。ここでは、updatetimeパラメータは使用されません。 | |
回転 | KINEMATIC_RX KINEMATIC_RY KINEMATIC_RZ |
指定された更新時間における回転キネマティックのx、y、またはz回転を返します。 | 指定された更新時間におけるオブジェクトのx、y、またはz回転を返します。これは、手動で回転を管理する場合にのみ有効です。 |
終了回転距離 | KINEMATIC_ENDRDIST | オブジェクトの初期回転位置からすべてのキネマティクスの最終的な回転位置までの距離を返します。これは、手動で回転を管理する場合にのみ有効です。ここでは、updatetimeパラメータは使用されません。 | |
合計回転距離 | KINEMATIC_TOTALRDIST | キネマティックオペレーションが回転キネマティックである場合、そのキネマティックオペレーションの合計回転距離を返します。 | 追加されたすべてのキネマティクスの回転距離の合計を返します。これは自分で回転を管理している場合にのみ有効です。ここでは、updatetimeパラメータは使用されません。 |
合計成分回転 | KINEMATIC_TOTALRX KINEMATIC_TOTALRY KINEMATIC_TOTALRZ |
キネマティックオペレーションが回転キネマティックである場合、そのキネマティックオペレーションの合計回転距離のx、y、またはz成分を返します。これらはaddkinematicコマンドに渡したものと同じ値です。ここでは、updatetimeパラメータは使用されません。 | 追加されたすべてのキネマティクスのrx、ry、またはrz成分の合計を返します。これは自分で回転を管理している場合にのみ有効です。ここでは、updatetimeパラメータは使用されません。 |
累積回転距離 | KINEMATIC_CUMULATIVERDIST | 追加されたすべてのキネマティクスの累積回転移動距離を返します。これは自分で回転を管理している場合にのみ有効です。ここでは、updatetimeパラメータは使用されません。 | |
回転速度 | KINEMATIC_VRX KINEMATIC_VRY KINEMATIC_VRZ |
キネマティックが回転キネマティックである場合、指定された時間における指定されたキネマティックの現在の回転速度のx、y、またはz成分を返します。 | 指定された時間のオブジェクトのx、y、またはzの回転速度を返します。 |
合計回転速度 | KINEMATIC_RVELOCITY | キネマティックが回転キネマティックである場合、指定された時間のキネマティックの合計回転速度を返します。 | これは、指定された時間の合計回転速度のスカラー値を返します。これは、手動で回転を管理する場合にのみ有効です。 |
開始時間 | KINEMATIC_STARTTIME | 指定されたキネマティックがオペレーションを開始する時間を返します。これは、キネマティックを追加したときに指定したstarttimeと同じです。ここでは、updatetimeパラメータは使用されません。 | すべてのキネマティクスの最小開始時間を返します。ここでは、updatetimeパラメータは使用されません。 |
加速時間(開始時) | KINEMATIC_ACC1TIME | キネマティックが開始速度から目標速度まで加速/減速するのに費やす合計時間を返します。ここでは、updatetimeパラメータは使用されません。 | |
到着時刻 | KINEMATIC_ARRIVALTIME | このクエリでは、updatetime/traveldistパラメータが、指定されたキネマティックの要求された移動距離として使用されます。指定されたキネマティックの特定の副距離の到着時間を返します。たとえば、オブジェクトにx方向に5単位移動するように指示するキネマティックを追加したものの、オブジェクトがその5単位のうち3単位だけ移動するのにかかる時間を知りたい場合は、このクエリを使用し、traveldistパラメータとして3を渡します。 | |
ピーク時間 | KINEMATIC_PEAKTIME | キネマティックがピーク速度で移動するのに費やす合計時間を返します。ここでは、updatetimeパラメータは使用されません。 | |
加速時間(停止時) | KINEMATIC_ACC2TIME | キネマティックが目標速度から終了速度まで加速/減速するのに費やす合計時間を返します。ここでは、updatetimeパラメータは使用されません。 | |
終了時間 | KINEMATIC_ENDTIME | 指定されたキネマティックがオペレーションを完了する時間を返します。これはaddkinematicコマンドから返される終了時間と同じです。ここでは、updatetimeパラメータは使用されません。 | すべてのキネマティックの最高終了時間を返します。ここでは、updatetimeパラメータは使用されません。 |
キネマティクスの数 | KINEMATIC_NR | 追加されたキネマティクスの数を返します。ここでは、updatetimeパラメータは使用されません。 | |
旋回キネマティックデータ | KINEMATIC_STARTANGLE KINEMATIC_TURNANGLE KINEMATIC_TURNRADIUS |
旋回キネマティックの開始角度、旋回角度、旋回半径を返します。 | |
キネマティックタイプ | KINEMATIC_TYPE | 指定されたキネマティックが移動オペレーションである場合はKINEMATIC_TRAVELを、回転オペレーションである場合はKINEMATIC_ROTATEをそれぞれ返します。 |
このコマンドは、キネマティック情報を出力コンソールに出力します。indexパラメータはオプションです。渡されない場合、追加されたすべてのキネマティクスの情報が出力されます。渡された場合、インデックス変数は、情報を出力する追加されたキネマティックのインデックスです。
このコマンドは、updatekinematicsコマンドが呼び出されたときに位置を更新しないようキネマティクスに指示します。リセット時にこのコマンドを実行すると、オブジェクトが解放され、正投影ビューで動かせるようになります。