- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
- 眼球運動 has been deleted.
- Deleting diff of 眼球運動
Up:[[Tutorial]] Previous:[[距離センサ]] Next: [[キネクトによるエージェントの操作]]
#contents
*眼球運動 [#r8deca10]
人間が目玉を動かすサンプルを紹介します。
**コントローラ作成 [#pa99c726]
コントローラを作成します。
$ emacs moveEye.cpp
#highlight(cpp){{
#include "ControllerEvent.h"
#include "Controller.h"
#include "Logger.h"
#define PI 3.141592
#define DEG2RAD(DEG) ( (PI) * (DEG) / 180.0 )
using namespace std;
class MyController : public Controller {
public:
void onInit(InitEvent &evt);
double onAction(ActionEvent&);
void onRecvMsg(RecvMsgEvent &evt);
void onCollision(CollisionEvent &evt);
};
void MyController::onInit(InitEvent &evt) {
}
double MyController::onAction(ActionEvent &evt) {
return 1.0;
}
void MyController::onRecvMsg(RecvMsgEvent &evt) {
//取得したメッセージを表示します
string msg = evt.getMsg();
LOG_MSG(("msg : %s", msg.c_str()));
SimObj *my = getObj(myname());
if(strstr(msg.c_str()," "))
{
// phi theta に分ける
int n = 0;
n = msg.find(" ");
string phi_s = msg.substr(0,n);
string theta_s = msg.substr(n+1);
double phi = atof(theta_s.c_str());
double theta = atof(phi_s.c_str());
// 目玉関節を回転させる
my->setJointAngle("LEYE_JOINT1",DEG2RAD(phi));
my->setJointAngle("REYE_JOINT1",DEG2RAD(phi));
my->setJointAngle("LEYE_JOINT0",DEG2RAD(theta));
my->setJointAngle("REYE_JOINT0",DEG2RAD(theta));
}
}
void MyController::onCollision(CollisionEvent &evt) {
}
extern "C" Controller * createController() {
return new MyController;
}
}}
このコントローラは目玉を動かすサンプルです。
目を動かす方法は普通の関節を動かす方法と同じでsetJointAngleを使います。
横方向の回転角度と縦方向の回転角度をメッセージとして受信すると目玉を動かします。
コンパイルします。
$ ./sigmake.sh moveEye.cpp
**世界ファイル [#k6e08594]
世界ファイルを作成します。
$ emacs moveEye.xml
#highlight(cpp){{
<?xml version="1.0" encoding="utf8"?>
<world name="newworld">
<gravity x="0.0" y="-980.7" z="0.0"/>
<instanciate class="Man-nii.xml">
<set-attr-value name="name" value="man_0"/>
<set-attr-value name="language" value="c++"/>
<set-attr-value name="implementation"
value="./moveEye.so"/>
<set-attr-value name="dynamics" value="false"/>
<set-attr-value name="x" value="0.0"/>
<set-attr-value name="y" value="60.0"/>
<set-attr-value name="z" value="0.0"/>
</instanciate>
</world>
}}
人間だけが登場するシンプルな世界ファイルです。
**実行 [#bfeada84]
それでは実行してみましょう。
$ sigserver.sh -w ./moveEye.xml
ビューワーで接続すると人間が立っています。
例えばメッセージ"20 10"と送信すると人間エージェントは横方向に20°、縦方向に10°目玉を回転させます。
#ref(./moveEye.PNG,40%)
#highlight(end)
*Old Version [#bac32fb8]
-[[眼球運動(v1.4.8)]]
Up:[[Tutorial]] Previous:[[距離センサ]] Next: [[キネクトによるエージェントの操作]]