Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

Arduinoねた その68 NXTとの接続 続き

2015-02-25 | Arduinoねた

それでは、今度は Arduino から NXT にデータを送るサンプルです。

I2Cアドレスは 0x62 で、0x20 から 2バイトを読む、というようなプログラムです。

 

NXT側

#define I2C_PORT    IN_1

int getData()
  {
  byte Wbuf[]={ 0x62,0x20 };
  byte Rbuf[2];
  int i=2;
  int data;

  I2CBytes(I2C_PORT, Wbuf, i , Rbuf);
  data = Rbuf[0]+(Rbuf[1]<<8);
  return (data);
  }

task main()
  {
  SetSensorLowspeed(I2C_PORT);

  ClearScreen();
  NumOut(40,LCD_LINE6,getData());
  Wait( 2000 );
  }

 

Arduino側

#include  < Wire.h >
#define I2C_SLAVE_ADDRESS 0x31
byte requestRegister, requestCommand;

void requestEvent()
  {
  byte d[2];
  int j=-256;
 
  if (requestRegister == 0x20)
     {
     d[0]=j & 0xff;
     d[1]=j >> 8;
     Wire.write(d,2);
     }
  }

void receiveEvent(int howMany)
  {     
  requestRegister = Wire.read();
  }

void setup()
  { 
  Wire.begin(I2C_SLAVE_ADDRESS);
  Wire.onReceive(receiveEvent);   
  Wire.onRequest(requestEvent);                
  }

void loop() { }

 

これで、NXTとArduinoの双方の通信ができるようになりました。

上の例では、単純に-256という数値をArduinoがNXTに返します。

この部分を、Arduinoに接続したセンサーの値を返すようにすれば、沢山のセンサーを接続することができます。

 

ところで・・・

上の例では、NXT側は Arduino側から 2byte のデータを受け取ります。

NXT側ではあらかじめ

I2CBytes関数の第3パラメータに2を指定して2byteをうけとります。

勿論 Arduino側でも、2byteを送出します。

だから問題は無いのですが・・・

例えば、I2CBytes関数の第3パラメータで何byteを受け取るかは、Arduino側には渡るのでしょうか? 普通のI2Cセンサーの場合は、読み出すレジスタ番号と何byte読み出すかを指定すれば、連続で読みだすことができます。 これと同じことがArduinoではできるのでしょうか? それともできないのでしょうか?

例えば、NXT側は2byteを受け取る、Arduino側は4byteを送出する・・・このようにして通信してみても、特に問題は無いようです。

じゃあ、今度は、NXT側は4byteを受け取る、Arduino側は2byteを送出します。

そうすると、特にエラーや処理待ちにはならずに、2byteが正しく送られて、残りの2byteは0xFFが返されます。

そうすると、Arduino側からは多めにデータを送出しておけば良いってことなのかなぁ。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rescue Line 2015 3.5 Scoring 続き

2015-02-25 | Rescue Rules 2015

得点の続きです

 

3.5.9 A robot is considered to have successfully negotiated an obstacle when it moved through the tile where an obstacle was placed.

3.5.10 Points available for successfully completing a tile that has speed bumps. 5 points per speed bump tile.

3.5.11 Points available for successfully negotiating an intersection tile. 15 points per direction through intersection tile. Successfully means that the robot followed the suggested path. See 1.5.2.

3.5.12 Each gap, obstacle, speed bump and intersection tile can only be scored once per direction through the course, not each attempt through the course.

3.5.13 Successful victim rescue: Robots are awarded points for successfully rescuing victims. A successful victim rescue occurs when the victim is moved to the evacuation point (it needs to be completely inside of the evacuation point, and no part of the robot be in contact with the victim).  40 points per a successful victim rescue. 

3.5.14 Ties in scoring will be resolved on the basis of the time taken by each robot (or team of robots) to complete the course (this includes calibration time).

3.5.15 Check RoboCupJunior Rescue official website for a score sheet template.

3.5.9 障害物をタイルの外に動かしてしまったとしても、ロボットが障害物を回避できたことになります。

3.5.10 タイルに設置されたスピードバンプに惑わされずに、その先の黒線に進めれば(スピードバンプが設置されたタイルにつき)5点の得点になります。

