視覚に関する操作(v2.0系)
[
Front page
] [
New
|
List of pages
|
Search
|
Recent changes
|
Help
]
Start:
Up:[[Tutorial]] Previous:[[エージェント間のメッ...
----
#contents
*視覚に関する操作方法 [#f37ce459]
視覚に関する操作方法を説明します。~
//なお、ここで説明する機能はSIGViewer1.3.5以降のバージョ...
**周りを見渡す [#scce7ec9]
エージェントがいろいろな方向を見渡すことができるサンプル...
***コントローラ作成 [#t10e6f74]
$ cd ~/sigverse-<version>/bin/NewWorld
$ emacs WatchController.cpp
WatchController.cpp
#highlight(cpp){{
#include "Controller.h"
#include "Logger.h"
#include "ControllerEvent.h"
#define PI 3.141592
#define DEG2RAD(DEG) ( (PI) * (DEG) / 180.0 )
class WatchController : public Controller
{
public:
void onRecvMsg(RecvMsgEvent &evt);
};
void WatchController::onRecvMsg(RecvMsgEvent &evt)
{
SimObj *my = getObj(myname());
//受け取ったメッセージをint型に変換します
const char *value = evt.getMsg();
int angle = atoi(value);
if (angle <= 180 && angle >=-180){
//体全体をz軸から指定した角度だけ回転します
my->setAxisAndAngle(0, 1.0, 0, DEG2RAD(angle));
}
}
extern "C" Controller * createController ()
{
return new WatchController;
}
}}
これは回転する角度をメッセージとして受信して、その角度だ...
z軸方向(ロボットが最初に前を向いている方向)からの角度を...
***コンパイル [#ebdcf9b7]
Makefileの変数OBJSにWatchController.soを追加してコンパイ...
***リビングルームの世界ファイル作成 [#iea3d264]
新しく世界ファイルを作成します。
//前回の世界ファイルは一応残しておきます。
$ cd ~/sigverse-<version>/bin
// $ mv xml/MyWorld.xml xml/MoveWorld.xml
$ emacs xml/WatchWorld.xml
WatchWorld.xml
#highlight(xml){{
<?xml version="1.0" encoding="utf8"?>
<world name="myworld5">
<gravity x="0.0" y="-980.7" z="0.0"/>
<!--エージェントRobot-niiの設定-->
<instanciate class="Robot-nii.xml">
<!--エージェント名-->
<set-attr-value name="name" value="robot_000"/>
<!--C++言語の指定-->
<set-attr-value name="language" value="c++"/>
<!--コントローラの指定-->
<set-attr-value name="implementation"
value="./NewWorld/WatchController.so"/>
<!--動力学演算をfalseに設定-->
<set-attr-value name="dynamics" value="false"/>
<!--エージェントの位置(x,y,z)-->
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="54.0"/>
<set-attr-value name="z" value="-40.0"/>
<!--カメラのID番号,リンク名、方向、位置の設定-->
<camera id="1"
link="HEAD_LINK"
direction="0 -1 1"
position="0.0 0.0 5.0"/>
</instanciate>
<!--リビングルーム-->
<instanciate class="seTV.xml">
<set-attr-value name="name" value="TV_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-20.0"/>
<set-attr-value name="y" value="62.0"/>
<set-attr-value name="z" value="-250.0"/>
<set-attr-value name="visStateAttrName" value="switch...
<set-attr-value name="switch" value="on"/>
</instanciate>
<instanciate class="seDoll_Bear.xml">
<set-attr-value name="name" value="kuma_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="9.0"/>
<set-attr-value name="z" value="0.0"/>
</instanciate>
<instanciate class="seToy_D.xml">
<set-attr-value name="name" value="penguin_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="50.0"/>
<set-attr-value name="y" value="7.0"/>
<set-attr-value name="z" value="-40.0"/>
</instanciate>
<instanciate class="seSofa_2seater.xml">
<set-attr-value name="name" value="sofa_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-200.0"/>
<set-attr-value name="y" value="30.0"/>
<set-attr-value name="z" value="-100.0"/>
<set-attr-value name="qw" value="0.707"/>
<set-attr-value name="qx" value="0.0"/>
<set-attr-value name="qy" value="0.707"/>
<set-attr-value name="qz" value="0.0"/>
</instanciate>
<instanciate class="seTVbass_B.xml">
<set-attr-value name="name" value="TVdai_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-20.0"/>
<set-attr-value name="y" value="8.0"/>
<set-attr-value name="z" value="-250.0"/>
</instanciate>
<instanciate class="sePlant_B.xml">
<set-attr-value name="name" value="ki_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="100.0"/>
<set-attr-value name="y" value="35.0"/>
<set-attr-value name="z" value="-250.0"/>
</instanciate>
<instanciate class="seSidetable_B.xml">
<set-attr-value name="name" value="sidetable_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-100.0"/>
<set-attr-value name="y" value="23.0"/>
<set-attr-value name="z" value="-100.0"/>
<set-attr-value name="qw" value="0.707"/>
<set-attr-value name="qx" value="0.0"/>
<set-attr-value name="qy" value="0.707"/>
<set-attr-value name="qz" value="0.0"/>
</instanciate>
<instanciate class="seApple.xml">
<set-attr-value name="name" value="apple_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-50.0"/>
<set-attr-value name="y" value="3.0"/>
<set-attr-value name="z" value="30.0"/>
</instanciate>
<instanciate class="seOrange.xml">
<set-attr-value name="name" value="orange_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="70.0"/>
<set-attr-value name="y" value="2.0"/>
<set-attr-value name="z" value="-30.0"/>
</instanciate>
</world>
}}
これはリビングルームにヒューマノイドロボット(Robot-nii.xm...
この世界ファイルではロボットエージェントにカメラが設置さ...
#highlight(xml:firstline[28]){{
<camera id="1"
link="HEAD_LINK"
direction="0 -1 1"
position="0.0 0.0 5.0"/>
}}
linkでカメラを設置するパーツ名を指定します。このサンプル...
カメラの位置はlinkを設定した場合はlinkの位置からの相対位...
direction, position でカメラの方向ベクトル、位置を設定し...
同様にaspectRatio, FOV(field of view)なども設定できます。
1エージェントに複数個のカメラを設置する場合は以下のように...
#highlight(xml:firstline[28]){{
<camera id="1"
link="HEAD_LINK"
direction="0 -1 1"
position="0.0 0.0 5.0"/>
<camera id="2"
link="LARM_LINK7"
direction="0 0 1"
position="0.0 0.0 0.0"/>
}}
***起動 [#s12fde3f]
それでは起動してみましょう。
$ ./sigserver.sh -w WatchWorld.xml -p 9001
SIGViewerでサーバに接続して、シミュレーションを開始します...
#ref(./watch_1.PNG,40%)
次に、ヒューマノイドロボットをクリックすると、左上の小さ...
#ref(./watch_2.PNG)
さらにその枠の右上にあるボタンを押すとロボットから見た映...
#ref(./watch_3.PNG,40%)
元に戻したい場合はもう一度左上のサブウィンドウの右上にあ...
次に右下のトレイにある"Message"ボタンをクリックして、ヒュ...
#ref(./watch_4.PNG,80%)
するとロボットが90°回転してロボットの視線からはオレンジや...
#ref(./watch_5.PNG,40%)
*Old Version [#e5d66315]
-[[視覚に関する操作(v120330, v1.4.8)]]
----
#highlight(end)
Up:[[Tutorial]] Previous:[[エージェント間のメッ...
End:
Up:[[Tutorial]] Previous:[[エージェント間のメッ...
----
#contents
*視覚に関する操作方法 [#f37ce459]
視覚に関する操作方法を説明します。~
//なお、ここで説明する機能はSIGViewer1.3.5以降のバージョ...
**周りを見渡す [#scce7ec9]
エージェントがいろいろな方向を見渡すことができるサンプル...
***コントローラ作成 [#t10e6f74]
$ cd ~/sigverse-<version>/bin/NewWorld
$ emacs WatchController.cpp
WatchController.cpp
#highlight(cpp){{
#include "Controller.h"
#include "Logger.h"
#include "ControllerEvent.h"
#define PI 3.141592
#define DEG2RAD(DEG) ( (PI) * (DEG) / 180.0 )
class WatchController : public Controller
{
public:
void onRecvMsg(RecvMsgEvent &evt);
};
void WatchController::onRecvMsg(RecvMsgEvent &evt)
{
SimObj *my = getObj(myname());
//受け取ったメッセージをint型に変換します
const char *value = evt.getMsg();
int angle = atoi(value);
if (angle <= 180 && angle >=-180){
//体全体をz軸から指定した角度だけ回転します
my->setAxisAndAngle(0, 1.0, 0, DEG2RAD(angle));
}
}
extern "C" Controller * createController ()
{
return new WatchController;
}
}}
これは回転する角度をメッセージとして受信して、その角度だ...
z軸方向(ロボットが最初に前を向いている方向)からの角度を...
***コンパイル [#ebdcf9b7]
Makefileの変数OBJSにWatchController.soを追加してコンパイ...
***リビングルームの世界ファイル作成 [#iea3d264]
新しく世界ファイルを作成します。
//前回の世界ファイルは一応残しておきます。
$ cd ~/sigverse-<version>/bin
// $ mv xml/MyWorld.xml xml/MoveWorld.xml
$ emacs xml/WatchWorld.xml
WatchWorld.xml
#highlight(xml){{
<?xml version="1.0" encoding="utf8"?>
<world name="myworld5">
<gravity x="0.0" y="-980.7" z="0.0"/>
<!--エージェントRobot-niiの設定-->
<instanciate class="Robot-nii.xml">
<!--エージェント名-->
<set-attr-value name="name" value="robot_000"/>
<!--C++言語の指定-->
<set-attr-value name="language" value="c++"/>
<!--コントローラの指定-->
<set-attr-value name="implementation"
value="./NewWorld/WatchController.so"/>
<!--動力学演算をfalseに設定-->
<set-attr-value name="dynamics" value="false"/>
<!--エージェントの位置(x,y,z)-->
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="54.0"/>
<set-attr-value name="z" value="-40.0"/>
<!--カメラのID番号,リンク名、方向、位置の設定-->
<camera id="1"
link="HEAD_LINK"
direction="0 -1 1"
position="0.0 0.0 5.0"/>
</instanciate>
<!--リビングルーム-->
<instanciate class="seTV.xml">
<set-attr-value name="name" value="TV_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-20.0"/>
<set-attr-value name="y" value="62.0"/>
<set-attr-value name="z" value="-250.0"/>
<set-attr-value name="visStateAttrName" value="switch...
<set-attr-value name="switch" value="on"/>
</instanciate>
<instanciate class="seDoll_Bear.xml">
<set-attr-value name="name" value="kuma_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="9.0"/>
<set-attr-value name="z" value="0.0"/>
</instanciate>
<instanciate class="seToy_D.xml">
<set-attr-value name="name" value="penguin_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="50.0"/>
<set-attr-value name="y" value="7.0"/>
<set-attr-value name="z" value="-40.0"/>
</instanciate>
<instanciate class="seSofa_2seater.xml">
<set-attr-value name="name" value="sofa_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-200.0"/>
<set-attr-value name="y" value="30.0"/>
<set-attr-value name="z" value="-100.0"/>
<set-attr-value name="qw" value="0.707"/>
<set-attr-value name="qx" value="0.0"/>
<set-attr-value name="qy" value="0.707"/>
<set-attr-value name="qz" value="0.0"/>
</instanciate>
<instanciate class="seTVbass_B.xml">
<set-attr-value name="name" value="TVdai_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-20.0"/>
<set-attr-value name="y" value="8.0"/>
<set-attr-value name="z" value="-250.0"/>
</instanciate>
<instanciate class="sePlant_B.xml">
<set-attr-value name="name" value="ki_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="100.0"/>
<set-attr-value name="y" value="35.0"/>
<set-attr-value name="z" value="-250.0"/>
</instanciate>
<instanciate class="seSidetable_B.xml">
<set-attr-value name="name" value="sidetable_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-100.0"/>
<set-attr-value name="y" value="23.0"/>
<set-attr-value name="z" value="-100.0"/>
<set-attr-value name="qw" value="0.707"/>
<set-attr-value name="qx" value="0.0"/>
<set-attr-value name="qy" value="0.707"/>
<set-attr-value name="qz" value="0.0"/>
</instanciate>
<instanciate class="seApple.xml">
<set-attr-value name="name" value="apple_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="-50.0"/>
<set-attr-value name="y" value="3.0"/>
<set-attr-value name="z" value="30.0"/>
</instanciate>
<instanciate class="seOrange.xml">
<set-attr-value name="name" value="orange_0"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="70.0"/>
<set-attr-value name="y" value="2.0"/>
<set-attr-value name="z" value="-30.0"/>
</instanciate>
</world>
}}
これはリビングルームにヒューマノイドロボット(Robot-nii.xm...
この世界ファイルではロボットエージェントにカメラが設置さ...
#highlight(xml:firstline[28]){{
<camera id="1"
link="HEAD_LINK"
direction="0 -1 1"
position="0.0 0.0 5.0"/>
}}
linkでカメラを設置するパーツ名を指定します。このサンプル...
カメラの位置はlinkを設定した場合はlinkの位置からの相対位...
direction, position でカメラの方向ベクトル、位置を設定し...
同様にaspectRatio, FOV(field of view)なども設定できます。
1エージェントに複数個のカメラを設置する場合は以下のように...
#highlight(xml:firstline[28]){{
<camera id="1"
link="HEAD_LINK"
direction="0 -1 1"
position="0.0 0.0 5.0"/>
<camera id="2"
link="LARM_LINK7"
direction="0 0 1"
position="0.0 0.0 0.0"/>
}}
***起動 [#s12fde3f]
それでは起動してみましょう。
$ ./sigserver.sh -w WatchWorld.xml -p 9001
SIGViewerでサーバに接続して、シミュレーションを開始します...
#ref(./watch_1.PNG,40%)
次に、ヒューマノイドロボットをクリックすると、左上の小さ...
#ref(./watch_2.PNG)
さらにその枠の右上にあるボタンを押すとロボットから見た映...
#ref(./watch_3.PNG,40%)
元に戻したい場合はもう一度左上のサブウィンドウの右上にあ...
次に右下のトレイにある"Message"ボタンをクリックして、ヒュ...
#ref(./watch_4.PNG,80%)
するとロボットが90°回転してロボットの視線からはオレンジや...
#ref(./watch_5.PNG,40%)
*Old Version [#e5d66315]
-[[視覚に関する操作(v120330, v1.4.8)]]
----
#highlight(end)
Up:[[Tutorial]] Previous:[[エージェント間のメッ...
Page: