チュートリアル

主に graspPlugin を初めて使う方、まだ使い始めたばかりの方を対象にしたチュートリアルです。

用語

把持計画:アームが物体をつかむ(把持する)ための関節の動きを、実際の動作に先立って算出すること

Choreonoid 1.0 基本チュートリアル

Choreonoid でモデルファイルを開き、Scene画面上に配置する手順を記します。

Choreonoid の起動

~/src/choreonoid-1.0.0 にインストールした場合、端末から

 % cd ~/src/choreonoid-1.0.0
 % bin/choreonoid

とすると、Choreonoid が起動します。

Choreonoid_1.png
本テキストでは、五段あるツールバーのうち、主に二段めのシーンビューバー、三段めのキネマティクスバー、四段めのプランナーバー、左ペインのItemsタブを使用して、画面右側のSceneタブに表示されるモデルを操作します。(各ボタンの機能はあとで解説します)
シーンビューバー
SceneViewBar.png
キネマティクスバー
KinematicsBar.png
プランナーバー
PlannerBar.png

画面下のMessageタブにも、さまざまなメッセージが表示されます。

ツールバーの詳細についてはChoreonoid 1.0 ヘルプを参照してください。

モデルファイルを開く

graspPlugin で利用するモデルは、File メニューで、Open - OpenHRP model file を使って開きます。
OpenHRPModelMenu_0.png
モデルを開くと、Items タブにチェックボックスとモデル名が表示されます。
チェックボックスをオンにすると、Scene画面上の原点に3Dモデルが表示されます。

モデルファイルは、extplugin/graspPlugin/Grasp 以下に配置されています。

PA10 ディレクトリ
ハンドロボット PA10 のモデル PA10.yaml があります。
Object ディレクトリ
さまざまなモデルファイル(拡張子 .wrl)があります。よく似た名前のファイルが二つ三つありますが、graspPlugin で使用できるのは末尾に hrp がつくファイルです。

例えば ahiru.wrl と ahiruhrp.wrl があった場合、開くことができるのは arihuhrp.wrl ということです。

OpenHRP_model_files.png
ahiru.wrl を読み込んでも、以下のようなメッセージが出るだけで何も起こりません。

 Loading OpenHRP model file "/home/asa/workspace/Choreonoid/extplugin/graspPlugin/Grasp/Object/ahiru.wrl"
 Humanoid node is not found
  -> failed.

Object ディレクトリのモデル

モデル名で示します。ファイル名は、モデル名+hrp.wrl となります。

M0:直方体(大)
M1:直方体(中)
M2:直方体(小)
ahiru:あひるのおもちゃ
biscuit:ビスケットの箱(角柱)
box:物入れ
can200:ドリンクの缶
cap:小さなキャップ
chipstar2:ケース入りのポテトチップス(円柱)
cup2:把手のあるコップ
grcTemplate:片側の側面が開いた箱
greentea350:お茶のペットボトル
iemon:お茶のペットボトル(greentea350より少し小さい)
mug2:横倒しのマグカップ
packncho:角柱型の菓子パッケージ
packncho2:直方体の、片側の角を二つ取った形状の菓子パッケージ
petfruit:ペットボトル(横倒し)
phone2:ストレート型携帯電話(アンテナあり)
remote:テレビリモコン
souken:中心が凹んだ形状のペットボトル
table-can:テーブル

Items タブ

左ペインの Items タブには、開かれたモデル(アイテム)の一覧が表示されています。
左クリックでアイテムAを選択して、右クリックメニューで操作します。
ItemMenu_0.png
Cut
選択したアイテムを一覧から消して、クリップボードに送る。子アイテムも一緒に消える。
Copy
選択したアイテムだけ、一覧から消さずにクリップボードにコピーする
Copy with children
選択したアイテムを、子アイテムごとクリップボードにコピーする
Paste
クリップボード内のアイテムを、選択したアイテムの子アイテムとして追加する

また、アイテムAを選択したまま新しいモデルを開くと、新しいモデルはアイテムAの子アイテムBとして追加されます。
アイテムAの名前の頭の三角マークをクリックすると、子モデルリストを開閉できます。

Scene ビュー

