- 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: [[キネクトによるエージェントの操作]]