アンオフィシャル - Aldebaran Robotics NAO とそのほかロボットについて

NAO とそのほかロボットについての情報を発信。ここの情報はアルデバラン非公式です。内容に誤りがあった場合はごめんなさい。

Aldebaran Robotics 社の NAO、そのほかロボットに関連する情報を発信します。

NAO のアプリ開発フレームワークが提供する標準モジュール トップ6 (1位 ~ 3位)

f:id:takuji_kawata:20140115140648j:plain

NAOのアプリケーション開発フレームワークである NAOqi は、NAO の手足を動かすといった基本的なものから、音声認識、顔認識といった、高度なソフトウェアー処理が要求されるものまで、様々な機能を標準で提供しています。

NAOqi はモジュールという単位でそれらの機能を提供していますが、そのモジュールの種類はあまりにも多く、一度に把握するのは困難なほどです。

今回、ここでわたしが思う、よく使われていると思われるモジュールのトップ6 をまとめてみました。

今回はその中でトップ3を紹介します。

 

1. ALRobotPosture

NAO をあらかじめ定義されたポーズにさせる機能を提供します。

ポーズは全部で8通り、「NAO のプログラミング環境の基本(1) クロス・ランゲージ、クロス・プラットフォームな開発環境」 の中で紹介しているビデオでそれらのポーズを確認できます。

この機能の優れている点は、現在の姿勢から指定されたポーズに遷移するために必要な動きを自動的に計算して実行してくれるということです。たとえばNAO が横になっている状態のときに、起立の状態を指定すると、まず着席の姿勢に移動し、それから立ち上がる動作をはじめ、最後に起立の姿勢への移動を開始します。

 

2. ALMotion

NAO の動きを制御する様々な機能を提供します。 主に、各関節を動かす、または現在の角度を計測する機能と、NAOを歩かせる機能を提供します。 また体を少し左右に傾けるといったような各関節が連携して動作しなければ困難な動作をうまくとりおこなってくれるための機能も提供しています。

関節を動かすための API では、複数の関節の角度とそれぞれの移動速度を同時に指定して、複数の関節を同時に動かすよう指令を送ることができます。 また関節の移動について、例えば右腕を1秒後に30度に曲げて、そのあと 3秒後に 45 度に、その1秒後にまた 30度に戻すといった指令を一度に送ることができる Interpolation という関節移動の機能も提供されています。 この Interpolation の優れている点は、動きを先読みして、全体としてスムーズな動きになるよう、関節の移動速度を自動調整してくれるという点です。たとえば先ほどの例で 30度、45度、30度と順番に角度を移動させる場合、関節が45度になった後は、またもとの角度に戻る必要があるので、45度のところでゆっくり止まってまたもとの角度に戻るよう移動速度が自動的に調整されます。 これが 30度、45度、60度と順番に角度が与えられた場合は、45度のところで速度が落ちることなく、そのままの速度で 60 度まで角度を移動していきます。 Interpolation を利用して全体としてスムーズな動きを実現することができます。

NAOの歩行移動について、この ALMotion モジュールと、あと ALNavigation というモジュールがその機能を提供しています。 歩く動作自体はどちらのモジュールを使っても同じですが、歩かせるために与えるパラメータが異なっています。  ALMotion では進行方向と速度を指定して歩行を開始させますが、ALNavigation では現在の位置から前に3メートル右に1メートル移動、といったように場所を指定して歩行を開始させます。

 

ALMotion モジュールは NAO を動かす一通りの機能を提供した非常に強力で便利なモジュールですが、一度与えた動作の命令を途中で停止させたり、微調整したものに上書きしたりということができないという欠点があります。 たとえば NAO の姿勢を適時確認し、バランスを取るよう動作を微調整するというような仕組みを組み込みたい場合、一度に与える動作の長さを次にバランスを調整するタイミングより短い時間で収まるようにするなど、なんらか特別な工夫が必要になります。

ALMotion は DCM モジュール が提供する NAOをコントロールするための低レベル API を使いやすい形でラッピングしたものになっています。より高度な制御をおこないたい場合、DCM モジュールを直接操作するというのがより確実性の高いアプローチかもしれません。

 

3. ALSensors 

NAOの持っている触覚センサーが反応したときにイベントとしてそれを通知する機能を提供します。触覚センサーは頭の上に3か所、それぞれの手に3か所、それぞれの足のつま先に2か所と、胸のボタンの合計14個あります。

センサーの位置は次のページで知ることができます。

https://community.aldebaran-robotics.com/doc/1-14/family/nao_h25/contact-sensors_h25.html#h25-contact-sensors

例えば、手のセンサーが反応したら、人に腕を握られたと判断し、その腕の各関節の力を開放して、人の力でその腕を自由に動かせるようにするとか、頭をタッチされたら何かアクションを起こすとか、使い方はいろいろです。

3位にランクインしましたが、正直なところわたしはあまりこのモジュールを使うことはありません。 実は NAO が搭載するすべてのセンサーからの信号について、 ALMemory というモジュールを使うことでそのリアルタイムの状態を知ることができるのです。わたしはセンサーの状態を知りたいとき通常このモジュールを使います。

ALSensor モジュールは触覚センサーに特化した機能を提供しているため、利用する上で、わかりやすさという利点があります。 ALMemory は特定のセンサーの状態を得るようプログラミングするためにはドキュメントを色々と調べなければならず、一定の面倒くささがあります。 ALMemory モジュールについては後ほど登場する予定です。