Scene ビュー上のオブジェクトを操作するには、Scene ビューバーを使います。
ツールバー上の、下図の部分が Scene ビューバーです。
SceneViewBar.png
View: View Mode に切り替え
Edit: Edit Mode に切り替え
Look: モデルが見える位置にカメラを移動
O: Ortho View Mode(正射影)に切り替え
ワイヤーフレーム: モデル表示をポリゴンとワイヤーフレームに切り替え
コリジョン: コリジョンの表示の切り替え
C: Scene ビュー画面のキャプチャ
Setup: 床面のグリッドとハイプライオリティ・レンダリングの設定

先にも述べましたが、Items タブのチェックボックスをオンにすると、Scene ビュー上に3Dモデルが表示されます。
読み込んだばかりのモデルはみな原点に配置されます。このとき、小さなモデルは大きなモデルに埋まって見えないことがあります。
BuriedAhiru.png
例えばこの図では、PA10の基部にあひるが埋まっています。
このようなときは、まず Kinematics バーを FK か IK にセットしたあと、Scene ビューバーのEditボタンをクリックして、Edit Modeにしてください。
EditMode.png
Edit Mode では、モデルの周囲に赤い立方体が現れます。このモードでモデルにマウスカーソルを合わせると、モデルの輪郭が赤い線で囲まれます。
EditBuriedAhiru.png

見えないモデルを確認したら、モデルを左ボタンでドラッグすると、移動させることができます。
DugAhiruUp.png

Scene ビューバーのViewボタンでView Mode に戻ります。
(Scene ビュー上で、右クリックしたときに出るメニューでも、View Mode と Edit Mode の切り替えができます)

View Mode

Scene 画面ははじめ View Mode となっています。
Scene 画面にマウスカーソルを置くと、左ドラッグで原点を中心にグリッドを回転させたり、中央ドラッグで視点を平行移動できます。
また、ホイールで画面の中心点をズームできます。
左ボタンでドラッグ: 床面の中心点を基準に、フィールドを回転
中央ボタンでドラッグ: カメラを平行移動
ホイール: ズーム

MouseControl.png
オブジェクトを見失った時は、Scene ビューバーの Look ボタンを押すと、選択中のモデルがよく見える位置にカメラを移動します。

Edit Mode

Edit Mode では、モデルの周囲に赤い点が表示されます。

また、マウスカーソルをモデルに重ねると、モデルが赤線で囲まれて、選択状態になります。(モデルを選択していない状態での操作は、View Mode と同じです)

このとき、メニューバーのキネマティクスモードによって操作が変わります。
KinematicsBar.png
PK: Preset Kinematics Mode
FK: Forward kinematics mode
順運動学モード。人間の腕で例えれば、肩関節の角度、肘関節の角度を決めることで、手首の位置を決める。
IK: Inverse kinematics mode
逆運動学モード。動かした手首の位置をもとに、肘や肩の角度を逆算する。

FK または IKモードにしてモデル(ロボットの場合、モデルの土台)を左ドラッグすると、モデルを移動できます。
モデルの移動軸は視点によって変わるので、グリッドの回転と視点移動をうまく組み合わせて、好きな場所にモデルを移動してください。

モデルの向きの調整

モデルの向きを調整するには、IKモードで Enable Attitude Edit をオンにして、モデルをクリックします。
すると、モデルの周囲を赤青緑の三色のリングが囲みます。このリングを左ドラッグすると、それにつれてモデルの向きが変化します。
attitude.png

赤がロール(横揺れ)、青がヨー(偏揺れ)、緑がピッチ(縦揺れ)となります。

View Mode に戻す

シーンビューバーのViewを押すか、Scene 画面の右クリックメニューで、View Modeを選ぶと、View Mode に戻ります。

プロジェクトの保存と読み込み

Scene 画面上に配置したハンドロボットとモデルの状態をまとめて、プロジェクトファイル(拡張子 .cnoid)に保存できます。
File メニューの Save Project As を選ぶとファイルダイアログが出るので、好きなディレクトリに好きな名前でプロジェクトをセーブしてください。

同じく File メニューの Open Project からプロジェクトファイルを選択して、いつでも保存したときの状態に戻すことができます。

また、ファイルバーのO.P.(Overwriting Project)をクリックすると、現在の状態を即座にプロジェクトファイルに上書きします。

把持計画作成チュートリアル

Graspプラグインを利用して、プランナーバーのSetObject, SetRobot, Grasp の三つのツールボタンを使って、把持計画を行うチュートリアルです。Graspプラグインについては、 Grasp プラグイン解説 を併せてお読みください。

Choreonoid の起動

端末から Choreonoid を起動します。(今回は GraspPlannerComp や Eclipse 全部入りは使いません。)

