名称 | MIRS1801 詳細設計書(ソフトウェア) |
---|---|
番号 | MIRS1801-SOFT-0001b |
版数 | 最終更新日 | 作成者 | 承認者 | 改訂記事 |
---|---|---|---|---|
B01 | 2019.02.06 | 杉山康恭 | 第1版 |
本ドキュメントは,MIRS1801のソフトウェア詳細設計に関する記述である.
ソフトウェアのもつ機能は、ユーザーインターフェースを介する図書選択、走行経路決定、走行制御の3つに分類され、それぞれPython、Raspberry Pi、Arduinoを用いて実現する。それぞれの具体的な動作を以下に述べる。
● 図書選択機能
画面上に番号等が割り当てられたいくつかの選択肢が用意されており、ユーザーが任意のものを選択していき本を決定する。この際、本の情報はtxtファイルにあらかじめ用意されているものを用いる。本の決定後にはその本に対応した固有の番号をtxtファイルに書き込む。また、目的地到着時の本の方向を得る為、2つ目のtxtファイルを用意した。このtxtファイルには目的地点において本が右側にある場合には1,左にある場合には2を書き込むようにした。
● 走行経路決定機能
C言語上では、txtファイルの更新を一定間隔で取得しており、Pythonから書き込みを監視している。更新を検知したらtxtファイルを開き本固有に番号を取得する。取得した番号を用いて、番号とその本への走行経路の情報が対応付けられた別のtxtファイル(前述のものとは異なる)を参照し、指定された本への走行経路を取得する。
ただし、いずれの本の位置も規則的に配置された本棚にあるものとし、走行経路の情報は、
①:横軸方向への移動の有無
②:縦軸方向の移動時に横を通過する本棚の数
③:本棚の端点から指定された本までの距離
の3つの情報で構成される。
また、本棚や人との衝突防止のために、超音波センサの測定値取得をスレッドにより並列実行し,直進時に指定値以下の距離が取得されている間走行を停止する.ただし,この機能は標準プログラムに含まれる回転動作(ROT)と後述の円弧上の走行(CUR)を行う際には作用しない.
● 走行制御機能
シリアル通信で受け取った情報に従って走行を行う.走行動作は,直進走行・回転・円弧走行・停止の4つの動作の組み合わせにより実現する.このうち,円弧走行は,指定した半径によって描かれる円弧上に左右のタイヤの中点が指定速度で指定中心角を経るように走行するようにした走行モードである.
モジュールの一覧をそれぞれ以下の表に示す。
モジュール名 | 機能 | 関数名 |
---|---|---|
functionbox.py | 本の選択と対応した番号のテキストファイルへの書き込み | first_screen finish_screen |
main.py | テキストファイルの状態に応じてfunctionboxの関数を呼び出し | 無し |
モジュール名 | 機能 | 関数名 | 戻り値 | 新規または変更 |
---|---|---|---|---|
pilot | 最初の起動動作を行う 動作モードを切り替える |
なし | なし | 新規 |
route_x | 動作モードを定義したモジュール モードはxはguide_return(案内待機)、guide(案内)、return_wait(帰還待機)、return(帰還)の4つがある |
route_x() | なし | 新規 |
request | Arduinoとの通信を行う threadとして動作する |
run_stateにCURを追加 request_get() |
なし |
赤丸検出のサンプルプログラムから変更 |
file | ファイルの書き込み・読み込み | CHAR_TO_INT(char ch) INT_TO_CHAR(int num) REVERSE(int num) FILE_READ() FILE_WRITE() FILE_CHECK_CHANGE() |
int char int int int int なし |
新規 |
uss | 超音波センサの監視 | uss_open() uss_get() |
int long |
赤丸検出のサンプルプログラムから変更(アドレスとセンサの上限値・下限値の調整) |
touch | タッチセンサの監視 | *thread_code(void *t) touch_create() touch_get_val(int *tch) touch_open() touch_get() |
なし int なし int int |
新規 |
flag | フラッグ変数の定義と初期化 | clear_run_flag() clear_state_flag() |
なし なし |
赤丸検出のサンプルプログラムから変更(フラッグの変更) |
stop_detect | 左右モータにあるエンコーダ値を確認し、停止状態にあるか判断 | なし | なし | 赤丸検出のサンプルプログラムと同様 |
direction | 超音波センサを用いた正対補正 | なし | なし | 標準プログラムから変更 |
mag | 磁気センサを用いた自己位置の把握 | mag_set() mag_get() |
int double |
新規 |
モジュール名 | 機能 | 新規性 | 新規・変更関数名 | 戻り値 |
---|---|---|---|---|
run_ctrl | 通信時の走行制御 | 新規でない | run_exection(run_state_t state, double speed, double dist) | なし |