沼津高専 電子制御工学科

MIRS0505詳細設計書

SOFTWARE

MIRS0505-SOFT-0001

改訂記録

版数

作成日

作成者

承認

改訂内容

A01

2005.11.11

佐々木、渡邊

鈴木

初版

A02

2005.11.14

佐々木、渡邊

鈴木

遷移表を改定、プログラムの流れを追加

A03

2005/11/28

渡邊

鈴木

ポストまで移動モードを改正

A04

2006/01/20

渡邊

鈴木

6.カメラ断念によるプログラムの変更の追加

A05

2006/02/01

渡邊

鈴木

上記に追加事項

 

目次

1.        はじめに

2.        概要

3.        動作モード

4.        モード遷移表

5.        使用する関数について

6.        カメラ断念によるプログラムの変更について 

 

 

 

 

 

 

1.はじめに

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

 

2.概要

MIRS0505 ソフトウェアは、RT-Linux上で動作するプログラム群で構成される。プログラムはC言語でかかれ、Linux の標準の API とともに、行動モードに対応したプログラム、一つの機能を複数のプログラム群で提供する機能モジュール、および、RTタスク、ドライバと、補助関数と独自に定義したヘッダファイルから構成される。

 

 

 

 

 

3.動作モードは次の個であり文章の下に詳細な説明とフローチャートをしめす。

 (1)待機モード

 (2)垂直補正モード

(3)コース探索モード

 (4)ポスト探索モード

 (5)カメラモード

(6)ポスト判定モード

(7)ポスト獲得モード

(8)帰路モード

(9)ポスト選択モード

 (10)ポストまで移動モード

 

(1)待機モード

モードの定義 

メインプログラムを立ち上げ、スタートスイッチが押されるまで待機状態を続ける。

スタートスイッチが押されたら『コース探索モード』に移る。


(2)垂直補正モード

  モードの定義  関数int p_revision(int) 戻り値 01

MIRSが白線と垂直になるように補正を行う。

    


(3)コース探索モード

 モードの定義 関数 int c_serch(int) 戻り値 1

その場で左に90°回転し、前後しながら右側の超音波センサでポストがないルートを探す。ルートが決定したら右に90°回転し、その方向をMIRSの進行方向として『ポスト探索モード』に移る。

()


(4)ポスト探索モード

 モードの定義  関数 int p_serch(int) 戻り値 0か1

直進しながら左右の超音波センサでポストの探索を行う。

超音波センサに反応があった場合は、"何番目に発見したポストか?""進行方向の左右どちらにポストがあったか?"を記憶して『ポスト接近モード』に移る。

競技場端まで到達した場合(=白線を感知した場合)は『垂直補正モード』に移る。

 


 

 

5)カメラモード

モードの定義  関数 int camera(int) 戻り値 01

ポスト検索モードでポストを見つけた方向へ90度回転しポストから80cmの距離まで移動、もしポストまでの距離が80cm未満の場合は一端100cmになるところまで後退し、そして80cmの距離まで移動、カメラを起動しポストを判別する。判別できない場合距離を10cmずつ縮めて、撮りなおす。

  

 (6)ポスト判定モード

     モードの定義  関数 int p_judge(int) 戻り値 01

     カメラモードでカメラでのポスト判別が成功したとき、そのポストが何番であるかを記憶し、そのポストが今とるべきポスであるのかを判別する。

    


(7)ポスト獲得モード

     モードの定義  関数int p_get(int)  戻り値01

     ポストへ接近し、その周りを時計回りに周回、赤外線センサが反応した

ら、90度回転し、ポストをとり、周回の開始地点まで戻り80cmバック

する。

   


 (8)帰路モード

   モードの定義  関数int goback(int)  戻り値01

   カメラモードで記憶していた分の距離を後進して90度回転してポスト検索

モードへ移行する。

  


  (9)ポスト選択モード

     モードの定義  関数int p_choice(int)  戻り値 1

     折り返しの時点でポスト1は取れているので、その他のポストのどれを撮りにい

くかを選択するモード

  


  (10)ポストまで移動モード

     モードの定義  関数int p_move(int) 戻り値1

     取りに行くポストの座標にそって移動してそのポストまで移動するモード

 

 5.使用する関数について

   このプログラムでは標準MIRSから以下の関数を用いる。

関数名

書式

戻り値

説明

Main

int main(void);

0

メイン

Initialize

int initialize(void);

0

初期化

post_get

int post_get(int);

0

ポスト周回及び獲得

post_search

int post_search(int);

0

ポスト探索

post_approach

int post_approach(int);

0

ポスト接近

post_select

int post_select(int);

-1 or 次のポスト番号

次ポスト選択

correct_distance

int correct_distance(void);

0

ポスト接近時の距離補正

correct_direction1

int correct_direction1(void);

0

ポスト接近前の角度補正

correct_direction2

int correct_direction2(void);

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);

なし

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