把持計画の作成

まず Choreonoid 1.0 基本チュートリアル を参考に、ハンドロボット PA10.yaml とあひる ahiruhrp.wrl を開き、適切に配置します。

配置が済んだら、把持ロボットと、対象物をセットします。
Items タブの PA10 を選択し、プランナーバーの「SetRobot」をクリックします。

SetRobot.png SetRobotToolBar.png
Message タブに「PA10 is grasping robot」と表示されたら成功です。

続いて同じように、Items タブの ahiru を選択し、今度はプランナーバーの「SetObject」をクリックします。
SetObject.png SetObjectToolBar.png
Message タブに「ahiru is grasped object」と表示されたら成功です。

ロボットと対象物を設定したら、プランナーバーの「Grasp」をクリックします。
GraspToolBar.png
うまくいけば、ロボットの姿勢が変わり、対象物をつかんだ形になります(注:アニメーションはありません。アームの動作計画を生成するためにはPRMプラグインを使います)。また、Items タブの PA10 の子アイテムとして、「GRC」が追加されます。
graspAhiru.png
ItemGRC.png

メッセージ欄には以下のように表示されています。

 prehension 0 is selected
 Success: Grasp Plannng 

このとき、ロボットと対象物の位置関係を元にグリッパの位置と角度が求められ、その位置からロボットの体勢が逆算されています。
これがうまくいかずに、「cannot find palm position」というメッセージが出ている場合は、グリッパの位置を求められなかった状態です。対象物をロボットに近づけるなどして、Grasp をクリックし直してみてください。

CannotFind.png MoveAhiru.png SucceedGrasp.png
物体が遠すぎてつかめない 物体をロボットに近づけた 把持成功!

Graspに成功したら、今度はロボットの周辺の何もない場所をクリックして、「Place」を押します。クリックした場所に、ロボットが対象物を置きます。

把持動作計画は、SaveGraspPattern でファイルに保存して、把持動作計画モジュールなどの外部システムで利用できます。

動作計画作成チュートリアル

PRMプラグイン、Graspプラグインを用いて、プランナーバーと、パスプランバーによりアームの動作計画を行うチュートリアルです。PRMプラグインについてはPRM プラグイン解説をごらんください。

動作計画の作成

まずGrasp プラグイン解説と同様に、PA10 とあひるを読み込み、それぞれに SetRobot/SetObject をかけます。

次にテーブルを用意します。File メニューの Open - OpenHRP model file で、Grasp/Object/table-can.wrl を選択してください。
Items タブの table をチェックして、テーブルを適切な(PA10の動作を妨げるほど近くなく、手が届かないほど遠くない)位置に移動し、あひるをテーブルの上に配置します。
SelectTableScene.png

Items タブで table-can が選択されているのを確認して、プランナーバーの SetEnv をクリックします。
SelectTable.png SetEnv.png
メッセージ欄に

 table-can is sorrounding environment

と出れば成功です。
もしItems タブでtable-canを選択し忘れていたら、
 Please selecet more than one bodyitem

と出ます。あらためて table-can を選択し、SetEnv をクリックしてください。

この操作によって、PRMプラグインがアームの動作計画を行う際、table-can にアームがひっかからないよう考慮されるようになります。

プランナーバーの Grasp をクリックすると、いつものようにPA10があひるをつかみます。
GraspAhiruWithTable.png
PA10があひるをつかんだら、いよいよ動作計画です。パスプランバーの Start をクリックします。
PathPlanStart.png
メッセージ欄に

 Trajectory Planning is finished

と出れば終了です。

このとき、Items タブに「GraspPoseSeqItem」という項目が追加されます。
GraspPoseSeqItem.png StartAnimation.png
PA10 の子の GraspPoseSeqItem を選択して、タイムバーのスタートアニメーションを押すと、アームが動き出してあひるをつかむ一連の動作を動画として見ることができます。
action800.png

Tools メニューの Movie Generator 機能を使うと、このアニメーションを連番の静止画として保存できます。
Generate」ボタンを押すと、~/workspace/Choreonoid に scene00000000.png から始まる静止画が保存されます。
Folder
静止画の保存先フォルダ(デフォルトで ~/workspace/Choreonoid)
Basename
静止画の基本名(出力画像ファイル名は Basename + 8桁の連番 + 拡張子 .png)
Begin
保存開始位置(秒)
End
保存終了位置(秒)、ただし直前のチェックスイッチをオンにすること
FPS
フレームレート
Image size
画像の大きさ

