マルチコプタプラグインについて

quadcopter.body (11.3 KB)

Bodyファイルに各設定を記述したファイルを添付させていただきます.
このBodyファイルを読み込もうとすると,以下のようなエラーが出ます.

ボディ “C:/choreonoid/share/model/multicopter/quadcopter.body” を読み込み中
警告:ノードタイプ “CompetitorMarker” は定義されていません.このノードの読み込みはスキップされます.
203行9列にてノードタイプ “RotorDevice” は定義されていません.. → 失敗.

このようなエラーが起こり,モデルが読み込めません.立て続けに申し訳ございません

CMakeにおいて BUILD_MULTICOPTER_PLUGIN オプションがONになっていないのが原因かと思われます.

CMake実行時に -DBUILD_MULTICOPTER_PLUGIN=ON とオプションを付与するか,ccmakeなどを利用して,再ビルドをお試しください.

参考:マルチコプタプラグイン — Choreonoid 開発版 ドキュメント

マルチコプタプラグインのビルドを有効化する必要があります。
CMakeのビルドオプションの設定(-B build をつけるコマンド)で以下のオプションも追加してビルドします。

-DBUILD_MULTICOPTER_PLUGIN=ON

詳しくはマニュアルの以下のページをご参照ください。

マルチコプタプラグインのビルドを有効化したつもりが上手くできていなかったためエラーが起こっていたみたいでした.
有効化してビルドしたら,モデル読み込めました.
ありがとうございます.

「RotorDeviceの入出力」に関してなんですけど,extディレクトリの中にDevGuidePluginという名前のディレクトリを作成して,中にある.cppを書き換えるということであっていますか?
また, 最小限のプラグインサンプル (S01) — Choreonoid 開発版 ドキュメントを参考にしながら,プログラムを考えてみたのですがどのように書いたらいいのかわからないです.サンプルプログラムとかありましたら拝見したいです.よろしくお願いします.

サンプルプログラムはこちらにあります.

以下と併せてご覧いただけると良いかと思います.
https://choreonoid.org/ja/documents/latest/multicopter/index.html#id4

ありがとうございます.
rotor deviceの入出力に関してはサンプルプログラム等を見ながら実行していきます.
また分からないことがあったら質問させていただきます.

別件で、マルチコプタのサンプルプロジェクトのシミュレーションを開始するとアプリが落ちてしまうのですが、改善する方法はありますか?

関連ファイルのビルドは行なっていて、エラーは出ていないです.以下のように読み込めています.

Eigenライブラリバージョン3.2.10が使用されています.( 使用されているSIMD命令セット: SSE, SSE2 )

Labo1用のボディカスタマイザ “C:\choreonoid\lib\choreonoid-1.8\customizer\Labo1Customizer.dll” がロードされました.

CustomizedSpringModel用のボディカスタマイザ “C:\choreonoid\lib\choreonoid-1.8\customizer\SpringModelCustomizer.dll” がロードされました.

Bodyプラグインが読み込まれました.

Multicopterプラグインが読み込まれました.

Pythonプラグインが読み込まれました.

PythonSimScriptプラグインが読み込まれました.

URDFプラグインが読み込まれました.

OpenGL 3.3 (GLSL 3.30 - Build 25.20.100.6577) is available for the “シーン” view.

Driver profile: Intel Intel(R) UHD Graphics 620 3.3.0 - Build 25.20.100.6577.

プロジェクトファイル “C:/choreonoid/src/sample/Multicopter/QuadcopterJoystick.cnoid” を読み込み中…

WorldItem “World” を読み出し中

BodyItem “quadcopter” を読み出し中

ボディ “C:\choreonoid\share\model\multicopter\quadcopter.body” を読み込み中

警告:ノードタイプ “CompetitorMarker” は定義されていません.このノードの読み込みはスキップされます.

→ 完了!

SimpleControllerItem “QuadcopterController” を読み出し中

QuadcopterControllerのコントローラモジュール “C:\choreonoid\lib\choreonoid-1.8\simplecontroller\QuadcopterController” をロード中・・・OK!

コントローラインスタンスを生成しました.

BodySyncCameraItem “BodyTrackingCamera” を読み出し中

BodyItem “Floor” を読み出し中

ボディ “C:\choreonoid\share\model\misc\floor.body” を読み込み中

