沼津高専 電子制御工学科 |
||||||
|
||||||
改訂記録 |
||||||
版数 |
作成日 |
作成者 |
承認 |
改訂内容 |
||
A01 |
2005.10.24 |
平澤、岩本 |
蛭ヶ谷 |
初版 |
||
A02 |
2005.11.30 |
平澤,岩本 |
蛭ヶ谷 |
フローチャート、使用する関数項目を改正 |
||
A03 |
2006.1.24 |
平澤,岩本 |
蛭ヶ谷 |
ソフトの仕様変更をアップ。カメラによるポスト判別を断念 |
目次
1. はじめに
2. 動作モード
本ドキュメントは、MIRS0503基本設計書に規定されたシステムの動作規定、状態遷移を実現する各タスクの開発に必要な事項を述べる。
A) 初期動作モードT
初期位置から白線まで後退し、90°右旋回する。
B) コース探索モードT
前後に移動し左側の超音波センサでポストのないRootを探索する。Rootが決まったら、90°左旋回し、発見したRootをMIRSの進行方向とする
C) ポスト探索モードT
直進しつつ、右の超音波センサでポストの探索を行う。白線まで到達したら停止しポスト探索モードUへ
D) ポスト探索モードU
後進し、左の超音波センサでポストの探索を行う。白線まで到達したら停止しポスト探索モードVへ
E) ポスト探索モードV
1回目はC,Dで取得したポストの位置の近い順にコース上のポストの垂直の位置に停止ポスト接近モードTへ。2回目は、ポスト番号順に同様の動作を行う。
F) ポスト接近モードT
反応があった超音波センサの方向に90°旋回、前方の超音波センサでポストへ接近。ポスト周回モードへ
G) ポスト判別モード
赤外線信号により、ポスト番号を判別。
H) ポスト周回モード
90°右旋回しポストを周回する。赤外線を出している位置を確認したら、90°左旋回スイッチへ直進し前方のタッチセンサが反応した周回運動し開始位置まで移動、コース復帰モードへ。ポストをすべて獲得したならば、終了。
I) コース復帰モード
ポストを獲得したあと、コースへ復帰する。コースへ復帰したら進行方向へ90°旋回。ポスト探索モードVへ
A〜Iまでの動作モードに対応したフローチャート
A) first_mode
書式・・・void first_mode1(void)
B) corse_search1
書式・・・void corse_search1(void)
C)post_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)
− |
初期動作 |
初期動作 |
コース探索 |
ポスト探索 |
ポスト探索 |
ポスト接近 |
ポスト接近 |
ポスト判別 |
ポスト周回 |
白線確認 モード |
初期動作 |
− |
競技1回目 |
競技2回目 |
|
|
|
|
|
|
|
初期動作 |
|
− |
白線に対して平行な場合 |
|
|
|
|
|
|
|
コース探索 |
|
|
− |
右方にポストがない場合 |
|
|
競技2回目 |
|
|
白線感知 |
ポスト探索 |
|
|
|
− |
ポストが発見できない場合 |
左右にポストがある場合 |
|
|
|
白線感知 |
ポスト探索 |
|
|
|
白線感知 |
− |
左右にポストがある場合 |
|
|
|
白線感知 |
ポスト接近 |
|
|
|
超音波センサに反応がない場合 |
|
− |
90度旋回した場合 |
10cm程度の距離である 場合 |
|
白線感知 |
ポスト接近 |
|
|
|
超音波センサに反応がない場合 |
|
|
− |
10cm程度まで近づいた場合 |
|
白線感知 |
ポスト判別 |
|
|
|
|
|
ポスト番号を確認できない場合 |
|
− |
ポスト番号を確認した場合 |
|
ポスト周回 |
|
|
|
ポスト獲得 |
|
|
|
ポストが獲得できない場合 |
− |
白線感知 |
白線確認 モード |
|
白線感知 |
|
|
|
|
|
|
|
− |
カメラモジュールについて
1. カメラモジュールから画像データを取り込む
2. ローパスフィルタ(LPF)でアナログ信号を平滑化
3. AD変換器でデジタル信号に変換
4. 8ビットD-ffに信号を通す(D-ffに一時保存)
5. クロックの到達と共にFPGAに8ビットデータを送信
6. あらかじめポスト番号と2進数を対応させたものを用意しておき、それらと比べることによってポスト番号の識別を行う。
デバイスドライバ
使用デバイスファイル名:adc1
readモードの時にPICでAD変換した8bitの信号を、lcdを用いないために空いているピンから取り込むデバイスドライバを作成する。
使用するモード:ポスト判別モード
使用するI/Oアドレス:0102H
メジャー番号:64
マイナー番号:0
その他の
l 白線センサデバイスドライバ
l 赤外線センサデバイスドライバ
l タッチセンサデバイスドライバ
l 超音波センサデバイスドライバ
l PWM・ロータリーエンコーダ RTタスクモジュール
についてはMIRS標準機のものを利用する。
標準機から使用する関数
関数名 |
書式 |
戻り値 |
説明 |
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) |
なし |
ポスト周回 |