MIRS0802 モード補助関数作成仕様書
MIRS0802-SOFT-0008
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2009.2.13 初版

目次

1. 本ドキュメントについて
2. 座標系関数
3. ポスト検出関数

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

    このドキュメントは、各主要関数の動作を補助するために作成した関数について詳細を記述するものである。

2. 座標系関数

    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)の反映のさせ方を変え、直交座標を生成する。

        生成パターンは以下のように設定した。
      • corn=0の場合
      • 白線番号xy
        0enc0
        11600enc
        21600-enc3200
        3-16003200-enc
      • corn=1の場合
      • 白線番号xy
        016000
        116003200
        2-16003200
        3-16000
        尚、coordinaterではポスト検出時、角検出時に座標の更新を行う。

    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で生成する座標だけでは情報不足となるので、ポスト検出時に取得する測定距離を座標に反映させ、ポスト情報生成の材料とする。

        以下に白線番号と反映方法の対応を示す('が付いているのは反映後の座標)
        白線番号x'y'
        0xy+uss_dis
        1x-uss_disy
        2xy-uss_dis
        3x+uss_disy
        coordinater2ではポスト判別前に座標の更新を行う。

    2.3. 座標生成関数B

      2.3.1. 関数概要

        関数名座標生成関数B
        書式int coordinater3(int line)
        引数ライン番号(line)s
        戻り値なし

      2.3.2. 関数詳細

        ポスト判別、獲得の完了後、ライン復帰をした際に座標値の修正を行うために使用する。 以下に白線番号と反映方法の対応を示す('が付いているのは反映後の座標)
        白線番号x'y'
        0x0
        11600y
        2x3200
        3-1600y
        coordinater3では白線復帰後に座標の更新を行う。

    2.4. 距離算出関数

      2.4.1. 関数概要

        関数名距離算出関数
        書式int coordi_dis(int dzone, int turning)
        引数詳細エリア番号(dzone)、周回方向
        戻り値なし

      2.4.2. 関数詳細

        距離トレースで任意エリア(8分割)から離脱する際、直交座標から距離トレースの終了値を決定する。 終了値は外部変数targetに代入する。
        以下に詳細エリア番号と反映方法の対応を示す(l、rは周回方向)
        詳細エリア番号target
        lr
        071600-abs(x)
        161600-y
        253200-y
        34abs(x)
        431600-abs(x)
        52y-1600
        61y
        70abs(x)

3. ポスト検出関数

    3.1. 距離算出関数

      3.1.1. 関数概要

        関数名検出セレクタ
        書式int select_detect(int act)
        引数モード(act)
        戻り値なし

      3.1.2. 関数詳細

        ポスト探索モードのモード選択値を受け取り、トレース時の検出方法を切り替える。

        以下にモード値actと検出切り替えの対応を示す。
        (検出手法は後述)。
        act検出法
        1break_detect()
        2dis_detect()
        9無検出
        othernormal_detect()

    3.2. ポスト検出関数

      3.2.1. 関数概要

        関数名ポスト検出関数
        書式int normal_detect(void)
        引数なし
        戻り値検出時:1、それ以外:0

      3.2.2. 関数詳細

        検出方法として、次の2手法を使用する。
      • 差による検出(different detect)
      • 図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を返す。
関連文書