名称 | MIRS1601 ソフトウェア詳細設計書 |
---|---|
番号 | MIRS1601-SOFT-0001 |
最終更新日:2016.12.14
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
B01 | 2017.2.3 | 諏訪 尚也 | 第二版 |
本ドキュメントは、MIRS1601のソフトウェア詳細設計について記したドキュメントである。
モジュール構成を以下に示す。
fig.1 モジュール構成
以下にArduinoで使用するモジュールの一覧を示す
モジュール名 | 概要 | 関数名 | 担当 |
---|---|---|---|
mirsak | mirs全体の動作を管理する。 | void set_up(void) void loop(void) |
打味 |
sequence | スタートから数字認識、展示室進入までの動作を行う。 | void sequence_main(void) | 打味 |
omuni_ctrl | オムニホイールを制御、壁との距離を測定して走行する。 | void omuni_ctrl_execute(void) void omuni_ctrl_set(omuni_state_t state, double speed, int dist) void omuni_ctrl_reset(void) |
諏訪 |
omuni_dist_ctrl | オムニホイールを制御、距離計のみを用いて走行する。 | void omuni_dist_ctrl_execute(void) void omuni_ctrl_set(void) |
打味 |
motor | モータを動かす。 | void motor_set(int pwm_n, int pwm_s, int pwm_e, int pwm_w, byte state) | 打味 |
distance | 走行距離を管理する。 | void distance_get(double *dist_n, double *dist_s, double *dist_e, double *dist_w) | 諏訪 |
encoder | エンコーダ値を管理する。 | void encoder_open(void) void encoder_get(long *cnt_n, long *cnt_s, long *cnt_e, long *cnt_w) static void enc_change_n(void) static void enc_change_s(void) static void enc_change_e(void) static void enc_change_w(void) |
久保寺 |
uss | 超音波センサの信号処理を行う。 | int uss_get(int uss_port) | 久保寺 |
cpu | CPUとの通信を行う。 | void cpu_open(void) void cpu_num_trans(uint8_t cam_no) int cpu_com_read(char *c) |
打味 |
以下にCPU側で使用するモジュールの一覧を示す。
モジュール名 | 説明 | 関数名 | 担当 |
---|---|---|---|
number | 数字認識を行う。 | int number_get(int dist) int number_serial(void) |
久保寺 |
server | 認識した数字をサーバーに送る。 | void server_send(int number) | |
balloon | 怪盗機の赤い風船を認識する。 | int picture_detect(int cammnum,int *area) int balloon_serial(void) |
|
serial_ctrl | CPUとArduinoの間で信号を共有して処理する。 | void serial_cpu(void) | 打味 |
使用するモジュールの仕様について示す。
既存のモジュールは、変更点がある部分のみ示す。
参考:MG3S 標準プログラム 関数レファレンス
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
void set_up(void) | なし | なし | エンコーダ、CPUの起動時の処理を行う |
void mirsak_main(void) | なし | なし | モジュール全体を統合し管理する。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
void sequence_main(void) | なし | なし | スタート地点から走行して数字認識を行い、展示室に入る。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
void omuni_ctrl_execute(void) | なし | なし | 走行制御の処理を実行する。 |
void omuni_ctrl_set(omuni_state_t state, double speed, int dist) | 走行モード、走行速度[cm/s]、走行距離[cm] | なし | オムニホイールによる走行モード、走行速度、壁との目標距離をセットする。 |
void omuni_ctrl_reset(void) | なし | なし | 状態を初期化する。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
void omuni_ctrl_execute(void) | なし | なし | 走行制御の処理を実行する。 |
void omuni_ctrl_set(omuni_state_t state, double speed, int dist) | 走行モード、走行速度[cm/s]、走行距離[cm] | なし | オムニホイールによる走行モード、走行速度、走行距離をセットする。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
void motor_open(void) | なし | なし | モータに使用するピンの設定を行う。 |
void motor_set(int pwm_l,int pwm_r,int pwm_f,int pwm_b) | 左右前後のモータPWM指令値(0〜±255) | なし | モータへPWM指令値を与える。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
void encoder_open(void) | なし | なし | エンコーダに使用するピンの設定とエンコーダカウント関数の割り込み設定を行う |
void encoder_get(long *cnt_l,long *cnt_r,long *cnt_f,long *cnt_b) | 左右前後のエンコーダ回転数 | なし | エンコーダの回転数を取得する。 |
void encoder_reset(void) | なし | なし | エンコーダの回転数をリセットする。 |
static void enc_change_n() | なし | なし | 北側のタイヤのエンコーダを読み取る。 |
static void enc_change_s() | なし | なし | 南側のタイヤのエンコーダを読み取る。 |
static void enc_change_e() | なし | なし | 東側のタイヤのエンコーダを読み取る。 |
static void enc_change_w() | なし | なし | 西側のタイヤのエンコーダを読み取る。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
void distance_get(double *dist_n, double *dist_s, double *dist_e, double *dist_w) | 前後左右のタイヤの走行距離[cm] | なし | 前後左右のタイヤの走行距離を取得する。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
double uss_get(int uss_port) | 処理を行う超音波センサの番号 | 測定結果を返す[cm] | 超音波センサの信号処理を行う。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
int number_get(int dist) | 数字認識を行う距離 | 読み取った数字、エラーがあれば-1 | モジュール全体を統合し管理する。 |
int number_serial(void) | なし | 読み取った数字、エラーがあれば-1 | CPUとAruduino間の通信を管理する。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
void server_send(int number) | 数字認識で読み取った数字 | なし | サーバーとの通信を行う。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
int balloon_detect(int cammnum,int *area) | 使用するカメラのポート、赤色の面積 | 正常に終了したら0、エラーがあれば-1 | カメラで撮影し、撮影した画像の赤色の占める面積を計算する |
int balloon_serial(void) | なし | 読み取った数字、エラーがあれば-1 | CPUとAruduino間の通信を管理する。 |
関数名 | 引数 | 戻り値 | 動作説明 |
---|---|---|---|
void serial_cpu(void) | なし | なし | CPUとArduinoの間で信号を共有して処理する。 |
フローチャートを以下に示す。また、競技フィールドの右端を0[deg]としてMIRSの角度表示を絶対角度として表す。
fig.2 競技フィールドとMIRSの基準角度
MIRS1601の機体は方向転換せずにオムニホイールによって指定した方向へ走行する。便宜上、競技フィールドとMIRS1601の絶対角度を一致させて以下のフローチャートでは方向を指定する。
fig.3 フローチャート
fig.4 スレッド構成図
loopではメインの走行プログラムを実行する。LEDや音楽再生など、別で動作し続ける処理を必要とするモジュールについては、適宜スレッドの生成を行う。
既存のテストプログラムがあるものは、それを実施する。
その他のモジュールで第1段階で使用するものについて以下に示す。