名称 | MIRS1303 ソフトウェア詳細設計書 |
---|---|
番号 | MIRS1303-SOFT-0001 |
最終更新日:2014.02.03
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
A01 | 2013.02.03 | 飯塚・野村・杉山春樹 | 初版 |
ファイル名 | 関数宣言 | 概要 |
---|---|---|
mirs.c | int main(void) | 各種スレッドの作成とドライバオープンを行う関数。 |
junkai.c | void junkai(void) | 宝の確認を行うプログラム。競技前半の動作はこの関数に記述する。 |
chase.c | void chase(void) | 怪盗機の捜索、追跡を行うプログラム。競技後半の動作はこの関数に記述する。 |
run.c | float run_straight_to(float x,float max_speed,double angle_ref,RunStatus* st) | 直進走行時に呼び出す関数。 ロータリーエンコーダと電子コンパスの値を用いてPID制御を行う。 目標距離[mm],直進速度,指定角度[deg]、現在の走行状態を引数、走行距離[mm]を返り値に持つ。 この関数を目標値に達するまで繰り返し呼び出す。 |
float run_rotate_to(float angle_ref,float max_angle_speed,RunStatus* st) | その場回転時に呼び出す関数。 ロータリーエンコーダと電子コンパスの値を用いてPID制御を行う。 指定角度[deg],回転速度、現在の走行状態を引数、回転角度[deg]を返り値に持つ。 この関数を目標値に達するまで繰り返し呼び出す。 |
|
coordinates.c | void coordinates_correct(float current_x,float current_y) | 自己位置の修正が必要になった時に呼び出す関数。 角度の正対補正をした後超音波センサの値を用いて座標修正を行う。 float型の推定位置座標(x,y)[mm]を引数に持つ。 自己位置を修正する前後で座標推定を一時中断させる。 |
void coordinates_guess(void) | 自己位置の推定を行う関数。スレッドで常に呼び出す。 ロータリーエンコーダで移動した距離、電子コンパスで現在の角度を読み取り、移動距離を推定する。 センサスレッドで繰り返して呼び出し、一定時間ごとに現在位置を更新する。 なお、現在位置は機体の中心を基準にして推定する。 |
|
void coordinates_touch_center(float speed,float dir) | 走行中に前方のタッチセンサが反応した場合に動作を行う関数。 直前の走行の速度、指定角度を引数に持つ。 怪盗機が前方に居る場合はこの関数は呼び出さない。 |
|
void coordinates_touch_side(float speed,float dir,int side) | 走行中に左右のタッチセンサが反応した場合に動作を行う関数。 壁に当たらない程度に後退して、指定角度に回転する。 直前の走行の速度、指定角度、反応したタッチセンサの番号(右、左)を引数に持つ。 |
|
distance.c | int distance(float x,float y,int dir) | 指定したマス目の指定した方向の壁までの距離を調べる関数。 測定可能な壁と指定したマスが何マス離れているかを返す。 dirはスタートの向きを0、右側を1、後ろ側を2、左側を3として、4方向を指定する。 |
mail.c | void send_mail(int status) | イベント発生時にメールを送る関数。 発生したパターンごとに送る内容を変更する予定。 |
compass.c | float compass(void) | 電子コンパスの値を受け取る関数。スレッドで常に呼び出す。 float型(0から359.9[deg])の方位(スタートからの回転角度)を返り値に持つ。 角度はスタート時正面を0[deg]基準にして、時計回りに正とする。 |
mapping.c | int mapping(void) | コース情報を配列に渡すための関数。 course.csvからデータ情報を読み取り、配列squareに値を代入する。 |
stolen_thread.c | void stolen_thread(void) | サーバに接続して盗難情報を受け取るスレッド。 盗難情報が更新されると、盗まれた宝の番号を更新する。 |
capture_image.c | void capture_image(void) | コマンド"uvccapture"を実行するための関数。 Webカメラで静止画像を一枚撮影し、保存する。 |
ball_find_thread.c | int ball_find_thread(void) | 赤いボール、もしくは青いボールを認識するためのスレッド。 撮影した画像を2値化し、赤もしくは青を検知する。 入力画像を縦に4分割し、検出されたピクセルがどの領域に一番多いかの判断からボールの方角を決める。 |
変数宣言 | 概要 |
---|---|
int uss[4] | 超音波センサの値[cm]を保持する。 |
char io_data[12] | タッチセンサ、赤外線センサの値を保持する。 |
RunStatus* st | 走行状態を保持する変数。直進・回転開始前に初期化する。 |
float angle | 電子コンパスの値[degree]を受け取り保持する。 |
float init_angle | スタート時の電子コンパスの値[degree]を保持する。 |
float current_x | 現在のx座標[mm]を保持する。現在の座標は機体の中心を表す。
原点は競技場の角を仮定している。 |
float current_y | 現在のy座標[mm]を保持する。現在の座標は機体の中心を表す。
原点は競技場の角を仮定している。 |
int stolen_num | 最後に盗難された宝の番号を保持する。 |
int square[i][j][data] | コース情報から、各マス目[i,j]の情報を保持する配列。初期値はdata.csvに入力されている。 data = [0-3]:各マス目の壁の有無情報 data = [4]:宝に関する情報 data = [5-8]:怪盗機捜索コースの方向、距離情報(2パターン) |
int direction | 画像認識で取得した怪盗(ボール)の方向を示す値を保持する。 direction = [1-4]:ボールの位置 (このときの1〜4を図9を用いて示す。) direction = [0]:ボール無し |