- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
[[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;
}