GraspConsumer プラグインによる把持動作計画チュートリアル

GraspConsumer プラグインを用いた把持動作計画の作成例です。

GraspPlannerCompのビルド

GraspPlannerCompがあるディレクトリまで移動します。

 % cd ~/workspace/Chorenoid/extplugin/GraspConsumer/GraspPlan20170313

ccmakeを実行します。
 % ccmake .

cmakeの画面が表示されるので、cを2回押しConfigureした後、gを押しMakefileをGenerateします。
次にmakeを実行します。
 % make

ディレクトリ内にGraspPlannerCompが生成されていれば成功です。

ソフトウェアの起動

GraspConsumerプラグイン を使うには、ロボットの動作生成ツール Choreonoid、把持動作計画コンポーネント GraspPlannerComp を立ち上げ、この二つのツールを Eclipse の RTシステムエディタで結びつけてやる必要があります。

Choreonoid を起動する

まず、Ubuntu のアプリケーションメニューのアクセサリから、「端末」を選び、以下のコマンドラインを実行してください。

 % ~/workspace/Choreonoid/bin/choreonoid 

新しく Choreonoid ウインドウが開きます。
GraspConsumerTutorial_chorenoid.png

GraspPlannerComp の起動

端末のファイルメニューの「新しいタブを開く」を選んで別の端末を開き、以下のコマンドラインを実行してください。

 % cd ~/workspace/Choreonoid/
 % cd extplugin/graspPlugin/
 % cd GraspConsumer/GraspPlan20170313
 % ./GraspPlannerComp 

GraspPlannerComp は、実行してもとくにメッセージなどは表示しません。

Eclipse の起動

もう一度「新しいタブを開く」メニューで端末を開き、以下のコマンドラインを実行してください。

 % cd ~/workspace/eclipse/eclipse

新しい Eclipse ウインドウが開きます。

Eclipse の設定

RT System Editor を開く

Eclipse の「ウインドウ」メニューバーから、パースペクティブを開く~その他 を選択してください。
perspective.png
「パースペクティブを開く」ダイアログの中から、<RT System Editor> を選んで、OKを押すと、下のような画面が出ます。
RTSystemEditor.png

ここでツールバーの「ON」ボタンを押して、「System Diagram」を開きます。
SystemDiagram.png

RTコンポーネントを設置する

Eclipse ウインドウの左側にある Name Service View のリストに「localhost」もしくは「127.0.0.1」という項目があります。
その頭にある、右向きの三角形をクリックして開くと、

という二つの項目が現れます。

もしここで、Name Server View の項目が選択できない場合、/etc/hosts の設定 を参照してください。

ここでさらに下の項目の右向き三角を開くと、

という二つの項目があります。

この 「GraspConsumer0|rtc」 が Choreonoid に、「GraspPlanner0|rtc」 が GraspPlannerComp に対応したRTコンポーネントです。
まず GraspConsumer0|rtc を、System Diagram の上にドラッグ&ドロップします。
DragConsumer.png

ドロップすると、青くて四角いコンポーネント「GraspConsumer0」が現れます。
drop1.png

続いて同じように、GraspPlanner0|rtc も System Diagram にドラッグ&ドロップします。
drop2.png

System Diagram 上に、二つのRTコンポーネントが現れています。

RTコンポーネントのポートを接続する

さて、コンポーネントの右側にある二つの小さな正方形は、ポートを示しています。
GraspConsumer0 と GraspPlanner0 は、それぞれ二つのポートを持つコンポーネントであるということになります。

ここで、この二つのポート同士を接続します。
どちらでもかまいませんが、コンポーネントの上側のポートをもうひとつのコンポーネントの同じ上側のポートにドラッグ&ドロップします。
DragToConnect.png

すると、「ポートプロファイルを入力してください」というダイアログが出るので、そのままOKボタンを押すと、上のポート同士が線でつながります。
PortProfile.png
残った下のポート同士も、同じようにして接続して、下の図のような形にしてください。
Activate.png

ポートを間違えたときは…

もしここで、間違えて上のポートを下のポートにつないでしまっても修正できます。
misconnect.png
間違ってつないだ線をクリックすると、ポートの両側と線の中心にポイントができます。
clickline.png
この3つのポイントのうちのどれかを右クリックすると、メニューが現れます。]]
disconnect-menu.png

メニューの中の「Delete」を選べば線が消えるので、あらためて正しいポート同士を接続してください。

