Tutorial?
ここでは車輪移動ロボットを操作するサンプルを紹介します。
※バージョン111026以降で正常に動作
ここではデフォルトで用意されている車輪移動ロボットのモデル(OpenHRP形式)を用います。
まずは車輪移動ロボットを操作するコントローラを作成します。
$ cd ~/sigverse-<version>/bin/NewWorld $ emacs WheelController.cpp
wheelController.cpp
#include <Controller.h> #include <ControllerEvent.h> #include <Logger.h> /** * 車両モデルのサンプル */ class DumbelController : public Controller { public: void onInit(InitEvent &evt); double onAction(ActionEvent&); void onRecvMessage(RecvMessageEvent &evt); private: double maxForce; }; void DumbelController::onInit(InitEvent &evt) { maxForce = 300.0; } double DumbelController::onAction(ActionEvent &evt) { return 1.0; } //メッセージ受信時に呼び出される関数 void DumbelController::onRecvMessage(RecvMessageEvent &evt) { int n = evt.getSize(); if (n>0) { //メッセージを取得します。 std::string msg = evt.getString(0); SimObj *my = getObj(myname()); //メッセージ":"が含まれていると左右の車輪の角速度を設定します。 if (strstr(msg.c_str(), ":")) { //メッセージを左と右の角速度に分けます. std::string left_vel; std::string right_vel; int n = 0; n = msg.find(":"); left_vel = msg.substr(0,n); right_vel = msg.substr(n+1); double lvel = atof(left_vel.c_str()); double rvel = atof(right_vel.c_str()); //速度を設定します。 my->setJointVelocity("JOINT_LWHEEL", lvel, maxForce); my->setJointVelocity("JOINT_RWHEEL", rvel, maxForce); } } } extern "C" Controller * createController() { return new DumbelController; }