[rc-simjp 427] Re: [RoboCuprescue]Sample-Naito について

Back to archive index

Taiyou Hara taiyo****@kishi*****
2008年 9月 11日 (木) 16:44:20 JST


近畿大学中川様

SUNTORIの原です。

現在の仕様では、通信は「チャンネル」を用いたものとなっています。メッセー
ジは送信する際に必ず「チャンネル番号」を指定しなければいけません。メッ
セージはそのチャンネル番号を受信するように要請したエージェントが受信しま
す。無線通信の周波数みたいなものと考えればよいかと思います。

サンプルではyab.agent内Agentクラスに含まれている次のメソッドが通信に関係
する処理を担当しています。
1.setMyChannel()→受信するチャンネル番号の指定
2.channel(byte[])→メッセージの受信要請
3.tell(int,byte[])→メッセージの送信
4.hear(RealObject,String)→聞き取ったメッセージ

受信側では1、2、4を扱い、送信側では3を扱います。以下で具体例と共にそ
れぞれの使い方を説明します。
・受信側の実装
1.オーバーライドしたsetMyChannel()内で、受信チャンネルの設定をする。例:
setMyChannel(){
 myChannel=1
}
*ただし、2チャンネル以上同時に設定する場合は論理和で指定)
*チャンネル番号はyab.io内ProtocolConstantsクラスに定数が用意してあるの
でそちらを使ったほうがわかりやすいかもしれません。

2.channelを呼び出し、メッセージを受信要請をカーネルに出す
例:
act(){
 channel(new byte[]{1});
}
*2チャンネル以上同時に要請する場合は、その分だけ配列に追加する

・送信側の実装
3.送信するメッセージと送信先のチャンネル番号を引数にしてtellメソッド呼
び出し
例:
tell(1,"test")

・確認
4.送受信ともに問題なければ、数ステップ後メッセージを受け取ったときに受
信側のhear(RealObject,String)が呼び出されます。RealObjectが送信者、
Stringにメッセージが入っているはずです。確認してください。


以上で最低限の通信は可能となりますが、Yab-APIをそのまま利用する場合は、
いくつか制限があるので少し注意が必要になります。
・センター⇔チーム、センター⇔センターの通信は問題ないが、チーム⇔チームで
の通信は無視される(hearメソッドを呼ばない)
・自分自身の出したメッセージは無視する
・チャンネル0番(SAY)を使わない
このあたりのことはYab-API内のAgentクラスを直接参照していただけたら理解&
変更できるかと思います。私としてはだいたいの仕様を理解したあたりで使いや
すいように改造するのがいいかと思います。

通信周りのことはややこしく、まだいくつか注意点があったりします。しかし長
くなりましたので一旦ここまでとします。いかがでしょうか。

> 近畿大学の中川といいます。
> 前年の秋キャンプで配布されたSample-Naitoをベースにして開発をしています。
> 
> 現在、このSample-Naitoのエージェントの通信をできるようにしたいと思っているのですが、どう手をつけていいのか分からずに悩んでいます。
> 
> そこで質問なのですが、通信を出来るようにするにはどうしたらよいのか、どなたかご存知なら教えてもらえないでしょうか?
> どんな些細なことでも構いませんので、お願いします。
> 

-- 
/**
 * 原 大曜 
 * 石井(健)研究室 社会システム情報学専攻
 * 名古屋大学大学院 情報科学研究科
 * e-mail : taiyo****@kishi*****
 * 内線  : 3813
 */




Rc-oz-simjp メーリングリストの案内
Back to archive index