MIRS0802 行動判断モード作成仕様書
MIRS0802-SOFT-0004
改訂記録
版数 作成日 作成者 承認 改訂内容
B01 2009.2.6 敦 敦 初版(Ver.Aの記述は残したまま)
B02 2009.2.8 敦 敦 全体記述を修正

目次

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

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

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

2. モード概要

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

3. モードの要求仕様

    1回目のポスト確認動作で得たポスト情報(番号、座標、接近方法)から分析を行い、最適なポスト探索経路を設計する。

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

    また、仮想マップを描画し、判断材料の一つとする。

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

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

  • 図2. act_decide2()(act_decide2.bmp)

5. 行動判断の動作詳細

    5.1. データ取り込み

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

      ※ポストの獲得方向についてはポスト判別動作(MIRS0802-SOFT-0002)を参照
      番号xy獲得方向
      4-700.982000.124
      21000.762335.233
      3851.99445.431
      5-651.99645.431
      ポスト番号でソート
      →
      番号xy獲得方向
      21000.762335.233
      3851.99445.431
      4-700.982000.124
      5-651.99645.431

    5.2. エリア判別

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

      さらに詳細なエリア判別を行い、0〜7の8エリアに分解し、仮想マップを描画する。

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

      図4. 詳細エリア判別(analyzer2.bmp)

      図5. マップ例(map.bmp)

    5.3. エラー修正

      データ読み込み時に確認できなかったポストがあった場合、
      確認できているポストの情報、予測用仮想マップから未確認ポストがどのエリアにあるかを予測し、0〜7の整数エリア番号を与える。

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

      図7. マップ例(ポスト予測)(map2.bmp)

    5.4. 経路設計

      詳細エリアの整数の差をとり、そこから通過エリア数、方向を判断・設計する。
      最終的には、
      移動数を整数型で、
      周回方向を l(左回り)、r(右回り)、x(どちらでも可)のいずれかのキャラクタ型
      の外部変数で与える。

      方向がxの場合、判断後、一つ前の周回方向を継承させる。

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

      エリア0からエリア5
      移動数:3、 周回方向:x(どちらでも可)

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

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

6. 処理結果

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

    図10. 処理例(sample.bmp)

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

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

8. 試験版

  • 試験版使用方法
    • tar xvfz virtual_decide.tar.gz で解凍
    • virtual_decideディレクトリに移動、make でコンパイル
    • virtual_decide.exe を実行。
      sorted.txtに分析結果、map.txtに仮想マップ、map2.txtに予測仮想マップが生成される。
関連文書