→ 完了!

GLVisionSimulatorItem “GLVisionSimulator” を読み出し中

MulticopterSimulatorItem “MulticopterSimulator” を読み出し中

AISTSimulatorItem “AISTSimulator” を読み出し中

8 / 8 のアイテムが読みこまれました.

プロジェクト “C:/choreonoid/src/sample/Multicopter/QuadcopterJoystick.cnoid” を完全に読み込みました.

sampleにあるSR1のサンプルプロジェクトはアプリは落ちずにシミュレーションが実行できています。

Windowsの再現環境がないのでお力になれるか分かりませんが,まずはChoreonoidをコマンドラインから実行して,エラーメッセージ等がターミナル(シェル)上に出るかご確認いただけませんでしょうか?

コマンドラインから、binディレクトリで、choreonoidと打ち込むとエラーは起こらず起動します。

一度ubuntuでchoreonoidをインストールして実行しようとしのですが、オプション機能のビルドで、プラグインを有効化するためにコマンドを打ったのですがエラーが起こりました。

~/choreonoid/src/build$ cmake -DBUILD_MULTICOPTER_PLUGIN=ON
CMake Warning:
No source or binary directory provided. Both will be assumed to be the
same as the current working directory, but note that this warning will
become a fatal error in future CMake releases.

CMake Error: The source directory “/home/rsdlab/choreonoid/src/build” does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.

bin/choreonoidで起動できることは確認できました。環境はubuntu20.04で開発版を試しています。

~/choreonoid/src/build$ cmake -DBUILD_MULTICOPTER_PLUGIN=ON

とありますが,buildというディレクトリ名から推察するに,これだと正しくCMakeを実行できていないように思われます.

~/choreonoid/src/build$ cmake (Choreonoidリポジトリのクローンのルートのパス) -DBUILD_MULTICOPTER_PLUGIN=ON

としなければなりません.ご確認願えますでしょうか.

回答していただいた点に気を付けながら,もう一度windows版とubuntu版をインストールし直したら,どちらでもプラグインの有効化が実行できました.また,マルチコプタのサンプルプロジェクトの実施と,rosとの連携もサンプルプロジェクトを通して確認できました.

いろいろ助けていただき,ありがとうございます.
RotorDeviceの入出力で少し詰まっているので,また質問させていただくかもしれませんがその節はよろしくお願いいたします.

1 Like

追加でマルチコプタのシミュレーションに関する質問させてください.
私は,壁面における挙動をシミュレーションしたいのですが,挙動に変化がみられません.
私の行っている中で何か異なることがあれば教えていただきたいです.

1.quadcopter.bodyの中のRotorDeviceを記述例にしたがって記述
2.QuadcopterJoystick.cnoidのプロジェクトを開く
3.foorのモデルを読み込んで,傾けることで壁にして,位置の固定とworldの中に入れる
4.Multicopter SimulatorのWall EffectをTrueにし,シミュレーションを開始
5.ジョイスティックで機体をホバリングさせる

この手順でシミュレーションを開始しました.マルチコプタ自体は仮想ジョイスティックで動くことは確認できています.

プロジェクトファイル(.cnoid)を開き,ChoreonoidのGUI上のアイテム一覧からMulticopterSimulatorを選択すると,そのプロパティが見れるかと思います.

そこで Wall Effect / Ground Effect の有効化ができているかが表示されます.
これがデフォルトでは無効 (false) になっているので,有効化をお試しいただけますでしょうか.

https://choreonoid.org/ja/documents/latest/multicopter/index.html#id17

Wall Effect / Ground Effectを有効にしても特に変化はありません.
画面はこのようになっています.

追加で質問させていただきたいです

ROS環境でドローンを飛ばそうとしているのですが、モデルが読み込めないです。
読み込もうとしたときのエラーはこちらです。

ボディ “/home/rsdlab/catkin_ws/src/choreonoid/share/model/multicopter/quadcopter.body” を読み込み中
警告:ノードタイプ “CompetitorMarker” は定義されていません.このノードの読み込みはスキップされます.
190行9列にてノードタイプ “RotorDevice” は定義されていません.. → 失敗.

