Blenderでのリモートオブジェクト管理

ロボットのさまざまな制御アルゴリズムをデバッグする際に、モデリング環境を用意し最初にプログラムをデバッグしてから実際のロボットでテストするのがいかに楽しいかを感じました。 Blenderを積極的に使用して3Dプリント用およびユーザーインターフェイス用のモデルを作成したため、 Blender Game Engineをロボットのモデリングの媒体として使用することにしました。 最初の結果は非常に良かった:





ビデオには、ドライバーのコントロールパネルが示されており、オンボードカメラからのビューとセンサーからのデータが示されています。



その後、質問が発生しました-BGEをコミュニケーションおよび管理システムと統合する方法は? つまり 同じプログラムを変更せずにBGEで実際のロボットまたは仮想ロボットを制御できるようにする方法は? ネットワークを介してロボットを制御するには、PythonをサポートするIceライブラリを使用します。 BlenderはPythonスクリプトの実行方法も知っており、そのすべてのオブジェクトと機能へのインターフェースを提供します。 したがって、計画が生まれました-ロボットで実行されるプログラムとまったく同じ(リモート)インターフェースを実装するプログラムをpythonで作成することです。 しかし、実際のモーターの代わりに、ネットワークを介して送られるコマンドに従って、BGEのオブジェクトのプロパティを変更します。



最初のステップとして、次のことを示す最も単純な例を可能にすることにしました。



これを行うには、2つのPythonファイルを作成する必要がありました。 1つ目はBlender内で起動されるサーバーコードで、2つ目はネットワーク経由でサーバーに位置を変更するリクエストを送信するクライアントプログラムです。 これらの2つのプログラムはGithubにあります。 Testblender.pyはサーバーです。 サーバーを別のスレッドで起動する必要があることに注意してください。 そうでなければ、ネットワークを介したメッセージを待っている間、Blenderのユーザーインターフェースをブロックし、オブジェクトの位置の変更は視覚的に表示されませんでした。 Client.pyは、現在の(選択された)オブジェクトをXZ平面内で円状に移動することにより、そのオブジェクトの位置を変更する要求を100個送信する単純なプログラムです。 次のビデオは、サーバーおよびクライアントプログラムを起動する方法を示しています。作業の結果は、オブジェクトが円を描いて移動します。





Blender内のオブジェクトを(ネットワーク経由で)リモートで管理する方法を学んだ後、モデルを制御するためにBGE内のロボットを制御するインターフェースを実装する予定です。



実際、Blenderで説明されているリモートオブジェクト管理手法は、まったく異なるアプリケーションに使用できます。 たとえば、別のコンピューターで収集されたデータを視覚化します。 したがって、上記の簡単な例とこの記事が読者にとって興味深く有用であることを願っています:-)。



All Articles