沼津高専 電子制御工学科

MIRS0503詳細設計書

SOFTWARE

MIRS0503-SOFT-0001

改訂記録

版数

作成日

作成者

承認

改訂内容

A01

2005.10.24

平澤、岩本

蛭ヶ谷

初版

A02

2005.11.30

平澤,岩本

蛭ヶ谷

フローチャート、使用する関数項目を改正

A03

2006.1.24

平澤,岩本

蛭ヶ谷

ソフトの仕様変更をアップ。カメラによるポスト判別を断念

 

目次

1.        はじめに

2.        動作モード

3.        モードのフローチャート

4.        モード遷移表

5.        モジュール、デバイスドライバについて

6.        使用する関数

 

 

1,はじめに

 

本ドキュメントは、MIRS0503基本設計書に規定されたシステムの動作規定、状態遷移を実現する各タスクの開発に必要な事項を述べる。

 

2,動作モード

 

A)       初期動作モードT

初期位置から白線まで後退し、90°右旋回する。

B)       コース探索モードT

前後に移動し左側の超音波センサでポストのないRootを探索する。Rootが決まったら、90°左旋回し、発見したRootMIRSの進行方向とする

C)       ポスト探索モードT

直進しつつ、右の超音波センサでポストの探索を行う。白線まで到達したら停止しポスト探索モードUへ

D)      ポスト探索モードU

後進し、左の超音波センサでポストの探索を行う。白線まで到達したら停止しポスト探索モードVへ

E)       ポスト探索モードV

1回目はC,Dで取得したポストの位置の近い順にコース上のポストの垂直の位置に停止ポスト接近モードTへ。2回目は、ポスト番号順に同様の動作を行う。

F)       ポスト接近モードT

反応があった超音波センサの方向に90°旋回、前方の超音波センサでポストへ接近。ポスト周回モードへ

G)      ポスト判別モード

赤外線信号により、ポスト番号を判別。

H)      ポスト周回モード

90°右旋回しポストを周回する。赤外線を出している位置を確認したら、90°左旋回スイッチへ直進し前方のタッチセンサが反応した周回運動し開始位置まで移動、コース復帰モードへ。ポストをすべて獲得したならば、終了。

I)         コース復帰モード

ポストを獲得したあと、コースへ復帰する。コースへ復帰したら進行方向へ90°旋回。ポスト探索モードVへ

 

3,モードのフローチャート

 

              AIまでの動作モードに対応したフローチャート

A)       first_mode

              書式・・・void first_mode1(void)

 

B) corse_search1

書式・・・void corse_search1(void)

Cpost_search1

書式・・・int post_search2(double*)

D) post_search2

書式・・・int post_search1(double*)

E) post_search3

書式・・・double post_approach1(void)

F) post_approach1

書式・・・int post_approach2(void)

G) post_check

 

書式・・・int post_check(void)

H) post_shukai

書式・・・int post_shukai(void)

 

I) course_return

 

全体を通したフローチャート

        

書式・・・int main1(void)                                                                      int main2(void)

 

4,モード遷移表

 

初期動作
モードT

初期動作
モードU

コース探索
モードT

ポスト探索
モードT

ポスト探索
モードU

ポスト接近
モードT

ポスト接近
モードU

ポスト判別
モード

ポスト周回
モード

白線確認

モード

初期動作
モードT

競技1回目

競技2回目

 

 

 

 

 

 

 

初期動作
モードU

 

白線に対して平行な場合

 

 

 

 

 

 

 

コース探索
モードT

 

 

右方にポストがない場合

 

 

競技2回目

 

 

白線感知

ポスト探索
モードT

 

 

 

ポストが発見できない場合

左右にポストがある場合

 

 

 

白線感知

ポスト探索
モードU

 

 

 

白線感知

左右にポストがある場合

 

 

 

白線感知

ポスト接近
モードT

 

 

 

超音波センサに反応がない場合

 

90度旋回した場合

10cm程度の距離である

場合

 

白線感知

ポスト接近
モードU

 

 

 

