MIRS0802 行動判断モード作成仕様書
MIRS0802-SOFT-0004
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2008.10.31 初版
A02 2008.11.21 分析方法の詳細図を追加
A03 2008.12.5 分析方法の詳細を記述
内部、外部リンクの追加

目次

1. 本ドキュメントについて
2. モード概要
3. モードの要求仕様
4. プログラムの動作・フローチャート
5. 行動判断の動作詳細
6. 処理結果
7. このモード外で必要な前提条件

1. 本ドキュメントについて

    このドキュメントは、MIRS0802で使用する行動判断モード"act_decide"について詳細を記述するものである。

2. モード概要

    関数名行動判断モード
    書式int act_decide(void)
    引数なし
    戻り値なし
    備考探索用のポスト情報を外部変数に与える

3. モードの要求仕様

    1回目のポスト確認動作で得たポスト情報を分析し、最適なポスト探索経路を設計する。

    もし、不明なポストがある場合は、明らかになっているポスト情報からおおよその位置を予測する。

4. プログラムの動作・フローチャート

  • 競技1回目のポスト情報ファイル(data.txt)を展開する。
    このとき展開できなければ経路設計は不可能とする。
  • data.txtの内容を読み込む(get_data)
    さらにデータをポスト番号順に並び替える。
  • 競技場をA,B,C,Dの4つのエリアに分割して考える。(analyzer)
    ポストの座標データからエリアの割り当てを行なう。
  • 不明なポストがある場合、
    発見されなかったポスト番号、割り当てられなかったエリアを確認、
    それらを組み合わせて予測データとする。(err_safe)
  • 割り当てられたエリアから、ポスト間の最短移動距離、方向を割り出し、
    探索経路とする。(route_dsgn)

  • 図2. act_decide()(act_decide.bmp)

5. 行動判断の動作詳細

    5.1. データ取り込み

      競技1回目に得たポスト情報を読み込む。
      ポスト情報はポスト番号、x座標、y座標、ポストの獲得方向の順番で並んでおり、
      確認したポストの個数分データ行がある。
      以下にソート例を示す。

      ※ポストの獲得方向についてはポスト判別動作(MIRS0802-SOFT-0002)を参照
      番号xy獲得方向
      1-6005004
      4100023352
      28513451
      3-125428513
      ポスト番号でソート
      番号xy獲得方向
      1-6005004
      28513451
      3-125428513
      4100023352

    5.2. エリア判別

      下図のように競技場内を分割して考え、
      ポスト情報のx,y座標値を使って各ポストがどのエリア属すかを判別、
      A〜Dのキャラクタを与える。

      図3. エリア判別(analyzer.bmp)

    5.3. エラー修正

      データ読み込み時に確認できなかったポストがあった場合、
      確認できているポストの情報から未確認ポストがどのエリアにあるかを予測し、A〜Dのキャラクタを与える。
      ただし、ランダム判定を使うため、未確認個数が多いほど特定精度は下がる。

      図4. エラー修正(err_safe.bmp)

    5.4. 経路設計

      競技場の白線を「枝」、角を「節」として捉えるものとする。

      設計は、現在のポストから次のポストまでいくつの枝をを通るのか、 また、どちら回りで探索に行くのかを決める。
      最終的には、
      移動枝数を整数型で、
      周回方向を l(左回り)、r(右回り)、x(どちらでも可)のいずれかのキャラクタ型
      の外部変数で与える。

      (例)
      初期位置からエリアB
      移動枝数:2、 周回方向:l(左回り)

      エリアBからエリアC
      移動枝数:2、 周回方向:x(どちらでも可)

      図5. 経路設計(初期)(route_dsgn1.bmp)

      図6. 経路設計(route_dsgn2.bmp)

6. 処理結果

  • 結果として、以下の外部変数をポスト情報・探索経路情報として生成する。
    尚、構造体の定義はヘッダファイル corporated.h 内に記述する。
  • ポスト情報(構造体:pdata)
    • ポスト位置( x[], y[] )
    • ポスト番号( num[] )
    • 分布エリア( zone[] )
    • 獲得時方向( direct[] )
    探索経路情報(構造体:route)
    • 周回方向( turn[] :l - 左回り、r - 右回り)
    • 移動枝数( dis[] )
    読み取り処理エラー(行列:d_err)
  • 処理例
  • ポスト情報構造体( pdata )
    pdata.x[]={-600, 851, -1254, 1000}
    pdata.y[]={500, 345, 2851, 2335}
    pdata.num[]={1, 2, 3, 4}
    pdata.zone[]={C, D, A, B}
    pdata.direct[]={4, 1, 3, 2}
    ポスト探索構造体( route )
    route.turn[]={l, l, x, r}
    route.dis[]={1, 1, 2, 1}
    読み取りエラー( d_err )
    d_err[]={0, 0, 0, 0}

7. このモード外で必要な前提条件

  • 競技1回目のポスト情報ファイル(data.txt)
関連文書