位置・姿勢の変更

ここではボディモデルの位置や姿勢を変更する基本的な操作方法を説明します。

説明にあたっては、 モデルの読み込み において紹介したPA10モデルをここでも例として用いることにしますので、Choreonoid上で操作方法を確認する際にはこのモデルを読み込んで表示させておいてください。

運動学バー

ボディモデルの位置や姿勢の操作は、以下の「運動学バー」の状態によって挙動が変わります。

../_images/KinematicsBar.png

特に最初の3つのボタンが重要です。これらのボタンはどれかひとつがONになるようになっていて、「運動学モード」を切り替えるために使います。 これらは左から、

  • 順運動学
  • プリセット運動学
  • 逆運動学

となっています。

当面はデフォルトの状態である「プリセット運動学」のボタンがONになっている状態であればOKです。これらのモードの詳細や他のボタンの機能については、追って説明します。

関節スライダビューによる姿勢の変更

モデルの姿勢を変更する際に基本となるのは、関節角度の変更です。これは様々な機能で実現することができますが、まずは基本となるビューのひとつである「関節スライダビュー」を用いて関節角を変更する方法を説明します。

準備として、PA10のボディアイテムをアイテムツリービュー上で選択状態にしてください。これで関節スライダビューの対象モデルがPA10になります。

注釈

関節スライダビューに限らず、ビューやツールバーによるモデルの操作においては、対象となるボディアイテムを選択状態にし、対象を特定しておく必要がありあます。これは一旦選択状態にすれば、その後選択を解除してもOKです。次に他のボディアイテムが選択されるまでは、最後に選択したボディアイテムが対象であり続けます。本節で出てくる他のビューやツールバーに関しても基本的にこの操作でボディアイテムを特定しておく必要がありますので、ご注意ください。

すると関節スライダビューの表示が以下のようになるかと思います。

../_images/jointslider_pa10_initial.png

このビューでは、最上部に表示切り替え用のボタンが並んでいます。その下のメイン領域に、各関節の状態を表示・変更するためのインタフェースが上から関節IDの順番で並んでいます。各関節ごとに左から、関節名、関節角現在値、最小角度、関節角スライダ、最大角度と並んでいます。上部の"ID"ボタンをONにすると、関節ID値も表示されます。

注釈

ここでは関節「角度」という用語を使っていますが、これは関節が「回転関節」の場合に対応します。ロボットの多くの関節は回転関節になりますが、他に「直動関節」もあります。実際にPA10のモデルでも手先のグリッパに対応する関節 "HAND_L" と "HAND_R" は直動関節となっています。直動関節の場合、その現在位置は「角度」ではなく普通に「位置」などと呼ぶべき値になりますが、ここでは両者を含む一般的な説明には関節角度という用語をそのまま使うことにします。

ここで関節角度値やスライダ位置はユーザが変更することができ、その操作に同期してモデルの内部状態やシーンビュー上での表示も変化します。例えば関節 "J4" の値やスライダを操作してみましょう。すると、PA10のアーム中央の関節が以下のように曲がるかと思います。

../_images/pa10_j4.png

他の関節も同様に動かすことができますので、試してみてください。

シーンビュー上での関節角の変更

関節角の変更は、シーンビュー上で関節位置をマウスで直接ドラッグすることによっても行えます。

この操作は 基本概念・操作 - シーンの表示閲覧モードと編集モード で説明した「編集モード」を用いて行います。ここの説明に従って、まずはシーンビューを編集モードに切り替えてください。そして、マウスカーソルを先ほど操作したJ4リンクの位置までもっていくと、以下のような表示になるかと思います。

../_images/j4_drag.png

ここでPA10モデルの最下部を囲う赤いマーカーは、この部分が現在のベースリンクであることを示しています。これはシーンビューが編集モードになった際に表示されますので、この表示によっても編集モードであることを確認することができます。そして、J4リンクを囲う赤いボックスは、マウスカーソルがJ4リンクを指しており、編集操作の対象リンクとなっていることを示しています。これについては、カーソルが他のリンクを指せばそちらが囲われることになります。

この状態でマウスの左ボタンを押しながらドラッグしてみてください。するとマウスのドラッグと連動してJ4関節が動くかと思います。このようにして、シーンビュー上で直観的に関節をドラッグし、姿勢を変更することができます。

また、シーンビュー上で関節をドラッグした場合でも、先ほどの関節スライダビューの状態が同期して変化します。これは関節スライダビューに限らず、ボディモデルの状態を表示・編集する全てのビューについて言えることで、そのようなビューの動作が互いに同期することで、GUI上での一貫性が常に保たれるようになっています。

ベースリンクについて

PA10モデルの最下部を囲っている赤いマーカーは現在のベースリンクを示していると述べました。ここでベースリンクというのは、運動学計算の起点となるリンクのことで、ユーザが自由に変更することができます。

この効果を確認するため、PA10のベースリンクを変更してみましょう。ベースリンクの変更は、リンクを指している状態で右クリックをすると表示されるコンテキストメニューを用いて行います。例えばリンク "J5" をマウスカーソルで指している状態で右クリックすると下図のような表示になるかと思います。