pwm_both_data

void pwm_both_data(int, int);

なし

Duty比指定移動

pwm_straight

void pwm_straight(int, int);

なし

PID制御による移動

pwm_rotate

void pwm_rotate(int);

なし

PID制御によるその場回転

pwm_lqr_straight

void pwm_lqr_straight(int, int);

なし

LQR制御による直進移動

pwm_lqr_rotate

void pwm_lqr_rotate(int, int);

なし

LQR制御によるその場回転

pwm_lqr_circle

void pwm_lqr_circle(int, int, int);

なし

LQR制御によるポスト周回

lqr_straight

int pwm_lqr_straight(int, int);

0

pwm_lqr_straightのマクロ

lqr_rotate

int pwm_lqr_rotate(int, int);

0

pwm_lqr_rotateのマクロ

lqr_circle

int pwm_lqr_circle(int, int, int);

0

pwm_lqr_circleのマクロ

 

関数名

書式

戻り値

説明

irs_ts_ws

void *irs_ts_ws(void *t);

なし

赤外線,タッチセンサ,白線センサ読み取りスレッド

encoder

void *encoder(void *t);

なし

エンコーダデータ読み取りスレッド

uss_read

void *uss_read(void *t);

なし

超音波センサ測定スレッド

 

  6.遷移表

  

遷移前/遷移後

待機

モード

垂直補正

モード

コース探索

モード

ポスト探索

モード

カメラ

モード

ポスト判定

モード

ポスト獲得

モード

帰路

モード

ポスト選択

モード

ポストまで

移動モード

終了

待機モード

スタートスイッチがON

戻り値 1

×

×

×

×

×

×

×

×

×

垂直補正モード

×

ポスト獲得数が1つでない場合

戻り値 0

×

×

×

×

×

ポスト獲得数が1つの場合

戻り値 1

×

×

コース探索

モード

×

×

コース(座標原点)を設定した後

戻り値 1

×

×

×

×

×

×

×

ポスト探索

モード

×

競技場端に到達後

戻り値 1

×

ポストを発見後

戻り値 0

×

×

×

×

×

×

カメラ

モード

×

×

×

×

ポストと判別後

戻り値 1

×

ポストと判別できなかった場合

戻り値 0

×

×

×

ポスト判定

モード

×

×

×

×

×

獲得すべきポストだった場合

戻り値 0

獲得すべきポストでなかった場合

戻り値 1

×

×

×

ポスト獲得

モード

×

×

×

×

×

×

ポストを獲得後

戻り値 1

×

×

全てのポストを獲得後

戻り値 0

帰路モード

×

×

×

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

戻り値 0

×

×

×

全てのポストが発見済みの場合

戻り値 1

×

×

ポスト選択

モード

×

×

×

×

×

×

×

×

獲得すべきポストの座標を読む

戻り値 1

×

ポストまで

移動モード

×

×

×

×

×

×

獲得すべきポストまで移動後

戻り値 1

×

×

×

 

 

  7.プログラムの流れ

 

 

 

 

6.カメラ断念によるプログラムの変更について

120日 … MIRSにカメラを載せることを完全に断念。その対応策としてソフトウェアではカメラモード、ポスト判別モードを破棄し、その代わりにポスト接近モードを作り、それで補うことにする。ポスト接近モードはカメラモードのカメラに関する操作をすべてなくし、ポストまで接近するのみとする。そのほかにもカメラを用いてポストを判別していたのでこの際ポストの番号にこだわらずに順番に関係なく一つずつポストをとりに行くというプログラムに変更し、時間がある限り2週目にはポストを順番に取りにいくというプログラムに変更する.また垂直補正モード、コース検索モードは必要ないという判断に至り(垂直補正は各動作ごとに行い、コース検索モードはポスト探索モードの途中の例外処理によって対応)省略するとことにし、ポストまで移動モードは2週目にポストを順番にとりにいくというプログラムが組める時間がある場合にのみ用いることにした.またプログラムに分岐がなくなってしまったので各モードの関数の戻り値の必要がなくなったためすべて返り値を0のみとすることで対応した.またポスト探索モードで超音波を左右に出してポストを探索と上に書いてあるが超音波センサー4の調子が悪いため左側のみに超音波を出すということになった.

 

2月1日  … 2週目にはポストを順番に取りにいくというプログラムを時間があれば作るということであったが、MIRSのパラメータがしっかりと設定されていないため90度回転やポスト周りの周回時にかなりの誤差が出るということがわかり、私たちのプログラムでは基本的に直交する2軸に沿った動きのみを予定していたためこの誤差を直すことが最優先と判断し、ポストを順番に取りに行くというプログラムもあきらめるということになった。またポストを順番に取りにいくプログラムをあきらめることにより帰路モードを単独で作っておくよりもポスト獲得モードの一部として組み込んでも変わらないと考えポスト獲得モードに組み込むことにした.

 

 

モード移動の流れ