[[Tutorial]]

*車輪移動ロボット [#oab43195]
ここでは車輪移動ロボットを操作するサンプルを紹介します。

※バージョン111026以降で正常に動作

**車両モデル [#hfb27269]
ここではデフォルトで用意されている車輪移動ロボットのモデル(OpenHRP形式)を用います。

//用いる車輪移動ロボットの形状ファイル
//#ref(wheel_robot.x3d)

#ref(syaryou1.jpg,left)
#ref(syaryou2.jpg,right)

**コントローラ作成 [#y57ebc89]
まずは車輪移動ロボットを操作するコントローラを作成します。
 $ 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;
 }

Front page   New List of pages Search Recent changes   Help   RSS of recent changes