Back to Overview

Robot Arm

Tools & Techart Topics

これは、私の最初のロボットリグのひとつで、実際のロボットアームを「ライブ」で駆動させるという素晴らしいチャレンジでした。

自動車産業で使われているような機械的なアームを手に入れたという連絡があったのですが、そのアームを動かすためには、ロボットアームの各要素がどのように回転するかという情報を一行ずつ与えなければならないそうです。これを少しでも早く行うために、通常の方法では、コントローラを使って行うべきタスクをプログラムし、その手順を記録することになります。

この機械をどのように操作するのか、またどのように機能するのか、私にとってはすべてが初めての経験でした。私が入手した唯一の情報は、同じ機械のCADモデルの正確な寸法と、機械に出力する必要のあるコードのラインでした。

最初に受け取ったコードは次のようなものだった。

MoveAbsJ [[Rotate_1,Rotate_2,Rotate_3,Rotate_4,Rotate_5,Rotate_6],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]\NoEOffs,vAxis_7,z50,tool0;

つまり、どのような回転をどのような順番で行うかを考えなければなりませんでした。回転の単位がラジアンなのか度なのかわからなかったので、最初は非常に小さな値でテストしましたが、そこからどの回転がロボットのどの要素にあたるのかを考えて、スクリプトを考えていきました。

これらの値に基づいて、ジョイントの向きと、そのジョイントが動作するrotateOrderを作成しました。次のテストは、小さな動きで回転値をエクスポートして、重なっているかどうかを確認することでした。

robot Arm rig

  • 注:画像中の緑のボックスは部屋の中の安全地帯の大きさで、この範囲を超えないようにテの動きを確認し、さらにアームが届かないところまでの動きをテストしました。

これらの要素がすべて揃ったところで、ロボットを制御するためのより良い方法を検討し始めました。軸の回転値をエクスポートしてもうまくいかず、ロボットはいくつかの要素で360度以上伸びることができましたが、リグの制限により、これをMayaから追加することはできませんでした。

少し調べてみたところ、動作する別のコマンドを見つけました。

MoveL [[Axis_X,Axis_Y,Axis_Z],[Quat_W,Quat_X,Quat_Y,Quat_Z],[BaseRot_Y,replace,repace,replace],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],v2500,z50,tool0;

当時の理解では、これはデフォルトのアームエクステンションを使用した場合のチップの位置です。これはMayaのメッシュ上にあるドリルエクステンションからさらに離れたところにある黒いロケータです。そしてクォータニオンの値は、この点の現在の回転を表しています。つまり、ドリルの先端のワールドマトリックスとベースプレートの回転の情報が得られたわけです。ロボットアームのいくつかの機能は、mayaのIKと同じで、同じ目的地に到達するためにIKを反転(または180度のねじれ)させることができるので、機械が予期せぬ方法で回転しないようにするために、これを無効にしました。

さらに、あらかじめコンパイルされたコードをロボットのマシンに送り込むのではなく、シンプルなPythonポート接続を作成してマシンに直接情報を送り込むことで、Mayaとまったく同じ動きをリアルタイムに実現しました。欠点としては、誤ってマニピュレーターを遠くに移動させたときにマシンが壁を突き抜けてしまわないように、タイムラインを再生しないと情報が送信されないことです。また、ロボットの所有者がロボット自体の速度制限を解除してしまうため、Mayaにはアームを動かす速度の制限が組み込まれていました。

/