アクティベートする

上下のポートがちゃんとつながったら、RTコンポーネントをアクティベートします。
ツールバーの「All Activate」ボタンをクリックして、青く表示されていたコンポーネントが、緑色になったらアクティベート成功です。
Activated.png

Choreonoid の設定

Choreonoid にロボットと物体のモデルデータを読み込んで、把持動作をさせます。

PA10 の読み込み

最初に PA10 ロボットのモデルデータを読み込みます。
Choreonoid の ファイルメニューの、[読み込み]->[Open HRPモデルファイル] を選び、ファイルダイアログで workspace/Choreonoid/extplugin/graspPlugin/RobotModels/PA10/PA10.yaml を選択して、PA10 のモデルを読み込みます。

GraspConsumerTutorial_openmodel.png.png

これで Choreonoid ウインドウの左側の アイテムタブに「PA10」のチェック項目ができるので、チェックしてやるとシーンタブに直立したPA10が現れます・

GraspConsumerTutorial_show01.pngGraspConsumerTutorial_show02.png

この状態で、マウスのドラッグとホイールで視点の操作ができます。
左ボタンでドラッグする
原点を中心に床面が回転
ホイールボタンでドラッグする
視点を水平移動
ホイールの回転
画面の奥行き方向に視点移動

この操作の組み合わせで、物体を好きな方向から見ることができます。

Scene タブ上で右クリックして、編集モード を選択すると、PA10 の基部が赤い点で囲まれます。
GraspConsumerTutorial_show03.pngGraspConsumerTutorial_show04.png
この基部をドラッグして、PA10を移動させることができます。元あった場所からグリッド一マス程度動かしておきましょう。

缶オブジェクトモデルの読み込み

今度は缶オブジェクトモデル can200hrp を読み込みます。
再び File メニューから、[読み込み]->[Open HRPモデルファイル] を選び、ファイルダイアログで workspace/Choreonoid/extplugin/graspPlugin/Samples/Object/can200hrp.wrl を選択します。(注:can200.wrl を読み込むことはできない!)
PA10 のときと同様、アイテムタブに現れた「can200」をチェックすると、黒い円筒形のモデル can200 が現れます。
Can200.png

これも編集モードで好きな場所に移動できます。

Set Robot と Set Object

アイテムタブのPA10をクリックして、=GRASP=ツールバーの「SetRobot」をクリックすると、画面下のメッセージタブに「PA10 is grasping robot」と表示されます。
GraspConsumerTutorial_setrobot01.png
GraspConsumerTutorial_setrobot02.png
GraspConsumerTutorial_setrobot03.png

続いて Items タブのcan200 をクリックして、今度は =GRASP= ツールバーの「SetObject」をクリックします。
Messageタブに「can200 is grasped object」と出たら準備OK。
GraspConsumerTutorial_setobj01.png
GraspConsumerTutorial_setobj02.png
これで準備が整いました。
「=GraspRTC=」ツールバーの、「Grasp」ボタンを押すと、PA10が缶を把持する体勢になります。
GraspConsumerTutorial_grasp01.png
GraspConsumerTutorial_grasp02.png
同様に、Samples/Object 下にあるファイル *hrp.wrl を開いて SetObject、Grasp とすることでさまざまな物品を把持することができます。

また、不要なオブジェクトを削除するときは、アイテムタブでオブジェクトを右クリックして、コンテキストメニューから「カット」を選びます。

プロジェクトの保存

Choreonoid を使用するたびに、このすべての作業を行うのは骨です。
Choreonoid の ファイル メニューの「名前を付けてプロジェクトを保存」を使うと、 Choreonoid の現在のロボットとオブジェクトの状態を好きな名前のプロジェクトファイル(拡張子は cnoid)として保存できます。
そこで、現在の状態をプロジェクトファイル ~/workspace/PA10.cnoid として保存しておきます。

後日 Choreonoid を起動したとき、ファイル メニューの「プロジェクトの読み込み」を開いて ~/workspace/PA10.cnoid を読み込むと、このセッティングが復元されます。

graspPlugin の終了

Eclipse の System Diagram を表示し、ツールバーの「All Deactivate」ボタンを押します。
画面上のコンポーネントが緑から青に変わったら、Choreonoid と GraspPlannerComp、そして Eclipse をそれぞれ終了してください。

以上でチュートリアルは終了です。
おつかれさまでした。

国際ロボット展デモマニュアルについて

以上を参考にしてください。