../_images/pa10_j5_tobase.png

ここでコンテキストメニューの「ベースに」を選択すると、J5がベースリンクとなります。ベースリンクを示す赤いマーカーもJ5の箇所に移ります。

この状態で、再度ジョイントスライダビュー等を使ってJ4の関節角度を変えてみましょう。するとJ4の関節角が変わるのは同じなのですが、最終的な姿勢は以下のように変わるはずです。

../_images/pa10_j4_inv.png

今までは固定されていたロボット最下部が今度は動くようになりました。逆にベースリンクにしたJ5リンクの位置は固定されています。これは関節角度から各リンクの位置を計算する順運動学計算が、ベースリンクを起点として行われるためです。

このように、ベースリンクを設定することで、姿勢において固定する部分を切り替えることができます。PA10のようなマニピュレータでは通常床に固定される土台のリンクをベースとし、他のリンクをベースとしたいことはあまり無いかもしれませんが、ロボットの形態によってはベースリンクの切り替えを活用することができるでしょう。

モデルの移動

ボディモデル全体の移動は、ベースリンクをドラッグすることで行うことができます。例えばPA10モデルの最下部にある "BASE" リンクがベースリンクとなっているときに、このリンクをクリックすると、以下のような表示になります。

../_images/pa10_move.png

このままマウスをドラッグすると、ドラッグに追従するようにモデル全体が移動します。

また、デフォルト設定では図のように3色の矢印とリングで構成されたマーカー(ポジションドラッガー)が表示されます。これをドラッグすることでもモデルの移動や、さらには回転(姿勢の変更)も行うことができます。具体的には、矢印部分をドラッグするとそれぞれの軸に沿った並進移動になり、リング部分をドラッグすると、リングの外周に沿った姿勢の回転となります。矢印やリングの赤、緑、青は、それぞれリンクのローカル座標系におけるX軸、Y軸、Z軸に対応しています。

なお、ポジションドラッガーを表示するかどうかは、運動学バーの以下のボタンで切り替えることができます。

../_images/PositionDraggerButton.png

このボタンはデフォルトではONとなっていますが、編集時にドラッガーが邪魔になるようなことがあれば、このボタンを解除することで表示を行わないようにすることができます。

位置・姿勢変更操作のUndo・Redo

位置や姿勢の編集をしていると、直前の状態に戻したくなることがあります。その際には、編集モードでマウスカーソルがモデルを指している状態で、"Ctrl + Z" を押してください。すると直前の位置・姿勢が呼び出されます。繰り返しUndoを行うことでさらにそれ以前の状態を呼び出すことも可能です。

また、"Shift + Ctrl + Z" を押すことにより、Redoとなります。これによって、Undoで戻した状態をキャンセルすることも可能です。Redo も必要なだけ繰り返すことが可能です。

ボディバー

モデルの位置や姿勢の編集をしていると、あるモデルの状態を記憶しておいてまた呼び出したり、初期状態や標準状態に戻したくなることもあります。 これを行う機能が以下に示す「ボディバー」にて提供されています。

../_images/BodyBar.png

左から1番目のボタンを押すと、現在の位置・姿勢を記憶します。そして、記憶しておいた状態は2番目のボタンを押すことで呼び出すことができます。

左から3番目のボタンは、モデルのルートリンクの位置を原点位置に移動し、姿勢も初期状態(ローカル座標系がグローバル座標系と一致する状態)にします。

4番目のボタンは全ての関節角を0とした「初期姿勢」に戻すボタンです。また、5番目のボタンでは、モデルの全関節をあらかじめ設定されている「標準姿勢」となるように変更します。モデルの定義にもよりますが、一般的に標準姿勢は初期姿勢とは異なるものとなっています。例えばPA10の例では、初期姿勢はアームが直立したものとなっていますが、標準姿勢としては以下の姿勢が登録されています。

../_images/pa10_standard.png

このロボットが実際にマニピュレータとして稼働する際には、直立して真上の物体を操作することはあまりなく、このような姿勢からロボット周囲の物体の操作に入ることが多いと思われます。そのようなことを考慮して、PA10のモデルではこの姿勢を標準姿勢として登録し、初期姿勢とは区別しています。

逆運動学による姿勢の変更

モデルの姿勢を変更する方法として、これまで特定の関節の関節角度を直接変える方法を説明しました。この場合、「まず関節の角度を指定して、その結果各リンクの位置姿勢が変わる」という手順になっており、このような処理を「順運動学」と呼びます。

順運動学は希望の姿勢を得るために有効な手法のひとつですが、これを用いることである特定のリンク、例えばマニピュレータの先端を、希望の位置・姿勢にすることは大変難しい作業となります。そこで順運動学とは逆の処理として、「あるリンクの位置姿勢を指定して、それを実現する関節角度を得る」という処理を行いたい場合があります。これを「逆運動学」と呼び、Choreonoidではこの手法によってモデルの姿勢を変えることも可能となっています。