超音波センサに反応がない場合

 

 

10cm程度まで近づいた場合

 

白線感知

ポスト判別
モード

 

 

 

 

 

ポスト番号を確認できない場合

 

ポスト番号を確認した場合

 

ポスト周回
モード

 

 

 

ポスト獲得

 

 

 

ポストが獲得できない場合

白線感知

白線確認

モード

 

白線感知

 

 

 

 

 

 

 

 

 

5,モジュール

 

カメラモジュールについて

1.      カメラモジュールから画像データを取り込む

2.      ローパスフィルタ(LPF)でアナログ信号を平滑化

3.      AD変換器でデジタル信号に変換

4.      8ビットD-ffに信号を通す(D-ffに一時保存)

5.      クロックの到達と共にFPGA8ビットデータを送信

6.      あらかじめポスト番号と2進数を対応させたものを用意しておき、それらと比べることによってポスト番号の識別を行う。

 

デバイスドライバ

              使用デバイスファイル名:adc1

readモードの時にPICAD変換した8bitの信号を、lcdを用いないために空いているピンから取り込むデバイスドライバを作成する。

              使用するモード:ポスト判別モード

              使用するI/Oアドレス:0102H

              メジャー番号:64

              マイナー番号:0

             

             

              その他の

l         白線センサデバイスドライバ

l         赤外線センサデバイスドライバ

l         タッチセンサデバイスドライバ

l         超音波センサデバイスドライバ

l         PWM・ロータリーエンコーダ RTタスクモジュール

についてはMIRS標準機のものを利用する。

             

             

6,使用する関数

 

           標準機から使用する関数

 

関数名

書式

戻り値

説明

main

int main(void);

0

メイン

initialize

int initialize(void);

0

初期化

rm_data

void rm_data(int *, int *, int *);

0

同一ポストデータ消去

circle_position

void circle_postion(void);

0

周回半径への移動

post_approach

int post_approach(int);

0 または 9999

ポスト接近

post_select

int post_select(int);

-1 or 次のポスト番号

次ポスト選択

correct_direction1

int correct_direction1(void);

0

ポスト接近前の角度補正

correct_direction2

int correct_direction2(void);

0

ポスト補正後の角度補正

irs_code_get

int irs_code_get(int);

赤外線コード or 0

赤外線のコード判別

uss_get

int uss_get(int);

測定データ

超音波による距離測定

 

関数名

書式

戻り値

説明

pwm_enco_start

void pwm_enco_start(int);

なし

RTタスクスレッドを開始

pwm_enco_stop

void pwm_enco_stop(void);

なし

RTタスクスレッドを停止

pwm_enco_restart

void pwm_enco_restart(void);

なし

RTタスクスレッドを再開

encoder_data

void encoder_data(float *lm, float *rm, float *lv, float *rv, int *br);

なし

100[ms]ごとの左右のタイヤの回転距離,速度を返す

encoder_data2

void encoder_data2(float *la, float *ra, int *br);

なし

100[ms]ごとの左右のタイヤの回転角度を返す

encoder_data3

void encoder_data3(float *la, float *ra, int *br);

なし

左右のタイヤの回転角度の合計を返す

 

 

              新しく用いる関数

 

関数名

書式

戻り値

説明

Course_return

int course_return(void);

なし

ポスト周回後コース復帰

main1

int main1(void)

0

メイン関数(1周目)

main2

int main2(void)

0

メイン関数(2周目)

first_mode1

void first_mode1(void)

なし

MIRSの起動および初期動作

course_search

void course_search(void)

なし

移動コース探索

post_search1

int post_search2(double*)

0 or 1

MIRS右側のポスト探索(前進)

post_search2

int post_search1(double*)

0 or 1

MIRS左側のポスト探索(後進)

Move_post_position

Int move_post_position(void)

0

コース上のポストに垂直な位置に移動

post_approach

float post_approach1(void)

Yの値

ポストに一定距離接近およびy軸座標記憶

post_get

int post_shukai(void)

なし

ポスト周回