|
|
|
このページの内容
例: 同期プログラム MyStateSync.h パソコンからの合図を受信するための部品ファイル StartCommFromPC.h をインクルードします。#include "StartCommFromPC.h" // PCから合図を受信するための部品ファイル
パソコンからの合図を受信するためのオブジェクト fromPC を protected 変数として定義します。
StartCommFromPC fromPC; // PCからの合図を受け取るオブジェクト
アイボは合図を TextMessageEvent として受信します。
したがって、合図をもとに動かしたい部分を TextMessageEvent の遷移として記述します。// PCからの合図(TextMessageEvent)による遷移(伏せ→座り)
EventTrans * textTrans = new EventTrans(sit_node,EventBase::textmsgEGID);
lie_node->addTransition(textTrans);DoStart() 関数の中で、fromPC をスタートさせます。
fromPC.DoStart(); // fromPCオブジェクトをスタート
DoStop() 関数の中で、fromPC をストップさせます。
fromPC.DoStop(); // fromPCオブジェクトをストップ
秀丸を開き、上記プログラム(背景が黄色)をコピー&貼り付け、次の通り保存してください。
#ifndef INCLUDED_MyStateSync_h_ // このファイル INCLUDED_MyStateSync_h_ が定義されていなければ #define INCLUDED_MyStateSync_h_ // このファイル INCLUDED_MyStateSync_h_ を定義する #include "Shared/ERS7Info.h" // AIBOの機種(ERS7)に関する部品ファイル #include "Shared/WorldState.h" // 状態を監視するための部品ファイル #include "StateHeader.h" // 状態と遷移に必要な部品ファイル #include "StartCommFromPC.h" // PCから合図を受信するための部品ファイル // クラス MyStateSync class MyStateSync : public StateNode { protected: StateNode * start_node; // start_nodeは、クラス全体で使用するのでココに定義する StartCommFromPC fromPC; // PCからの合図を受け取るオブジェクト public: // コンストラクタ MyStateSync() : StateNode("MyStateSync"), start_node(NULL), fromPC() {} // デコンストラクタ ~MyStateSync() { if(issetup) teardown(); } virtual void setup() { // 親クラスStateNodeのsetup()関数を呼ぶ StateNode::setup(); // 伏せノード作成 StateNode * lie_node = new SmallMotionSequenceNode("Lie","lielie.mot"); addNode(lie_node); // 座り姿勢ノード StateNode * sit_node = new SmallMotionSequenceNode("Sit","sitsit.mot"); addNode(sit_node); // 立ち姿勢ノード StateNode * stand_node = new MediumMotionSequenceNode("Stand","sitwalk.mot"); addNode(stand_node); // 頭ニュートラル_ノード StateNode * headneutral_node = new SmallMotionSequenceNode("HeadNeutral","headneut.mot"); addNode(headneutral_node); // 立ち→座りモーション_ノード StateNode * standsit_node = new MediumMotionSequenceNode("StandSit","standsit.mot"); addNode(standsit_node); // スタートは伏せ姿勢 start_node = lie_node; // PCからの合図(TextMessageEvent)による遷移(伏せ→座り) EventTrans * textTrans = new EventTrans(sit_node,EventBase::textmsgEGID); lie_node->addTransition(textTrans); // 遷移(座り→立ち→頭正面) sit_node->addTransition(new CompletionTrans(stand_node)); stand_node->addTransition(new CompletionTrans(headneutral_node)); // 頭正面の状態で1秒経過したら立ち→座り headneutral_node->addTransition(new TimeOutTrans(standsit_node,1000)); } virtual void DoStart() { StateNode::DoStart(); start_node->DoStart(); fromPC.DoStart(); // fromPCオブジェクトをスタート } virtual void DoStop() { StateNode::DoStop(); fromPC.DoStop(); // fromPCオブジェクトをストップ } virtual void teardown() { StateNode::teardown(); } private: // コンパイル時の警告を避けるためのダミー関数 MyStateSync(const MyStateSync&); MyStateSync operator=(const MyStateSync&); }; #endif保 存 先 : マイドキュメント → usXX → project
ファイル名 : MyStateSync.h
ファイル種類: C言語ヘッダーファイル(*.h)次に、合図を送信するためのプログラムを準備します(この準備は1度やれば、2度目は不要です)。
MyStateSync をTekkotsuに組み込んでください。同じプログラム名ならば1度組み込めばOKです。
- ここをクリックして、ウィンドウが開いたら保存ボタンを押してデスクトップにダウンロードして下さい。
- デスクトップにダウンロードした sync.EXE をダブルクリックして解凍してください。
- 解凍すると、デスクトップに sync というフォルダができます。
- syncフォルダを次のフォルダの中に入れてください。
マイドキュメント → usXXコンパイルしてください。これはプログラムを修正するたびに必要です。
動かすアイボの台数とIPアドレスを設定します。アイボの台数とIPアドレスが変わるたびに設定が必要です。
実行してください。
- 次のフォルダを開いてください。
マイドキュメント → usXX → sync
- aiboip.txt を秀丸で開いて、アイボの台数とIPアドレスを設定してください。
1行目・・・アイボの台数
2行目・・・7777(ポート番号。変更不要)
3行目以降・・・アイボのIPアドレス
2台の場合の例↓
2
7777
10.0.1.11
10.0.1.12
[EOF]ただし、実行してもアイボは「伏せ」の状態で待機しますから、次のようにしてパソコンから合図を送信します。
合図の送信方法はアイボが1台の場合と、2台以上の場合で異なります。
- アイボが1台の場合
コントロール画面の Send Input: 欄で、 !msg を打ち込み、キーボードのEnterキーを押せば、アイボがスタートします。
- アイボが2台以上の場合
- さきほど準備した 合図送信プログラムの出番です。
- 新たに Cygwin 画面を開いてください。
- Cygwin画面で次の通り打ち込んでください。
us0X@xxxxx ~ $ cd sync us0X@xxxxx ~sync $ java startaibo- あとは、Cygwin画面に出る指示にしたがってください。
|
|
|