目次
1. 本ドキュメントについて2. 座標系関数
3. ポスト検出関数
1. 本ドキュメントについて
-
このドキュメントは、各主要関数の動作を補助するために作成した関数について詳細を記述するものである。
2. 座標系関数
- corn=0の場合
- corn=1の場合
2.1. 座標生成関数@
2.1.1. 関数概要
関数名 | 座標生成関数@ |
---|---|
書式 | int coordinater(double d_enc, int line, int corn) |
引数 | 現時点でのencの値(d_enc)、ライン番号(line)、角検出の有無(corn) |
戻り値 | なし |
2.1.2. 関数詳細
図1. 座標生成例(coordi1.bmp)
MIRS0802では、ロータリーエンコーダの値を基に、ポスト獲得時に中心座標を記録するが、単純にエンコーダの値を取るだけでは直進距離しか測定できない。
この問題を解消するため、上図のように白線番号ごとにエンコーダの値(enc)の反映のさせ方を変え、直交座標を生成する。
生成パターンは以下のように設定した。
尚、coordinaterではポスト検出時、角検出時に座標の更新を行う。
この問題を解消するため、上図のように白線番号ごとにエンコーダの値(enc)の反映のさせ方を変え、直交座標を生成する。
生成パターンは以下のように設定した。
白線番号 | x | y |
---|---|---|
0 | enc | 0 |
1 | 1600 | enc |
2 | 1600-enc | 3200 |
3 | -1600 | 3200-enc |
白線番号 | x | y |
---|---|---|
0 | 1600 | 0 |
1 | 1600 | 3200 |
2 | -1600 | 3200 |
3 | -1600 | 0 |
2.2. 座標生成関数A
2.2.1. 関数概要
関数名 | 座標生成関数A |
---|---|
書式 | int coordinater2(double uss_dis, int line) |
引数 | 検出時の超音波センサ測定距離(uss_dis)、ライン番号(line) |
戻り値 | なし |
2.2.2. 関数詳細
図2. ポスト距離の取得例(uss_dis.bmp)
ポスト判別時、coordinaterで生成する座標だけでは情報不足となるので、ポスト検出時に取得する測定距離を座標に反映させ、ポスト情報生成の材料とする。
以下に白線番号と反映方法の対応を示す('が付いているのは反映後の座標)
coordinater2ではポスト判別前に座標の更新を行う。
以下に白線番号と反映方法の対応を示す('が付いているのは反映後の座標)
白線番号 | x' | y' |
---|---|---|
0 | x | y+uss_dis |
1 | x-uss_dis | y |
2 | x | y-uss_dis |
3 | x+uss_dis | y |
2.3. 座標生成関数B
2.3.1. 関数概要
関数名 | 座標生成関数B |
---|---|
書式 | int coordinater3(int line) |
引数 | ライン番号(line)s |
戻り値 | なし |
2.3.2. 関数詳細
ポスト判別、獲得の完了後、ライン復帰をした際に座標値の修正を行うために使用する。
以下に白線番号と反映方法の対応を示す('が付いているのは反映後の座標)
coordinater3では白線復帰後に座標の更新を行う。
白線番号 | x' | y' |
---|---|---|
0 | x | 0 |
1 | 1600 | y |
2 | x | 3200 |
3 | -1600 | y |
2.4. 距離算出関数
2.4.1. 関数概要
関数名 | 距離算出関数 |
---|---|
書式 | int coordi_dis(int dzone, int turning) |
引数 | 詳細エリア番号(dzone)、周回方向 |
戻り値 | なし |
2.4.2. 関数詳細
距離トレースで任意エリア(8分割)から離脱する際、直交座標から距離トレースの終了値を決定する。
終了値は外部変数targetに代入する。
以下に詳細エリア番号と反映方法の対応を示す(l、rは周回方向)
以下に詳細エリア番号と反映方法の対応を示す(l、rは周回方向)
詳細エリア番号 | target | |
---|---|---|
l | r | |
0 | 7 | 1600-abs(x) |
1 | 6 | 1600-y |
2 | 5 | 3200-y |
3 | 4 | abs(x) |
4 | 3 | 1600-abs(x) |
5 | 2 | y-1600 |
6 | 1 | y |
7 | 0 | abs(x) |
3. ポスト検出関数
- 差による検出(different detect)
- 曲線による検出
3.1. 距離算出関数
3.1.1. 関数概要
関数名 | 検出セレクタ |
---|---|
書式 | int select_detect(int act) |
引数 | モード(act) |
戻り値 | なし |
3.1.2. 関数詳細
ポスト探索モードのモード選択値を受け取り、トレース時の検出方法を切り替える。
以下にモード値actと検出切り替えの対応を示す。
(検出手法は後述)。
以下にモード値actと検出切り替えの対応を示す。
(検出手法は後述)。
act | 検出法 |
---|---|
1 | break_detect() |
2 | dis_detect() |
9 | 無検出 |
other | normal_detect() |
3.2. ポスト検出関数
3.2.1. 関数概要
関数名 | ポスト検出関数 |
---|---|
書式 | int normal_detect(void) |
引数 | なし |
戻り値 | 検出時:1、それ以外:0 |
3.2.2. 関数詳細
検出方法として、次の2手法を使用する。
図3. 差による検出(dif_det.bmp)
初期のポスト距離値とその後の測定距離を比較し、その差が一定値(DIF)以上となったとき検出とする。
図4. 曲線による検出(cur_det.bmp)
測定値の増減をチェックし、減り続けていた値が増加に転じ始めたところで検出したと判断する。
2つの検出方法を同時に動作させ、検出の有無の論理和をとり、どちらかが検出と判断したとき、戻り値1を返す。
尚、どちらの検出方法でも、超音波の取得値にフィルタをかけ、エラー値と一定範囲外の値については処理を行わない。
尚、どちらの検出方法でも、超音波の取得値にフィルタをかけ、エラー値と一定範囲外の値については処理を行わない。
3.3. 離脱検出関数
3.3.1. 関数概要
関数名 | 離脱検出関数 |
---|---|
書式 | int break_detect(void) |
引数 | なし |
戻り値 | 検出時:1、それ以外:0 |
3.3.2. 関数詳細
図4. 離脱検出(bre_det.bmp)
通常検出とは逆に、USSがエラー値を拾ったときに検出と判断し、戻り値1を返す。
一定範囲外の値についても検出と考える。
一定範囲外の値についても検出と考える。
3.4. 走行距離検出関数
3.4.1. 関数概要
関数名 | 走行距離検出関数 |
---|---|
書式 | int dis_detect(double run_dis) |
引数 | 走行目標値(run_dis) |
戻り値 | 検出時:1、それ以外:0 |
3.4.2. 関数詳細
引数として与えられた目標距離(run_dis)とエンコーダで測定している距離(enc)の大きさを比較する。
encの大きさがrun_dis以上の値となったとき、検出と判断し、戻り値1を返す。
encの大きさがrun_dis以上の値となったとき、検出と判断し、戻り値1を返す。