沼津高専 電子制御工学科
MIRSMY2K 基本MIRSソフトウェア仕様書
MIRSMY2K-SOFT-0001
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2001.5.14 山本 大庭
初版
A02 2001.5.24 山本 大庭
リンク先の変更

目次

  1. はじめに
  2. 外観図と各センサ類の位置
  3. 構成
  4. 動作説明

1.はじめに
本ドキュメントは基本MIRSを制御するプログラムについて示したものである。

2.外観図と各センサ類の位置
以下に外観図とセンサ配置図を示す。

2-1. 外観図

Fig. 1-1 正面外観図


Fig. 1-2 左側面外観図


Fig. 1-3 右側面外観図

2-2. センサ配置図

Fig. 2 各センサ類の位置

3.構成
 以下に本上位プログラムのモード構成を示す。
番号
モード名
動作概要
1
左トレースモード
 本プログラムのメインモード。その名の通り左壁との距離を一定に保ちながら直進すると共に、センサ信号を調べ、反応があったら各モードへ移る。そのモードの動作が終了次第このモードに戻り、左トレースを続ける。また、センサ信号を定期的に調べるためにスレッドを作成する。
2
ポスト接近モード
 右側の超音波センサがポストを発見するとこのモードに移り、右に90度回転して前方のタッチセンサに反応があるまで直進することでポストまで接近する。ポストに接触したら少し後退し、右に90度回転して左トレースモードに戻る。
3
赤外線獲得モード
 左の赤外線センサに反応があるとこのモードに移り、左に90度回転して前方のタッチセンサに反応があるまで直進することでポストを獲得する。ポスト獲得後、少し後退し、右に90度して左トレースモードへ戻る。
4
ループ検出&脱出モード
 ある一定周期ごとループに陥ってないか検査し、ループになっていたら、5つのパターンからランダムに1つ選んで動作し、ループを脱出する。ループに陥っているかいないかは、ロータリーエンコーダの値が変化しているかいないかで判断する。

4.動作説明
4-1. プログラムの流れ
以下にプログラムの動作流れ図を示す。

Fig.3 動作流れ図

4-2. プログラムの動作説明
4-2-1. 左トレースモード
left_trace.c
 まずFIFO1〜5(各RT-タスクモジュールと本上位プログラムのプロセス間通信用のドライバ)及び各デバイスドライバをOPENし、また超音波測定用、赤外線・タッチセンサデータ格納用、エンコーダデータ読み込み用のスレッドを生成する。このスレッド生成で、周期的に各センサの情報を読み込み、この読み込んだデータを動作決定の判断基準とする。スレッド生成後、10cm後退し左に90度回転する。
 次に、右側の超音波センサがポストを発見した回数、左側の赤外線センサの値、前方の超音波センサの値を調べる。それぞれ、右超音波センサのポスト発見数が5回ならポスト接近モードの呼び出し、左赤外線センサがONなら赤外線獲得モードの呼び出し、前超音波センサの値が20cm以下なら90度右回転という動作を行う。それ以外なら、左壁との距離を約10cm〜15cmになるように補正をかけながら前進する。また一定ごとにループ検出モードを呼び出してエンコーダの値に変化があるかないかを調べる。この段落の動作を繰り返し行う。
 そして、赤外線センサを3回発見(ポスト3つ獲得)したならば、オープンした全てのファイル(FIFOやドライバ)をcloseしてこのプログラムは終了する。

4-2-2. ポスト接近モード
hide_mod.c
 このモードは、左トレースモードで超音波センサが5回ポストを発見した場合に動作する。
 まず始めに、右側に90度回転する。その後、前面の超音波センサでポストまでの距離を測り、その値がエラー値(ポストまでの距離が遠すぎて測れない)の場合は20cm前進する。またそうでなければ、前方超音波センサの値の分だけ前進する。前進後、前方のタッチセンサがONであるか調べ(目標物に接触したか調べるため)、ONでなければ3cm進んでまた前方タッチセンサの状態を調べる。これをポストに接触するまで続ける。そしてタッチセンサがONとなれば、20cm後退して90度右回転し、左トレースモードに戻る。これは、ポストまでの距離を左壁と同様にトレースするためである。

4-2-3. 赤外線獲得モード
irs_get.c
 このモードは、左トレースモードで左側の赤外線センサがONの場合に動作する。
 まず始めに、もう1度左側の赤外線センサがONであるかどうか調べ、ONならば赤外線センサを獲得する(赤外線発光装置の赤外光をOFFにする)ために90度左回転してMIRSの前面がポストに向かうようにする。その後、前方のタッチセンサがONとなるまで3cmずつ前進する。そして赤外線センサ獲得後、20cm後退して90度右回転し、左トレースモードに戻る。
 もし最初に調べる左側の赤外線センサがONでなければ、10cm後退して左トレースモードに戻る。これは、左トレースモードでONとなっているのにこのモードに入ってからOFFになってしまったということは、少し前に進みすぎてしまったということになるので、10cm後退してもう1度赤外線センサを左トレースモードで探すためである。

4-2-4. ループ検出&脱出モード
research.c
loop.c
 ループ検出モードは、左トレースモードで定期的に実行されるモードである。
 まず、左トレースモードのスレッドで読み込んでいるエンコーダデータを調べ、その距離データが0〜1cmであればループカウントを1つアップして左トレースモードに戻る。もしその距離データが1cm以上あればループではないとみなして別のカウントを1つアップして左トレースモードに戻る。これを繰り返し、ループカウントが5になるとこのループ検出モードは、さらにループ脱出モードを呼び出す。
 ループ脱出モードは呼び出されると、まず乱数を発生させる標準関数を使って0〜5までの数字をランダムに1つ作成し、その数字をもとに5つに動作モードから1つの動作を選択し、行動して左トレースモードに戻る。


関連文書