逆運動学についてはこのように説明するより、実際に動かして試したほうが分かりやすいかと思います。PA10のモデルでもこれをやってみましょう。まず先ほど紹介したボディバーの「標準姿勢」ボタンを押して、PA10を標準姿勢にしてください。また、"BASE"リンクがベースリンクとなっている(デフォルトの状態)ことを確認してください。

そして、PA10の先端のリンク(J7)をドラッグしてみましょう。すると下図のような表示になり、先端リンクがマウスカーソルに追従して動くかと思います。(モデルの移動 と同様に、先端リンクに付与されたポジションドラッガーの各軸をドラッグすることでも、リンクを動かすことができます。)

../_images/pa10_ik.png

先端リンクを動かす際に、途中の関節が追従して動いているのが分かるかと思います。このようにして、逆運動学によってリンクの位置姿勢を直接変更することが可能となります。ある特定のリンクを望みの位置姿勢に直観的に動かしたい場合に、この逆運動学操作を活用することができます。

注釈

なぜここで一旦標準姿勢にしたかと言うと、マニピュレータが直立した状態の初期姿勢では、ロボットが「特異姿勢」になってしまっていて、先端リンクを逆運動学で動かす計算ができないからです。「標準姿勢」のように各関節がある程度曲がっているとそのような特異姿勢ではなくなります。逆運動学を利用する際にはこの点に注意する必要があります。ただし、ここでは詳細を解説しませんが、モデルによっては逆運動学の解析解が用意されているものもあり、その場合は特異姿勢をさほど気にせずに動かすことが可能です。

運動学モードの切り替え

シーンビュー上での関節角の変更 では、シーンビュー上でPA10のJ4リンクをドラッグして、順運動学による姿勢変更を行いました。また、 逆運動学による姿勢の変更 では、J7リンクをドラッグして、逆運動学による姿勢変更を行いました。これらの操作では、順運動学と逆運動学を特に指定することはありませんでしたが、これはドラッグするリンクによって運動学のタイプが自動で選択されるモードになっていたからです。その一方で、J4リンクを逆運動学で動かしたかったり、J7リンクを順運動学で動かしたい場合もあるかもしれません。そのようなときのために、運動学のタイプをユーザが明示的に切り替えることもできるようになっています。これを行うのが、運動学バーの先頭にある以下の3つのボタンです。

../_images/KinematicsBarModeButtons.png

デフォルトでは真ん中のボタンがONとなっていて、これは運動学のタイプがリンクによって自動で切り替わる「プリセット運動学モード」となっています。リンクと運動学タイプの対応はモデルごとにあらかじめ定義されており、例えばPA10モデルの場合は以下のような対応になっています。

リンク 運動学タイプ
BASE, J1〜J5 順運動学
J6〜J7 逆運動学
HAND_L, HAND_R 順運動学

以上のようなプリセット運動学モードにおける対応関係は、逆運動学で動かすことが多いと思われるリンクについては逆運動学をセットする、という方針で決められており、多くの姿勢変更操作はこれで間に合うかと思います。(この設定は実際には YAMLによる追加情報の記述プリセット運動学の設定 によって行われています。)

運動学タイプをマニュアルで指定したい場合は、残りの2つのボタンを使用します。左側のボタンは「順運動学モード」、右側のボタンは「逆運動学モード」となっています。これらどちらかのボタンがONになっていると、ドラッグするリンクとは関係なく選択されている運動学タイプが適用されることになりますので、必要に応じてモードの使い分けを行ってください。

逆運動学におけるベースリンクの指定

「逆運動学モード」で逆運動学操作を行う場合は、順運動学のときと同様にベースリンクがどこに指定されているかで挙動が変わります。

例えば、まず逆運動学モードをONにして、PA10のベースリンクをドラッグしてみてください。すると"BASE"リンクがベースリンクとなっているデフォルトの状態では、モデルの移動 と同じ動作となり、モデル全体が移動するかと思います。この場合、はベースリンクもドラッグするリンクも同じ"BASE"であり、途中に逆運動学計算をする関節がないため、このような結果になります。

そこで今度はベースリンクをアーム先端のJ7リンク等に設定しなおして、"BASE"リンクをドラッグしてみてください。すると今度はJ7リンクは固定されつつ、"BASE"リンクが動いたかと思います。これは"BASE"リンクをベースとしてJ7リンクを動かした場合のちょうど逆の操作となっています。このように、逆運動学操作を思い通りに行うためには、ベースリンクの設定にも気を払う必要があります。

ただし、デフォルトの運動学モードである「プリセット運動学モード」で逆運動学に設定されているリンクを動かす場合、ベースリンクの設定は影響を受けません。この場合は、ベースリンクをどこに設定して計算を行うかもプリセットされています。PA10の例では、逆運動学に設定されているJ6、J7リンクについて、どちらも"BASE"をベースリンクとするように設定されています。この設定が現在のベースリンクと異なっている場合は、元のベースリンク設定やマーカー表示については変更せずに、逆運動学実行時に指定のリンクが一時的にベースリンクとして使われることになります。