| 名称 | MIRS1801 システム詳細設計書(ソフトウェア) |
|---|---|
| 番号 | MIRS1801-SOFT-0001 |
| 版数 | 最終更新日 | 作成者 | 承認者 | 改訂記事 |
|---|---|---|---|---|
| A01 | 2018.11.19 | 杉山康恭 | 第1版 |
本ドキュメントは,MIRS1801のソフトウェア詳細設計に関する記述である。
ソフトウェアのもつ機能は、ユーザーインターフェースを介する図書選択、走行経路決定、走行制御の3つに分類され、それぞれPython、Raspberry Pi、Arduinoを用いて実現する。それぞれの具体的な動作を以下に述べる。
● 図書選択機能
画面上に番号等が割り当てられたいくつかの選択肢が用意されており、ユーザーが任意のものを選択していき本を決定する。この際、本の情報はCSVファイルにあらかじめ用意されているものを用いる。本の決定後にはその本に対応した固有の番号をcsvファイルから読み取り、txtファイルにその番号を書き込む。
● 走行経路決定機能
C言語上では、txtファイルの更新を一定間隔で取得しており、Pythonから書き込みを監視している。更新を検知したらtxtファイルを開き本固有に番号を取得する。取得した番号を用いて、番号とその本への走行経路の情報が対応付けられたCSVファイル(前述のものとは異なるファイル)を参照し、指定された本への走行経路を取得し、シリアル通信でArduinoに伝達しする。
ただし、いずれの本の位置も規則的に配置された本棚にあるものとし、走行経路の情報は、
①:横軸方向への移動の有無
②:縦軸方向の移動時に横を通過する本棚の数
③:本棚の端点から指定された本までの距離
の3つの情報で構成される。
また、本棚や人との間隔の認知のために、超音波センサ・磁気センサの測定値もシリアル通信で伝達する。
さらに、本がロボットの前方に対して左右どちらにあるかという情報を組み込む場合は、②の情報の与え方を改め、扱う際に簡単な演算を施すことで実現できる。
● 走行制御機能
シリアル通信で受け取った情報に従って本のある位置への案内を行う。走行中には、超音波センサまたは磁気センサを用いることで進行方向の経路方向との傾きを補正する。
また、本棚や人との間隔を超音波センサ・磁気センサの値を基に適切に保ち、衝突時の安全確保のためにタッチセンサを用いて衝突時に停止する措置をとる。
モジュールの一覧をそれぞれ以下の表に示す。
| モジュール名 | 機能 | 関数名 |
|---|---|---|
| user_request.py | キーボードからの入力を検知し、対応した画面を表示 | user_request_get user_request_display |
| book_select.py | 確定した番号のテキストへの書き込み | book_select_write |
| state_navigation.py | 案内中または案内終了の表示 | state_navigation_get state_navigation_display |
| モジュール名 | 機能 | 新規関数名 | 戻り値 |
|---|---|---|---|
| pilot | 全体的な動作の管理 | ||
| route | 走行ルートの決定と送信 | ||
| run | 走行命令の送信 | ||
| direction | 正対補正のための回転量の決定 | ||
| mag | 磁気センサの値の読み取り | int mag_get() | int型 |
| uss | 超音波センサの読み取り |
int uss_open( int position ) long uss_get( int position ) |
int型 |
| request | Arduinoへの命令の送信 | void request_put( int value1 , int value2 , int value3 ) |
なし |
| arduino | Arduinoとのシリアル通信 |
| モジュール名 | 機能 | 関数名 | 戻り値 |
|---|---|---|---|
| slave | 一定周期での各種の処理の実行 | void navigation( int book[3] , int book_prev[3] ) | なし |
| raspi | RaspberryPiとのシリアル通信 | ||
| run_ctrl | 走行の制御 | ||
| vel_ctrl | 速度の制御 | ||
| motor | モータの操作 | ||
| distance | 走行距離の計測 | ||
| encoder | エンコーダの読み取り | ||
| io | その他のデバイス情報の取得 | ||
RaspberryPiのC言語に関するモジュール、Arduinoのモジュール構成図をそれぞれ下図に示す。ただし、Pythonを用いるモジュールものに関して示していない。



<関数・変数について>
関数はすべて小文字で書き、最初にモジュール名を書く。二単語以上のときはアンダーバー(_)でつなぐ。<バージョン管理について>
バージョン管理は新しい機能を追加するごとにそのバージョンのバックアップをとる。