mc_rtc::Configuration
設定ROS(ロボットオペレーティングシステム)は、ロボット工学の分野で非常に有名なミドルウェアで、この分野で使用されている数多くのツールがROSを使用してデータをやり取りすることができます(ツールによってはROS専用のものもあります)。ただし、ROSはリアルタイムアプリケーション用に設計されていないため、ROSの製品をmc_rtcと統合する際は、その点を考慮する必要があります。このドキュメントでは、ROSの原理についてある程度習熟していることを前提として説明します。
mc_rtcは、提供されているオプションに応じて以下の情報をパブリッシュします。
前者はcontrol
名前空間でパブリッシュされ、後者はreal
名前空間でパブリッシュされます。
これ以外の情報については、コントローラーのコードで処理する必要があります。特に、mc_rtcは回転について関知しません。
外部のツールがロボットの状態をROSにパブリッシュできるように、mc_rtc::RobotPublisher
クラスが用意されています。
以下のコードを使用すると、mc_rtcによって作成されたros::NodeHandle
にアクセスできます。
#include <mc_rtc/ros.h>
std::shared_ptr<ros::NodeHandle> nh = mc_rtc::ROSBridge::get_node_handle();
なお、ROSのサポートなしでmc_rtcがビルドされている場合や、ROSを初期化できなかった場合(通常、マスターを利用できなかった場合)には、nullポインターが返されます。
(mc_rtcで)ROSを使用する際に最も問題となるのは、リアルタイム処理がサポートされていないことです。そのため、以下の場所ではROSの関数を使用しないことを強く推奨します。
reset()
関数run()
関数これらの関数はいずれも、リアルタイムループ内か、リアルタイム性が要求される場面で実行されます。ROSによる操作をすべて別のスレッドで行わせることを推奨します。本ドキュメントでは同期に関する問題については扱いませんが、C++11以降では同期に関するさまざまなツールが用意されています。