ODEセンサー活用術と動画の作成
センサーの使い方を知ってロボットの多様性を広げる
センサーの使い方が上手になると、ロボットシミュレーションを幅広い目的で利用することができます。例えば、人工知能をもつロボットは周辺の環境情報を取得し、それに基づいて行動を決定します。皆さんが多くのセンサー機能を知っていれば、それだけ多くの種類の人工知能ロボットが作れることとなります。
またロボットシミュレーションは、計測が難しい実機の内部状態の検証などに使われるため、計測方法だけでなくデータの可視化(テキストデータ・グラフ化)の方法も知っておけばプレゼンテーション発表にも有利です。
そこで今回は、ロボットシミュレーションにおけるセンサー構築法およびデータの扱い方について解説します。
基本的にロボットや環境の状態計測に関するコードは「Simloop」ルーチンの「dSpaceCollide」の前に配置します。そして、これらの計測(センサー)値に基づき、モータの位置や速度を決定することがセンサーフィードバック制御となります。そのため、モータ制御コードはセンサーコードの直後に配置されます。
今回、ODEセンサー活用法を紹介するため、たくさんのサンプルファイルを用意しています。これらのファイルは(4thODE_fig_code.zip)からダウンロードしてください。そして、連載第1回で説明したように新しいプロジェクトを作ってプログラムを試してみてください。なお、各プログラムの初めに使用方法が説明されていますので必ずお読みください。
まず基本的なセンサーとしては、物体や関節の物理状態を出力する計測用コードがあります。これらセンサーは、連載第1回(http://thinkit.co.jp/article/958/1/)で説明したようにODEが衝突法に基づく動力学計算であるため、ODE標準機能として充分に用意されています。詳しくは、ODEのユーザーガイド(http://www.ode.org/ode-latest-userguide.html)「6.2.Position and orientation」「7.3. Joint parameter setting functions」をご確認ください。
なお、ダウンロードしたzipファイルの中にある「demo_buggy_sensor.cpp」に位置・速度情報、相対位置情報、力・トルク情報の算出例をまとめてあります。
また、単純にODEが提供する計測用コードを利用するだけでなく、コードに計算処理を加えることで多様なセンサー構築が可能です。例えば、ロボットの運動を評価するためには重心がよく使われますので、重心センサーを構築してみましょう。
剛体力学の教科書に書かれている重心の求め方は
物体1&2の重心座標
=((物体1の座標)×(物体1の重量)+(物体2の座標)×(物体2の重量))/((物体1の重量)×(物体2の重量))
となり、すべての物体の座標と重量が明らかになれば算出できます。なお、「demo_buggy_gnuplot.cpp」にバギーの重心算出式がありますので参考にしてください。
接触センサーを構築して歩行を制御する
そのほかの例として、「接触センサー」もODEにおける物体衝突の計算処理を理解することで、自分で構築できます。
例えば、「デモバギーの本体」が「車輪以外のほかの物体」と接触を検知するセンサーを付加する場合を考えたとき、図1-1に示すように、本体であるボックス型と3個の車輪を別々の集合体「car_space(本体)」「car_space2(車輪)」として設定します。
そうすることで、「nearcallback」ルーチンで行われる2物体の衝突計算において、物体の1つが「car_space2」である場合に、他の物体との接触点数を確認することで接触が生じているかどうかを判断できます。
ただし、このように本体と車輪を別々の集合体とした場合、車輪と本体との間で衝突が発生し、本体から車輪がはじき飛んでしまう問題が生じます。そのために、衝突計算部「nearcallback」ルーチンにおいて、車輪と本体の衝突計算を行わないようにするコードを追加する必要があります。
これらの接触センサーの設定コードはダウンロードファイルの中にある「demo_buggy_contact.cpp」内にあるので、参考にしてください。なお、このプログラムは接触状態をわかりやすくするために、接触状態がコマンドプロンプト上に表示され、なおかつ、本体が接触した場合には本体の色が変わるようになっています。
また接触センサーの応用編として、二足歩行ロボットの右足と左足に接地センサー機能を付加した場合の概念図を紹介しておきます(図1-2)。図中では、二足歩行ロボットが動作する際、右足となる集合体「right」と、左足となる集合体「left」のそれぞれが地面(ground)と接触している様子を表しています。この接触センサーの詳細は、次回、二足歩行ロボットの構築方法を説明する時に紹介します。
最後に補足として、ここでは詳しく説明しませんが、物体の衝突状態の情報を抽出する方法は接触判定だけではなく、接触で生じる力などの情報も取り出すことができ、力センサーとして利用することも可能です。
「ODEセンサー活用術と動画の作成」サンプルプログラム