名称 MIRS1704 走行機能ソフトウェア詳細設計書
番号 MIRS1704-SOFT-0003

版数 最終更新日 作成 承認 改訂記事
A01 2018.1.18 鈴木皓仁 初版
A01 2018.1.24 鈴木皓仁 牛丸先生 第二版

ドキュメント内目次



1.はじめに

本ドキュメントは、走行機能についてのソフトウェア詳細設計書である。
まず、システム基本設計ではユーザーがMIRSに送信するルートのデータは距離や曲がる方向などを細かく指定するような想定でいたがそれを変更し、Raspberry Piにあらかじめ学校内のマップを保存しておき、ユーザーはどの順路で目的地まで運搬を行うかのみを指定するようにした。

2.モジュール構成

システム基本設計時より変更点があるため、改めてモジュール構成図を以下に示す。

Fig.1                  Fig.2
Fig.1 Raspberry Piモジュール構成図                                                                                                                                                             Fig.2 Arduinoモジュール構成図


新規作成・変更するモジュールの一覧を示す。

table1 Raspberry Piモジュール一覧
モジュール名 概要 新規作成・変更関数 関数の機能 関数の戻り値
pilot
mainとmulti_requestの二つのスレッドを実行する
main
ユーザーが指定したルートの走行を行うスレッド
マップのデータは配列としてこのモジュールに組み込まれている
multi_get
Arduinoのタッチセンサの状態を確認し続けるスレッド
run
壁にぶつからないように1ルートの走行を行う run(int dist) 超音波センサの左右の距離を取得し、壁にぶつからないように補正しながら走行を行う 無し
delay
Arduinoの動作を待機する run_delay() 走行の状態が停止状態になるまで走行の状態を確認し続け、遅延を行う
連続してrequest_set_runmode等の走行指令を出したいとき、指令の間にこの関数を入れる
無し
elevater
エレベーターの乗降を行う upto_elevater() エレベーターに乗込む 無し
downto_elevater() エレベーターから降りる
correct
定点における補正を行う correct(int width , int wall) 中央目的地(1ルート走行完了地点)に到達できているかを確認し、補正を行う 無し
sound
音を鳴らす sound() Raspberry Pi内の音声ファイルをスピーカーから出力する 無し
direction
方位センサを取り扱う get_compass() MIRS本体の向きを取得する MIRS本体の絶対角度
get_angle() MIRS本体の変位角度
uss
超音波センサを取り扱う get_uss_all(int *uss_r , int *uss_l , int *uss_f , int *uss_b) 4方向の超音波センサの値を一度に取得する 無し
get_wall_state() MIRS本体から見た左右の壁の有無の状態を取得する 0~3の値
data
スマートフォンで作成したファイルのデータを処理する get_route_data(int *start[DATA_MAX] , int *goal[DATA_MAX]) ファイル内のルートデータを読み込み、*start[DATA_MAX]と*goal[DATA_MAX]に値を代入する 0か1
Arduinoに関しては、使用センサとしてタッチセンサを8つ(後ろの3つは1つとして値を取り扱う)追加するが、その値を読み取るため、モジュールio.ino内のio_get_sw()と同じ内容のものを6つ用意する。
また、Raspberry Piの超音波センサの値を使って、長距離を確実に直進させるためにArduinoの走行制御の部分に進行角度を修正するプログラムを追加する。

3.フローチャート

3.1 走行全体

走行全体のフローチャートを以下に示す。

Fig. 3
Fig. 3 走行時フローチャート

次に、中央走行及び障害物接触時の回避動作のフローチャートをそれぞれFig4、Fig5に示す。
障害物回避動作は、マルチスレッドで実装する。
なお、この機能は場合によっては実装しきれない可能性がある。
Fig. 4                       Fig. 4
Fig. 4 中央走行フローチャート                                                                                    Fig. 5 障害物接触時回避動作フローチャート


次に、中間目的地到達補正動作のフローチャートを示す。

Fig. 6
Fig. 6 中間目的地到達補正動作フローチャート

3.2 エレベータ乗降

エレベータ乗降動作のフローチャートを以下に示す。

Fig. 7
Fig. 7 エレベータ乗降動作フローチャート

4.テスト項目

主要関数についてのテスト項目を以下の表に示す。

table2 走行機能テスト項目
関数名 所属モジュール テスト内容
main
pilot.c スタート地点から最終目的地まで走行し、使用者に到着を知らせることができる。
uss_get_wallstate
uss.c 左右の壁情報を取得できる。
uss_get_all
uss.c すべての超音波センサの値を一度に取得できる。
sound
sound.c Raspberry Pi内の音声ファイルをスピーカーから出力できる。
run
run.c 壁にぶつかることなく走行することができる。
point_correct
correct.c 中間目的地に到達することができる。
run_delay
delay.c Arduinoで走行指令を出している間、Raspberry Piが動作を待機できる。
get_compass
compass.c MIRS本体の向いている角度を取得できる。
upto_elevater
elevater.c エレベータに乗り込むことができる。
downto_eleveter
elevater.c エレベータから降りることができる。
get_route_data
data.c ファイル内の数字を読み取り、任意の配列に入れることができる。




5.コーディングルール

・プログラムについて
必要に応じて見やすくなるよう、インデントしておく。
可読性をあげるために適切にコメントをつける。

・統合手順
プログラム統合の前に、単体テスト・機能テストを行う。
また、全てのモジュールについて単体機能試験を実施する。

・ファイル分割基準
モジュールごとにファイルを分割する。
ソースファイル(*.c)に対応した名前のヘッダファイル(*.h)を用意し、グローバルな関数と、共通に使う構造体などを宣言する。
ヘッダファイルは、原則モジュールごとに作成する。

・関数名、変数名について
変数名や関数名は、ループ変数を除き、見て意味のわかる名前をつける。なお、名前は原則英語で短すぎないものを使用する。



MIRS DATABASE