MIRS1801-SOFT-0001b 詳細設計書(ソフトウェア)
名称 MIRS1801 詳細設計書(ソフトウェア)
番号 MIRS1801-SOFT-0001b
版数 最終更新日 作成者 承認者 改訂記事
B01 2019.02.06 杉山康恭 第1版

目次

1.本ドキュメントについて

本ドキュメントは,MIRS1801のソフトウェア詳細設計に関する記述である.

2.ソフトウェア概要

ソフトウェアのもつ機能は、ユーザーインターフェースを介する図書選択、走行経路決定、走行制御の3つに分類され、それぞれPython、Raspberry Pi、Arduinoを用いて実現する。それぞれの具体的な動作を以下に述べる。


● 図書選択機能
   画面上に番号等が割り当てられたいくつかの選択肢が用意されており、ユーザーが任意のものを選択していき本を決定する。この際、本の情報はtxtファイルにあらかじめ用意されているものを用いる。本の決定後にはその本に対応した固有の番号をtxtファイルに書き込む。また、目的地到着時の本の方向を得る為、2つ目のtxtファイルを用意した。このtxtファイルには目的地点において本が右側にある場合には1,左にある場合には2を書き込むようにした。


● 走行経路決定機能
   C言語上では、txtファイルの更新を一定間隔で取得しており、Pythonから書き込みを監視している。更新を検知したらtxtファイルを開き本固有に番号を取得する。取得した番号を用いて、番号とその本への走行経路の情報が対応付けられた別のtxtファイル(前述のものとは異なる)を参照し、指定された本への走行経路を取得する。
ただし、いずれの本の位置も規則的に配置された本棚にあるものとし、走行経路の情報は、
  ①:横軸方向への移動の有無
  ②:縦軸方向の移動時に横を通過する本棚の数
  ③:本棚の端点から指定された本までの距離
の3つの情報で構成される。  また、本棚や人との衝突防止のために、超音波センサの測定値取得をスレッドにより並列実行し,直進時に指定値以下の距離が取得されている間走行を停止する.ただし,この機能は標準プログラムに含まれる回転動作(ROT)と後述の円弧上の走行(CUR)を行う際には作用しない.


● 走行制御機能
   シリアル通信で受け取った情報に従って走行を行う.走行動作は,直進走行・回転・円弧走行・停止の4つの動作の組み合わせにより実現する.このうち,円弧走行は,指定した半径によって描かれる円弧上に左右のタイヤの中点が指定速度で指定中心角を経るように走行するようにした走行モードである.

3.モジュール構成

モジュールの一覧をそれぞれ以下の表に示す。



表1 Raspberry PiのPythonに関するモジュール一覧
モジュール名機能関数名
functionbox.py 本の選択と対応した番号のテキストファイルへの書き込み first_screen
finish_screen
main.py テキストファイルの状態に応じてfunctionboxの関数を呼び出し 無し



表2 Raspberry PiのC言語に関するモジュール一覧
モジュール名機能関数名戻り値新規または変更
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
新規


表3 Arduinoのモジュール一覧
モジュール名機能新規性新規・変更関数名戻り値
run_ctrl 通信時の走行制御 新規でない run_exection(run_state_t state, double speed, double dist) なし

4.フローチャート



図1 全体動作のフローチャート





図2 状態遷移図





図3  pilot のフローチャート