MIRS1801-SOFT-0001　システム詳細設計書（ソフトウェア） 

名称
MIRS1801　システム詳細設計書（ソフトウェア）
番号
MIRS1801-SOFT-0001

版数 最終更新日 作成者 承認者 改訂記事
A01 2018.11.19
杉山康恭 第1版

## 目次

1. 本ドキュメントについて
2. ソフトウェア概要
3. モジュール構成
4. フローチャート
5. コーディングルール

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

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

## 2. ソフトウェア概要

ソフトウェアのもつ機能は、ユーザーインターフェースを介する図書選択、走行経路決定、走行制御の3つに分類され、それぞれPython、Raspberry Pi、Arduinoを用いて実現する。それぞれの具体的な動作を以下に述べる。
●　図書選択機能
画面上に番号等が割り当てられたいくつかの選択肢が用意されており、ユーザーが任意のものを選択していき本を決定する。この際、本の情報はCSVファイルにあらかじめ用意されているものを用いる。本の決定後にはその本に対応した固有の番号をcsvファイルから読み取り、txtファイルにその番号を書き込む。
●　走行経路決定機能
C言語上では、txtファイルの更新を一定間隔で取得しており、Pythonから書き込みを監視している。更新を検知したらtxtファイルを開き本固有に番号を取得する。取得した番号を用いて、番号とその本への走行経路の情報が対応付けられたCSVファイル（前述のものとは異なるファイル）を参照し、指定された本への走行経路を取得し、シリアル通信でArduinoに伝達しする。
ただし、いずれの本の位置も規則的に配置された本棚にあるものとし、走行経路の情報は、
①：横軸方向への移動の有無
②：縦軸方向の移動時に横を通過する本棚の数
③：本棚の端点から指定された本までの距離
の3つの情報で構成される。
また、本棚や人との間隔の認知のために、超音波センサ・磁気センサの測定値もシリアル通信で伝達する。
さらに、本がロボットの前方に対して左右どちらにあるかという情報を組み込む場合は、②の情報の与え方を改め、扱う際に簡単な演算を施すことで実現できる。
●　走行制御機能
シリアル通信で受け取った情報に従って本のある位置への案内を行う。走行中には、超音波センサまたは磁気センサを用いることで進行方向の経路方向との傾きを補正する。
また、本棚や人との間隔を超音波センサ・磁気センサの値を基に適切に保ち、衝突時の安全確保のためにタッチセンサを用いて衝突時に停止する措置をとる。

## 3. モジュール構成

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

表1　Raspberry PiのPythonに関するモジュール一覧

モジュール名 機能 関数名
user_request.py キーボードからの入力を検知し、対応した画面を表示 user_request_get
user_request_display
book_select.py 確定した番号のテキストへの書き込み book_select_write
state_navigation.py 案内中または案内終了の表示 state_navigation_get
state_navigation_display

表2　Raspberry PiのC言語に関するモジュール一覧

モジュール名 機能 新規関数名 戻り値
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とのシリアル通信

表3　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を用いるモジュールものに関して示していない。

図1　Raspberry Piのモジュール構成図(Pythonを用いたものを除く)

図2　Arduinoのモジュール構成図

## 4. フローチャート

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

図5　Pythonのフローチャート

## 5. コーディングルール

＜関数・変数について＞

関数はすべて小文字で書き、最初にモジュール名を書く。二単語以上のときはアンダーバー（＿）でつなぐ。
変数名は小文字で書き、二単語以上のときアンダーバー（＿）でつなぐ。

＜バージョン管理について＞

バージョン管理は新しい機能を追加するごとにそのバージョンのバックアップをとる。

MIRS1801ドキュメント管理台帳