車輪移動ロボット(v120330 v1.4.8)
[
Front page
] [
New
|
List of pages
|
Search
|
Recent changes
|
Help
]
Start:
Up:[[Tutorial]] Previous:[[ロボット・ダイナミクス...
#contents
*車輪移動ロボット [#oab43195]
ここでは車輪移動ロボットを操作するサンプルを紹介します。
※SIGVerseのバージョン111026、ビューワー1.4.2以降で正常に...
**車両モデル [#hfb27269]
ここではデフォルトで用意されている車輪移動ロボットのモデ...
#ref(syaryou1.jpg)
上から見た車輪移動ロボット
#br
#ref(syaryou2.jpg)
ひっくり返した車輪移動ロボット
車体の両サイドに車輪が2つついていて、前と後ろには球のキャ...
左右の車輪は"JOINT_LWHEEL"と"JOINT_RWHEEL"という関節名で...
車体や車輪の質量、サイズ、色等はすべて形状ファイルで設定...
形状ファイルはこちら(※ダウンロードする必要はありません)
#ref(wheel_robot.x3d)
**コントローラ作成 [#y57ebc89]
まずは車輪移動ロボットを操作するコントローラを作成します。
$ cd ~/sigverse-<version>/bin/NewWorld
$ emacs wheelController.cpp
wheelController.cpp
#highlight(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 &e...
{
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, max...
my->setJointVelocity("JOINT_RWHEEL", rvel, max...
}
}
}
extern "C" Controller * createController() {
return new DumbelController;
}
}}
これはビューワーで車輪移動ロボットを操作できるサンプルで...
Makefileを修正してコンパイルします。(動作手順省略)
**世界ファイル [#j6edad8f]
次に世界ファイルを作成します。
$ cd ..
$ emacs xml/wheelWorld.xml
wheelWorld.xml
#highlight(xml){{
<?xml version="1.0" encoding="utf8"?>
<world name="myworld">
<gravity x="0.0" y="-9.8" z="0.0"/>
<instanciate class="WheelRobot.xml">
<set-attr-value name="name" value="Robot1"/>
<set-attr-value name="dynamics" value="true"/>
<set-attr-value name="elnk1" value="LINK_CENTER"/>
<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="./NewWo...
</instanciate>
<instanciate class="sePetBottle2LEmpty.xml">
<set-attr-value name="name" value="petbottle_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="25.0"/>
<set-attr-value name="z" value="100.0"/>
</instanciate>
<instanciate class="sePetBottle2LEmpty.xml">
<set-attr-value name="name" value="petbottle_1"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="25.0"/>
<set-attr-value name="z" value="200.0"/>
</instanciate>
</world>
}}
この世界ファイルでは車輪移動ロボット"WheelRobot.xml"を指...
カメラはロボットの車体"LINK_CENTER"に設置しました。
車輪移動ロボット以外にも障害物としてペットボトルを置きま...
**実行 [#e2f1dd3c]
それでは実行してみましょう。
$ ./sigserver.sh -p 9001 -w xml/wheelWorld.xml
ビューワーで接続して見てみると車輪移動ロボットの前方にペ...
#ref(syaryou3.jpg)
例えばビューワーからメッセージ"1:0.5"を送信してみます。
すると車両は右前方向に進み始めます。
#ref(syaryou4.jpg)
障害物に衝突しないよういろいろと移動してみてください。
車輪の特性など細かい設定を行いたい場合は[[こちら>車輪プロ...
#highlight(end)
Up:[[Tutorial]] Previous:[[ロボット・ダイナミクス...
End:
Up:[[Tutorial]] Previous:[[ロボット・ダイナミクス...
#contents
*車輪移動ロボット [#oab43195]
ここでは車輪移動ロボットを操作するサンプルを紹介します。
※SIGVerseのバージョン111026、ビューワー1.4.2以降で正常に...
**車両モデル [#hfb27269]
ここではデフォルトで用意されている車輪移動ロボットのモデ...
#ref(syaryou1.jpg)
上から見た車輪移動ロボット
#br
#ref(syaryou2.jpg)
ひっくり返した車輪移動ロボット
車体の両サイドに車輪が2つついていて、前と後ろには球のキャ...
左右の車輪は"JOINT_LWHEEL"と"JOINT_RWHEEL"という関節名で...
車体や車輪の質量、サイズ、色等はすべて形状ファイルで設定...
形状ファイルはこちら(※ダウンロードする必要はありません)
#ref(wheel_robot.x3d)
**コントローラ作成 [#y57ebc89]
まずは車輪移動ロボットを操作するコントローラを作成します。
$ cd ~/sigverse-<version>/bin/NewWorld
$ emacs wheelController.cpp
wheelController.cpp
#highlight(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 &e...
{
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, max...
my->setJointVelocity("JOINT_RWHEEL", rvel, max...
}
}
}
extern "C" Controller * createController() {
return new DumbelController;
}
}}
これはビューワーで車輪移動ロボットを操作できるサンプルで...
Makefileを修正してコンパイルします。(動作手順省略)
**世界ファイル [#j6edad8f]
次に世界ファイルを作成します。
$ cd ..
$ emacs xml/wheelWorld.xml
wheelWorld.xml
#highlight(xml){{
<?xml version="1.0" encoding="utf8"?>
<world name="myworld">
<gravity x="0.0" y="-9.8" z="0.0"/>
<instanciate class="WheelRobot.xml">
<set-attr-value name="name" value="Robot1"/>
<set-attr-value name="dynamics" value="true"/>
<set-attr-value name="elnk1" value="LINK_CENTER"/>
<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="./NewWo...
</instanciate>
<instanciate class="sePetBottle2LEmpty.xml">
<set-attr-value name="name" value="petbottle_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="25.0"/>
<set-attr-value name="z" value="100.0"/>
</instanciate>
<instanciate class="sePetBottle2LEmpty.xml">
<set-attr-value name="name" value="petbottle_1"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="25.0"/>
<set-attr-value name="z" value="200.0"/>
</instanciate>
</world>
}}
この世界ファイルでは車輪移動ロボット"WheelRobot.xml"を指...
カメラはロボットの車体"LINK_CENTER"に設置しました。
車輪移動ロボット以外にも障害物としてペットボトルを置きま...
**実行 [#e2f1dd3c]
それでは実行してみましょう。
$ ./sigserver.sh -p 9001 -w xml/wheelWorld.xml
ビューワーで接続して見てみると車輪移動ロボットの前方にペ...
#ref(syaryou3.jpg)
例えばビューワーからメッセージ"1:0.5"を送信してみます。
すると車両は右前方向に進み始めます。
#ref(syaryou4.jpg)
障害物に衝突しないよういろいろと移動してみてください。
車輪の特性など細かい設定を行いたい場合は[[こちら>車輪プロ...
#highlight(end)
Up:[[Tutorial]] Previous:[[ロボット・ダイナミクス...
Page: