車輪移動ロボット_v2.1.0
[
Front page
] [
New
|
List of pages
|
Search
|
Recent changes
|
Help
]
Start:
Up:[[Tutorial]] Previous:[[ロボット・ダイナミクス...
#contents
*車輪移動ロボット [#oab43195]
ここでは車輪移動ロボットを操作するサンプルを紹介します。
※このサンプルはバージョン2.1.0以降で動作します。
**車両モデル [#hfb27269]
このチュートリアルでは以下の車両モデルを使用します。
#ref(車輪移動ロボット(v120330 v1.4.8)/syaryou1.jpg)
上から見た車輪移動ロボット
#br
#ref(車輪移動ロボット(v120330 v1.4.8)/syaryou2.jpg)
ひっくり返した車輪移動ロボット
車体の両サイドに車輪が2つついていて、前と後ろには球のキャ...
左右の車輪は"JOINT_LWHEEL"と"JOINT_RWHEEL"という関節名で...
車体や車輪の質量、サイズ、色等はすべて形状ファイルで設定...
以下からモデルをダウンロードし、SIGVerse作業ディレクトリ...
#ref(MobileBase_2.1.0.tar.gz)
$ cd ~/MyWorld
$ tar zxvf MobileBase_2.1.0.tar.gz
**コントローラ作成 [#y57ebc89]
まずは車輪移動ロボットを操作するコントローラを作成します。
$ emacs wheelController.cpp
wheelController.cpp
#highlight(cpp){{
#include <Controller.h>
#include <ControllerEvent.h>
#include <Logger.h>
/**
* 車両モデルのサンプル
*/
class MobileController : public Controller {
public:
void onInit(InitEvent &evt);
double onAction(ActionEvent&);
void onRecvMsg(RecvMsgEvent &evt);
private:
double maxForce;
};
void MobileController::onInit(InitEvent &evt) {
maxForce = 300.0;
}
double MobileController::onAction(ActionEvent &evt) {
return 1.0;
}
//メッセージ受信時に呼び出される関数
void MobileController::onRecvMsg(RecvMsgEvent &evt)
{
//メッセージを取得します。
std::string msg = evt.getMsg();
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());
LOG_MSG(("(%f, %f)", lvel, rvel));
//速度を設定します。
my->setJointVelocity("JOINT_LWHEEL", lvel, maxForce);
my->setJointVelocity("JOINT_RWHEEL", rvel, maxForce);
}
}
extern "C" Controller * createController() {
return new MobileController;
}
}}
これはビューワーで車輪移動ロボットを操作できるサンプルで...
コンパイルします。
$ ./sigmake.sh wheelController.cpp
**世界ファイル [#j6edad8f]
次に世界ファイルを作成します。
$ emacs wheelWorld.xml
wheelWorld.xml
#highlight(xml){{
<?xml version="1.0" encoding="utf8"?>
<world name="myworld">
<gravity x="0.0" y="-980.7" z="0.0"/>
<instanciate class="mobile_base.xml">
<set-attr-value name="name" value="mobile_base_001"/>
<set-attr-value name="dynamics" value="true"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="7.0"/>
<set-attr-value name="z" value="0.0"/>
<set-attr-value name="language" value="c++"/>
<set-attr-value name="implementation" value="./wheel...
<set-attr-value name="collision" value="true"/>
</instanciate>
<instanciate class="sePetBottle2LEmpty.xml">
<set-attr-value name="name" value="petbottle_0"/>
<set-attr-value name="dynamics" value="true"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="16.67"/>
<set-attr-value name="z" value="100.0"/>
<set-attr-value name="collision" value="true"/>
</instanciate>
<instanciate class="sePetBottle2LEmpty.xml">
<set-attr-value name="name" value="petbottle_1"/>
<set-attr-value name="dynamics" value="true"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="16.67"/>
<set-attr-value name="z" value="200.0"/>
<set-attr-value name="collision" value="true"/>
</instanciate>
</world>
}}
この世界ファイルでは"mobile_base.xml"を指定しています。
カメラはロボットの車体"LINK_CENTER"に設置しました。
車輪移動ロボット以外にも障害物としてペットボトルを置きま...
**実行 [#e2f1dd3c]
それでは実行してみましょう。
$ sigserver.sh -w ./wheelWorld.xml
ビューワーで接続して見てみると車輪移動ロボットの前方にペ...
例えばビューワーからメッセージ"1 0.5"を送信してみます。
すると車両は右前方向に進み始めます。
#ref(./syaryou_4.PNG,40%)
バックすることもできます。
#highlight(end)
*Old Version [#i2524b22]
-[[車輪移動ロボット(v120330 v1.4.8)]]
Up:[[Tutorial]] Previous:[[ロボット・ダイナミクス...
End:
Up:[[Tutorial]] Previous:[[ロボット・ダイナミクス...
#contents
*車輪移動ロボット [#oab43195]
ここでは車輪移動ロボットを操作するサンプルを紹介します。
※このサンプルはバージョン2.1.0以降で動作します。
**車両モデル [#hfb27269]
このチュートリアルでは以下の車両モデルを使用します。
#ref(車輪移動ロボット(v120330 v1.4.8)/syaryou1.jpg)
上から見た車輪移動ロボット
#br
#ref(車輪移動ロボット(v120330 v1.4.8)/syaryou2.jpg)
ひっくり返した車輪移動ロボット
車体の両サイドに車輪が2つついていて、前と後ろには球のキャ...
左右の車輪は"JOINT_LWHEEL"と"JOINT_RWHEEL"という関節名で...
車体や車輪の質量、サイズ、色等はすべて形状ファイルで設定...
以下からモデルをダウンロードし、SIGVerse作業ディレクトリ...
#ref(MobileBase_2.1.0.tar.gz)
$ cd ~/MyWorld
$ tar zxvf MobileBase_2.1.0.tar.gz
**コントローラ作成 [#y57ebc89]
まずは車輪移動ロボットを操作するコントローラを作成します。
$ emacs wheelController.cpp
wheelController.cpp
#highlight(cpp){{
#include <Controller.h>
#include <ControllerEvent.h>
#include <Logger.h>
/**
* 車両モデルのサンプル
*/
class MobileController : public Controller {
public:
void onInit(InitEvent &evt);
double onAction(ActionEvent&);
void onRecvMsg(RecvMsgEvent &evt);
private:
double maxForce;
};
void MobileController::onInit(InitEvent &evt) {
maxForce = 300.0;
}
double MobileController::onAction(ActionEvent &evt) {
return 1.0;
}
//メッセージ受信時に呼び出される関数
void MobileController::onRecvMsg(RecvMsgEvent &evt)
{
//メッセージを取得します。
std::string msg = evt.getMsg();
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());
LOG_MSG(("(%f, %f)", lvel, rvel));
//速度を設定します。
my->setJointVelocity("JOINT_LWHEEL", lvel, maxForce);
my->setJointVelocity("JOINT_RWHEEL", rvel, maxForce);
}
}
extern "C" Controller * createController() {
return new MobileController;
}
}}
これはビューワーで車輪移動ロボットを操作できるサンプルで...
コンパイルします。
$ ./sigmake.sh wheelController.cpp
**世界ファイル [#j6edad8f]
次に世界ファイルを作成します。
$ emacs wheelWorld.xml
wheelWorld.xml
#highlight(xml){{
<?xml version="1.0" encoding="utf8"?>
<world name="myworld">
<gravity x="0.0" y="-980.7" z="0.0"/>
<instanciate class="mobile_base.xml">
<set-attr-value name="name" value="mobile_base_001"/>
<set-attr-value name="dynamics" value="true"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="7.0"/>
<set-attr-value name="z" value="0.0"/>
<set-attr-value name="language" value="c++"/>
<set-attr-value name="implementation" value="./wheel...
<set-attr-value name="collision" value="true"/>
</instanciate>
<instanciate class="sePetBottle2LEmpty.xml">
<set-attr-value name="name" value="petbottle_0"/>
<set-attr-value name="dynamics" value="true"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="16.67"/>
<set-attr-value name="z" value="100.0"/>
<set-attr-value name="collision" value="true"/>
</instanciate>
<instanciate class="sePetBottle2LEmpty.xml">
<set-attr-value name="name" value="petbottle_1"/>
<set-attr-value name="dynamics" value="true"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="16.67"/>
<set-attr-value name="z" value="200.0"/>
<set-attr-value name="collision" value="true"/>
</instanciate>
</world>
}}
この世界ファイルでは"mobile_base.xml"を指定しています。
カメラはロボットの車体"LINK_CENTER"に設置しました。
車輪移動ロボット以外にも障害物としてペットボトルを置きま...
**実行 [#e2f1dd3c]
それでは実行してみましょう。
$ sigserver.sh -w ./wheelWorld.xml
ビューワーで接続して見てみると車輪移動ロボットの前方にペ...
例えばビューワーからメッセージ"1 0.5"を送信してみます。
すると車両は右前方向に進み始めます。
#ref(./syaryou_4.PNG,40%)
バックすることもできます。
#highlight(end)
*Old Version [#i2524b22]
-[[車輪移動ロボット(v120330 v1.4.8)]]
Up:[[Tutorial]] Previous:[[ロボット・ダイナミクス...
Page: