s-nakaoka / choreonoid

An integrated graphical robotics application framework
http://choreonoid.org
Other
94 stars 58 forks source link

コントローラからのシミュレーション時間取得方法について #214

Closed anazawa-t closed 6 years ago

anazawa-t commented 6 years ago

ある一定時間ロボットに同様の動作をさせたいと思っており、そのためにシミュレーション時間を取得したいのですが、コントローラ側でChoreonoidに表示されているシミュレーション時間を取得することは可能なのでしょうか? 可能であれば、取得方法をご教示頂けないでしょうか。

kyawawa commented 6 years ago

こちらですが,SimulatorItemのsimulationTime()で取得できるみたいです. https://github.com/s-nakaoka/choreonoid/blob/master/src/BodyPlugin/SimulatorItem.h#L112

簡単ですが以下のような感じで取得出来ました. ちなみにですが,SimulatorItem::findActiveSimulatorItemForはinitialize後でないと見つからないのでstartあたりに書く必要がありました.

#include <cnoid/RootItem>
#include <cnoid/SimulatorItem>

virtual bool initialize(SimpleControllerIO* io) override
{
    ...
    robot_name_ = io->body()->name();
    ...
}

virtual bool start() override
{
    Item* robot_item = RootItem::instance()->findItem(robot_name_);
    simulator_item_ = SimulatorItem::findActiveSimulatorItemFor(robot_item);
    return true;
}

virtual bool control() override
{
    simulator_item_->simulationTime();
}
anazawa-t commented 6 years ago

kyawawaさん

ご回答いただきありがとうございます。 無事にシミュレータの時間を取得することができました。