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;
}