物理エンジンでロギ犬を歩かせたい!

慶應ロ技研 Advent Calendar 2018 その1 19日目

 

はじめに

みなさんこんにちは!2年のmoden3です。現在はNHKロボコンで主に機構を担当しています。

ロボットの機構を設計していると、「これって本当に動くのかな?」と不安になることが度々あります。部品の動きはある程度CADで見ることができますが、実際に動かす場合は重心などの影響も考えなければなりません。そこで役に立つのが物理演算ソフトを使ったシミュレーションです。というわけで、今回は無料の計算エンジンとして有名なODEに挑戦してみました。

しかしながら、ODEどころかそもそもプログラミング自体も始めたばかりなので、大苦戦した結果このアドベントカレンダーで相当時空を歪めてしまいました…

 

ODEとは

ODEは「Open Dynamics Engine」の略で、オープンソースで開発されているフリーの動力学計算エンジンです。コンピュータ上で物体の動きを、衝突、摩擦、重力などの物理運動法則に従って計算することができます。ゲームや映像製作によく用いられており、そのため計算を簡略化させて処理を高速化させる工夫がなされています。

 

ロギ犬を作ろう

ODEをインストールし、Visual Studio 2017から実行できるようにしました。

まずはロ技研のマスコットであるロギ犬を作ってみました。cropped-e383ade382aee78aac.png

実行結果はこんな感じです。

ロギ犬

ロギ犬は基本的に直方体のみで構成されているので、作りやすかったです。初めてODEをいじるのにはいい練習になりました。

 

ロギ犬を降らせよう

プログラミングの入門で定番なのが「Hello World」であるように、ODEの入門でよくあるのが物体の落下のシミュレーションです。ということで、次は物体の代わりにロギ犬を落下させてみました。実行結果はこんな感じです。

とてもシュールな光景ですね。キーボードを操作すると新たなロギ犬が空中に生成され、地面に向かって落ちて来るようにしています。

ソースコードを以下に載せます。

ここでプログラムの内容をざっくり解説します。

ODEでは主に動力学計算と衝突計算を行っています。物体を生成するのに、通常「static dBodyID」型と「static dGeomID」型の2つの変数を宣言する必要がありますが、これらは物体のボディ(質量分布)とジオメトリ(形状)に対応し、それぞれ動力学計算と衝突計算に使われます。なぜいちいち2種類宣言しなければならないかと思う方もいると思いますが、動力学と衝突の両方計算する必要がない場合に、無駄な計算を省くことができます。例えば障害物を作る場合、必要なパラメータは物体の形状のみなので、ジオメトリのみ定義しておけば余計な動力学計算をしなくて済みます。上のロギ犬では、胴体の中心に重心を持っていきたかったので胴体のみにボディを定義し、頭や耳や尾はジオメトリのみで定義しました。

シミュレーションの流れは以下の通りです。

シミュレーションの流れ

「simloop」関数の中で「nearCallBack」関数が呼び出されて衝突判定を行います。任意の2つのジオメトリを選んで判定するのを、すべての組み合わせについて行うため、ジオメトリが多い方が計算に時間がかかります。つまり生成するロギ犬の数の上限を適切に決めておかないとシミュレーションが途中で止まってしまうことがあります。

実をいうと、このプログラムがやっと完成した時点ですでに19日でした…

 

ロギ犬を歩かせよう

もっと動くものを作りたいということで、今度はロギ犬を歩かせてみようと決意しました!

脚を付けたい

歩かせるといっても、そもそもロギ犬には脚がない!ということで、まずは脚をつけられるように胴体を伸ばします。

ロギ犬2

これで脚をつけられるようになりましたね!

テオ・ヤンセンの歩行機構

一応機構班ということで、ここでちょっと機構っぽい要素を入れてみたいと思います。歩行機構として有名なものに、オランダ出身の彫刻家・物理学者であるテオ・ヤンセンのリンク機構「ストランドビースト」が挙げられます。

http://roomba.hatenablog.com/entry/2015/02/25/133951

 

 

 

 

 

 

全体の動きはこんな感じです。

各リンクの長さの比は、テオ・ヤンセンが公開した「ホーリーナンバー」と呼ばれる比率に従っています。今回はこれをロギ犬につけて歩かせてみましょう。

完成!

ロギ犬脚付き

ついにできました!脚だけ格子状なので不自然極まりないですが…

歩行の様子はこんな感じです!

ソースコードを以下に載せます。


歩行が安定するように質量分布をいじって重心を調節しました。左右の足の位相は180°ずらしています。

 

おわりに

12月の初めにODEをインストールして、ネットで調べながらデモプログラムを解読して使い方を勉強しました。しかし思ってた以上に苦戦して、特に前半はエラーばかり出していて気づいたら年末に…。まあ何とか年内に完成できてよかったです。今後はこの経験をロボコンに生かせたらなと思います。ご覧いただきありがとうございました。よいお年を!

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中