MIRS0802 行動判断モード作成仕様書

MIRS0802 行動判断モード作成仕様書
MIRS0802-SOFT-0004

改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2008.10.31 敦 敦 初版
A02 2008.11.21 敦 敦 分析方法の詳細図を追加
A03 2008.12.5 敦 敦 分析方法の詳細を記述
内部、外部リンクの追加

### 目次

### 1. 本ドキュメントについて
2. モード概要
3. モードの要求仕様
4. プログラムの動作・フローチャート
5. 行動判断の動作詳細

5.1. データ取り込み
5.2. エリア判別
5.3. エラー修正
5.4. 経路設計
6. 処理結果
7. このモード外で必要な前提条件

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

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

### 2. モード概要

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

### 3. モードの要求仕様

１回目のポスト確認動作で得たポスト情報を分析し、最適なポスト探索経路を設計する。
もし、不明なポストがある場合は、明らかになっているポスト情報からおおよその位置を予測する。

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

競技１回目のポスト情報ファイル（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. データ取り込み

競技１回目に得たポスト情報を読み込む。
ポスト情報はポスト番号、x座標、y座標、ポストの獲得方向の順番で並んでおり、
確認したポストの個数分データ行がある。
以下にソート例を示す。
※ポストの獲得方向についてはポスト判別動作（MIRS0802-SOFT-0002）を参照

番号 x y 獲得方向
1 -600 500 4
4 1000 2335 2
2 851 345 1
3 -1254 2851 3

ポスト番号でソート

→

番号 x y 獲得方向
1 -600 500 4
2 851 345 1
3 -1254 2851 3
4 1000 2335 2

### 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. このモード外で必要な前提条件

競技１回目のポスト情報ファイル（data.txt）

関連文書

MIRS0802 ソフトウェア詳細設計書（MIRS0802-SOFT-0001）