3.5.11 タイルに設置された交差点に惑わされずに、ロボットが正しい方向に進めれば(交差点が設置されたタイルにつき)15点の得点になります。(正しい方向とは、ロボットが1.5.2で規定された経路に進むこと)

3.5.12 それぞれの黒線の切れ目、障害物、スピードバンプ、交差点は、それぞれの方向について1回だけ得点になります。

3.5.13 被災者の救出:ロボットが被災者を救助場所にいれることができれば救出成功として得点になります。(被災者を完全に避難場所に入れて、ロボットが被災者に触れていない状態)被災者の救助が成功すると1人につき40点の得点になります。

3.5.14 同点の場合は、競技を完了するまでに掛かった時間で順位を決めます。(時間は調整時間を含みます)

3.5.15 スコアシートのサンプルがロボカップジュニアのWEBサイトに掲載されます。

 

まあ、こんな感じでしょうかねぇ。

 

得点の後半です。
3.5.9は、障害物の回避は、障害物を動かさないでその周りを半周して先の黒線に戻るのが普通でしたが、最近は障害物を押しのけて先の黒線に進んでも「障害物の回避」として得点になるようです。まあ、ロボットが押してしまった障害物が、その先の経路に悪影響が無ければ良いのですが、どうなるか分からないのでオーソドックスに半周して回避したほうが良いと思いますがねぇ。

障害物は、ブロックやレンガなど大きなものが使われますが、それらを台から落として壊してしまった(割ってしまった)場合は、フィールド破壊になるのでしょうか!?

3.5.10は、スピードバンプの得点です。スピードバンプは(勿論)乗り越えます。(回避した場合は得点になるのでしょうか!?)これは、スピードバンプが設置されたタイル1枚につき5点の得点です。そのタイルに1本のスピードバンプが設置されていようと、5本の設置されていようと、1枚のタイルなら5点です。

3.5.11は、交差点の得点です。正しい方向に進めると15点です。正しい方向は、1.5.2で規定されている方向です。緑のマーカーがあれば、そのマ-カーが設置された方向に曲がります。緑のマーカーが設置されていなければ真っ直ぐに進みます。

3.5.12は、それぞれの得点イベントは片方向に付き1回だけ得点になります。という、こまでと同様の説明ですが・・・何度も書きますが、来た経路を戻るようなコースは作れないと思うのですが・・・ねぇ。

3.5.13は、被災者の救出です。被災者(ボール)を避難場所(三角形の枠)の中に完全に入れて、しかもロボットが触れていない状態になれば得点になります。得点は1人の救助につき40点です。これまでは、被災者は1人限定でしたが、今回からは複数の被災者がいますので、全員を救助するまで競技は続けられます。また、これまでは、被災者の救助の得点は、救助部屋での競技進行停止の数によって違っていたのですが、今回は40点固定のようです。

ところで、この被災者救助の得点は、どの時点で入るのでしょうか!? 一旦救助場所の枠の中に入った被災者(ボール)が、他の被災者の救助作業などで出てしまった場合は得点はノーカウントになるのでしょうか!? そこらへんが不明です。さすがにセカンダリは、高さ6cmの枠なので入ったボールが出てしまうことは無いと思いますが、プライマリは出てしまってもおかしくありません。審判の立場で考えると、競技の終了時に枠に入っていた被災者の数としてもらえるとありがたいのです。(どれが得点済の被災者であるか管理ができない)

さらに・・・今回のこの被災者ですが・・・最近流行のファンの風でボールを一気に避難場所に入れる、ということができてしまうと思うのですが・・・

さらに、サッカーロボットのキッカーのように、撃ち出したりすることも可能ですよね。

これまでの缶のように正立させる必要もないので、何らかの方法で押し込めば良いことになります。なんだか、これまで以上に被災者に「優しくない」ロボットになるような気がします。(笑)

3.5.14は、同点の場合の順位の付け方ですが、変更はありません。まあ「Give up した場合の時間は8分にする」とは、相変わらずどこにも書いていませんね。

3.5.15は、スコアシートのサンプルを提供しています・・・ということです。

 

補足

被災者の得点は、被災者を避難場所に入れた時点で得点となります。ですので、1回入れば40点、その後にでてしまっても40点の得点は変わりません。勿論、同じ出てしまった被災者をもう一度入れても得点の追加にはなりません。 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする