名称 | MIRS1402 ソフトウェア完了報告書 |
---|---|
番号 | MIRS1402-SOFT-0002 |
最終更新日:2014.12.12
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
A01 | 2015.01.30 | 牧田 莉奈 | 初版 |
本ドキュメントは
cvCreateImageなどOPENCVの関数については、OPENCVの関数リファレンスを見ればよいので、省略する。
mirs1402 画像処理プログラム ダウンロード
mirs1402 全プログラム ダウンロード
関数名 | 概要 | 引数 | 戻り値 | 動作状態 | 所属ファイル |
---|---|---|---|---|---|
void main(画像処理用imgpre.c) | 画像処理プログラムの使用例を示したプログラムであり、 画像処理用テストプログラムでもある。 |
なし | なし | 良好 | imgpre.c |
void image | 実際に画像処理を行う時に実行する関数 必要な画像処理をまとめている |
int *area 風船が縦に領域を分けた際どこにあるか(-1を返した場合風船が小さすぎるか見つからない。角度検出に使用) double * dst2 風船までの距離(m) |
なし | 良好 | image.c |
int get_img | 画像をキャプチャし保存する関数 | 保存場所(./img/input.img) IMG_X 画像のX方向の画素数 IMG_Y 画像のY方向の画素数 |
キャプチャに失敗した場合 -1を返す それ以外は0を返す | 良好 | get_img.c |
void getBallColor | 画像をHSVに変換し、HSVで指定した色の領域を取得する関数 取得上限を下限より小さくすると、上限より大きい値と下限より小さい値が指定される HSVは順に 色相 彩度 明暗のパラメータ |
IplImage *input 入力画像(キャプチャ画像) IplImage *masked 出力画像 CV_BGR2HSV 変換パラメータ(この場合BGRからHSVに変換) int H取得上限 int H取得下限 int S取得上限 int S取得下限 int V取得上限 int V取得下限 | なし | 良好 | getBallColor.c |
int binarization | 赤検出を元に二値化する関数 | Iplimage *masked 入力画像(赤検出した画像) Iplimage *binr 出力画像 |
なし | 良好 | binarization.c |
double sizedetection | 輪郭検出をし、輪郭検出結果をもとに各輪郭の面積を算出し、最も大きい領域の面積から風船の有無と風船までの距離を計算する。使用していないが、輪郭の長さの計算もしている | IplImage *binr 入力画像(二値化画像) int &exist 風船が存在するか判断する値 1なら存在 double &dst22 風船までの距離(m) |
dst22と同じ値 | 良好 | sizedetection.c |
int angledetection | 赤検出された画素をエリアごと数えることで、最も赤の多いエリアを風船のある方角とする関数 | IplImage *binr2 入力画像(二値化画像) | int area 最も赤の画素の多いエリアの番号 | 良好 | angle.c |
void test_motor(void) | 統合プログラム | 怪盗機の捕縛にはいたらなかった | test_motor.c | ||
void motor_drive(int u_l, int u_r , int u_f , int u_b) | FPGAにモータ制御PWM信号を送る関数 | u_l〜u_b:第一から第四引数まで左右前後の順 | 良好 | motor.c | |
void pile_ctl(void) | パイルバンカ射出信号をFPGAに送る | 良好 | pile.c |
関数名 | 概要 | 引数 | 戻り値 | 動作状態 | 所属ファイル |
---|---|---|---|---|---|
float dir_adj_v_calculate(int dir_origin) | 一定の方角を見続けるための補正速度を演算する関数 | dir_origin:向きたい方向 | 補正速度 | 良好 | dir_adj_vector.c |
void img_pre_thread(void) | 画像処理スレッドをつくり、その制御をする関数 | 良好 | img_pre_thread.c | ||
void main_thread() | 統合スレッドをつくり、その制御をする関数 | セグメンテーション違反 | main_thread.c | ||
void map_store_read(int *map_data) | マップを読み込む関数 | map_data:マップ情報を格納する配列[19x19] | 良好 | map_store.c | |
void map_store_uss_dist_data_read(int *uss_dist_data, int dir) | 超音波センサのマップ情報を読み込む関数 | uss_dist:超音波センサのマップ情報の入った配列[9x9],dir:東西南北の指定(0,2,1,3) | 良好 | map_store.c | |
void motor_ctrl(void) | 良好 | motor_ctrl.c | |||
void step_motor_ctl(char *step_ctl,int step) | ステッピングモータを制御する関数 | step_ctl:0x01(正転(時計))、0x02(逆転),step:回転ステップ数(1ステップ30degree) | プログラムに関しては良好 | step_motor.c | |
void uss_get(int *uss) | ussの値を読む関数 | uss:ussの値をいれる配列[4] | 演習室環境では良好だったが、MIRSでは不良 | uss.c |
競技会の統括としては、会場を旋回しながら警備し、怪盗機を見つけて追いかけ、パイルバンカーを射出することができた。残念ながら風船を割る事には至らなかったが、一番警備ロボットらしい動きをしていたと思う。
詳細としては、プログラム単体での動作は全体的にうまくいっていた。しかしMIRS環境下での統合テストが、メカの完成の大幅な遅れによりほとんどできない状況であったため、統合プログラムの完成には至らなかった。