BodyIoRTCで加速度センサ等を利用したいのですが,どのようにすればよいのでしょうか.
VisionSensorIoRTC.cppに追加するのと,別のBodyIoRTCを作るのではどちらが適切でしょうか?
どちらにしてもセンサ値を読み出す具体的な方法がわかりません.
これに関するサンプルを作成しました。サンプルはTankモデルを対象としています。
まず、Tankモデルに加速度センサを追加しました。(ついでにジャイロも追加しておきました。)
そして、OpenRTMでTankモデルを動かすサンプルについて、改良を行いました。
改良内容は以下のとおりです。
- 対象プロジェクトファイルは sample/OpenRTM/OpenRTM-Tank.cnoid
- Tankモデルの入出力を行うTankIoRTC に、加速度センサとジャイロの状態を出力するポート “dv” と “w” を追加
- Tankモデルの制御を行うTankJoystickControllerRTC に、加速度センサの状態を入力するポートを追加
- 水平方向の加速度が一定以上になると、ライトを点滅させるようにした
これによって、Tankを操作して、段差でつまづいたり壁にぶつかったりすると、その衝撃で大きな加速度が検知されて、ライトが点滅します。(CNOID_USE_GLSL=1 としておいた方がより効果が分かりやすいかと思います。)
また、プロジェクトに 「ボディ状態ビュー」を追加しました。このビューにより、選択したBodyアイテムのセンサの値を確認することができます。
VisionSensorIoRTC.cppに追加するのと,別のBodyIoRTCを作るのではどちらが適切でしょうか?
どちらでも結構ですが、VisionSensorIoRTCは名前からして視覚センサ用なので、別のRTCにするか、元々関節角などの入出力をしているRTCに統合するのがよいかと思います。
どちらにしてもセンサ値を読み出す具体的な方法がわかりません.
上記サンプルのコードを参考にしてみてください。
具体的なソースは、sample/OpenRTM の TankIoRTC.cpp や TankJoystickControllerRTC.cpp になります。
早々に対応していただきありがとうございます.
改良されたOpenRTM-Tank.cnoidを試しました.概要は把握しました.今からコードを見ていきます.
sample/OpenRTM/OpenRTM-Tank.cnoid において,重力加速度が上向きなように検出されるのですが,これは仕様でしょうか?
重力加速度が下向きであれば,前が高くなるように傾けると,加速度のx成分が負になるはずですが,正になっています.
操縦して前向きに加速すると加速度のx成分が正,減速すると負になりますので,座標系の向きが逆転していることはなさそうです.
間違っていました.加速度センサは重力の反力を測っているので上向きでいいのですね.
お騒がせしました.