mc_rtc用の新しいプラグインの実装方法

mc_rtcでは、どのインターフェイスでも、mc_control::MCGlobalControllerクラスを使用して本フレームワークのコントローラーが初期化されて実行されます。特に、反復実行時にはmc_control::MCGlobalController::run()関数が実行されます。

本フレームワークではプラグインシステムが採用されており、このrun関数の開始時と終了時に実行されるコンポーネントを記述できます。

このプラグインはさまざまな用途に使用できます。

  • サードパーティ製のミドルウェア(ROSプラグインなど)を使用してデータをパブリッシュする
  • mc_rtcが実行されているのとは異なるインターフェイスで取得されたセンサーデータを提供する
  • 単一のコントローラーの守備範囲を超えた上位機能を提供する

独自のプラグインを記述する

プラグインを記述するには、mc_control::GlobalPluginクラスから継承したクラスを記述します。さらに、以下の関数を実装します。

最初のコントローラーの起動時、mc_rtcによってresetメソッドは呼び出されません。この場合、initメソッドのみが呼び出されます。必要であれば、initメソッドからresetメソッドを呼び出すことができます。

最後に、mc_rtcに読み込み可能な共有ライブラリに、作成したクラスをエクスポートします。これを実現するには、mc_rtcで用意されているEXPORT_MC_RTC_PLUGINマクロを使用するのが最も簡単です。これは、コントローラー、状態、ロボットモジュール用のマクロと似ています。

Customize what runs and when

mc_cotrol::GlobalPlugin::configuration()メソッドを置き換えることもできます。これにより、実行ループの前後でプラグインを実行させないようにmc_rtcに指示したり、コントローラーが実行されていないときにプラグインを実行するかどうかをmc_rtcに指示することが可能です。

デフォルトでは、beforeメソッドとafterメソッドは常に呼び出されます。

さらに、全く実行されないプラグインを読み込ませることもできます。データストアやタスクにメソッドを登録しておき、メタタスクや制約条件ローダーで実行を抑制する場合に便利です。

自動読み込み

CMakeマクロadd_pluginによって、AUTOLOAD_${PLUGIN}_PLUGIN. という名前のCMakeオプションが自動的に作成されます。このオプションがONの場合、特殊なファイルが${MC_RTC_INSTALL_PREFIX}/lib/mc_plugins/autoloadにインストールされます。このファイルが存在する場合、Plugins設定エントリの内容にかかわらず、プラグインが自動的に読み込まれます。

さあ始めましょう

mc-rtc/new-pluginテンプレートプロジェクトを使用すると、すぐに始められます。このテンプレートには、C++GlobalPlugin用の必要最小限の構造が記述されています。