https://choreonoid.org/ja/manuals/latest/multicopter/index.html
こちらを見ながら、bodyファイルにMulticopterTargetBodyの設定は行っています。
この設定を行うと"RoterDevice"のノードが有効になると認識しているのですが、他に設定を行う必要がありますか。
ROS環境で試す前は、実際にコントローラで飛ばすことができました。
また、TankのROSチュートリアルも実行できました

この設定はROS環境でcatkin等でビルドする際も,以下のように有効化する必要があります.

catkin build -DBUILD_MULTICOPTER_PLUGIN=ON 

https://discourse2.choreonoid.org/t/topic/511/2?u=yuki_onishi

お世話になっております。鈴木@JAEAです。

Wall EffectおよびGround Effectについてですが、
これらの機能を使用する場合は、以下の準備が必要です。
1)ロータデバイスへのパラメータの設定
2)MulticopterSimulatorItemのプロパティの設定
3)Wall EffectおよびGround Effectの対象とするボディの設定

1)では、マニュアルに記載しているeffectParameter以下を記述してください。
https://choreonoid.org/ja/documents/latest/multicopter/index.html#id14

2)では、MulticopterSimulatorItemのWall EffectとGround Effectのプロパティをtrueにしてください。
https://choreonoid.org/ja/documents/latest/multicopter/index.html#id17

3)では、Wall EffectおよびGround Effectの対象とするボディ
(hawk様の例では、傾けて壁としたfloorのモデルと、元々の青いfloorのモデル)に
「MultiCopterTargetBody:」を記述してください。

記述例)
format: ChoreonoidBody
formatVersion: 1.0
angleUnit: degree
name: Floor

MulticopterTargetBody:

この3)の設定によって、マルチコプタが着地時に反発する床や、吸い寄せられる壁・天井が定義されます。以上により、Wall EffectおよびGround Effectの機能が使用できるようになるかと思います。

また、Wall EffectおよびGround Effectの機能について補足になりますが、
これらの機能は、ロータデバイスの出力と連動して、ドローンが
着地時に床と反発したり(Ground Effect)、壁・天井に吸い寄せられたり(Wall Effect)する挙動を
「「擬似的に」」シミュレーションに反映するもので、実機のドローンでのそれらの挙動を忠実にシミュレートするものではありません。
そのため、もし解析・分析的な目的での利用をご検討中でしたら、
ご期待に沿えず大変申し訳ございませんが、他のツールやソフトウェアを使用していただきたくお願いいたします。

ご回答ありがとうございます。

頂いた内容を確認したところ、ROS環境でMULTICOPTER_PLUGINを有効化したらモデルを読み込むことができました。

ご指摘いただき誠にありがとうございます。

ご回答ありがとうございます。

鈴木様に回答していただいた(1)~(3)のステップを実行したところ、床や壁面近傍に接近した場合における挙動(Wall Effect,Ground Effect)をシミュレートすることができました。
誠にありがとうございます。

(3)のステップにある、floor等のモデルファイルに、「MultiCopterTargetBody:」を記述していなかったため、Wall EffectとGround Effectの機能が使用できなかったと思われます。

Wall EffectとGround Effectの機能についての解説ありがとうございます。

私の研究では、先行研究で開発された機体の最適化と、壁面での安定した飛行の実現を目指しています。具体的には、様々なドローンの形を考案し、可変機構を設置することで、機体を傾けることなく、壁面近傍での安定した飛行を目標としています。優先度としては機体の最適化が高いです。

そこで、「擬似的」ではありますが、複数の機体で壁面での影響を検証し、その中で最適な機体、機構の選定しようと考えています。
そのため、現在のところchoreonoidを利用する方針です。また、気流の可視化等が必要な時が来ましたら、他のソフトウェアを検討させていただきます。

ご助言ありがとうございます。

無事に動作したということで安心しました。

ご報告ありがとうございました。

鈴木

1 Like

ROS環境でもプラグインが動作したとのこと,ご報告ありがとうございます.良かったです.

ちなみにChoreonoidにはSensorVisualizerというアイテムを追加することで,Choreonoidシミュレータ上でIMU等のデータの可視化を行うこともできます.シミュレーション動画等を利用される場合,役に立つやもしれません.
(GUI上でロボットモデルを選択した上で,File->New->SensorVisualizerを選択することで追加できます.別途,ロボットモデルに加速度センサやジャイロセンサを記述する必要があります.)

鈴木様もご回答どうもありがとうございました!