名称 MIRS1804 ソフトウェア詳細設計書
番号 MIRS1804-SOFT-0001b

版数 最終更新日 作成 承認 改訂記事
B01 2019.02.12 米持春貴 中村美月 初版

ドキュメント内目次

  1. はじめに
  2. モジュール構成
  3. 画面遷移とデザイン
  4. フローチャート
  5. 実行プロセス及びプロセス間の通信
  6. スレッド構成
  7. テスト項目
  8. コーディングルール

はじめに

本ドキュメントはMIRS1804 GYM員Projectのソフトウェア詳細設計書についてのドキュメントである。

モジュール構成

モジュール構成図

ArduinoとRaspberryPiのモジュール構成図をFig1に示す。
太線で囲まれたモジュールは新規作成するもの、二重線で囲まれたモジュールは変更するものである。
Fig.1 ソフト
Fig.1 RaspberryPi,Arduinoモジュール構成図

RaspberryPiモジュール詳細

RaspberryPiのプログラムの主要モジュールの詳細を各モジュールごとTable.1に示す。
言語はCを用いる。
既存のプログラムを変更して使うものに関しては追加・変更する部分のみ示す。
Table.1 RaspberryPiモジュール一覧表
モジュール名 機能 関数名 引数 戻り値
pilot(変更) プログラム全体を制御する main() なし なし
display(新規) ディスプレイへ情報を送る
ディスプレイから情報を受けとる
display_send()
display_waut()
バッテリー残量(double)、走行終了判定(1or0)
なし
なし
走行モード(int)
run(新規) 走行を制御する run() 走行モード(int) なし
marker(新規) マーカー設置用のモータの回転・停止を制御する marker_set() 回転速度(int) なし
line(新規) 石灰設置用のモータを回転させる
石灰設置用のモータを停止させる
line_start()
line_stop()
回転速度(int)
なし
なし
なし
request(変更) マーカー設置信号をArduinoに送る
白線設置信号をArduinoに送る
弧走行信号をArduinoに送る
request_set_marker
request_set_line
request_set_ark
回転速度(int)、回転角度(int)
回転速度(int)
走行速度(int)、走行距離(int)、左右のタイヤの回転比(double)
なし
なし
なし

Arduinoモジュール詳細

Arduinoのプログラムの主要モジュールの詳細を各モジュールごとTable.2に示す。
言語はArduinoIDEを用いる。
既存のプログラムを使うものに関しては追加・変更する部分のみ示す。
Table.2 Arduinoモジュール一覧表
モジュール名 機能 関数名 引数 戻り値
slave マーカー、白線、弧の走行機能を追加 slave() 変更なし 変更なし
run_ctrl 弧の走行機能を追加
弧の走行を制御する
run_ctrl_execute()
run_ctrl_set_ark()
なし
走行速度(double)、走行距離(double)、左右のタイヤの回転比(double)
なし
なし
vel_ctrl マーカー、弧の速度制御機能を追加 vel_ctrl_execute()
なし なし
motor マーカー、白線モーターの機能を追加 motor_set_m()
motor_set_line()
pwm(int)
pwm(int)

ディスプレイ表示プログラム詳細

モジュール構成図

ディスプレイ表示部分(以下アプリケーションと表す)のモジュール構成図をFig.1に示す。なお、青色で示されたモジュールは画面表示に関するモジュールである。
Fig.1 アプリモジュール構成図
Fig.1 アプリケーション モジュール構成図

プログラム概要

アプリケーションはすべて新規に作成する。言語はPythonを用いる。
Pythonのバージョンおよび、標準ライブラリ以外のライブラリについて以下にまとめる。
Pythonバージョン:3.5.3
GUIライブラリ:wxPython(ver. 4.0.3)
GPIOライブラリ:RPi.GPIO (ver. 0.6.5)

ライブラリのうち、wxPythonは新たにインストールする。RPi.GPIOは既にインストールされているものを使用する。

画面表示部分 モジュール詳細

アプリケーションのモジュールのうち、画面表示に関係する部分のモジュールの詳細についてTable.1に示す。
なお、各モジュールには戻り値が存在しないため、省略する。また、引数はself以外のものについて記載する。
Table.3 画面表示部 モジュール詳細一覧
クラス名 クラス概要 モジュール名 モジュール概要 引数
StartFrame 開始画面の表示 __init__ 表示フレームの設定 parent,id
SetStartFrame 画面表示 -
OnTime タイマーイベント(200msごと)発生時の処理 event
ShowSelect 選択画面への移行 -
SelectFrame 選択画面の表示 __init__ 表示フレームの設定 parent
SetSelectFrame 画面表示 -
OnTime タイマーイベント(200msごと)発生時の処理 event
ChangeFigLeft 左ボタン押下時の処理 -
ChangeFigRight 右ボタン押下時の処理 -
SetFigure 図面の変更 -
ShowReady 確認画面への移行 -
ReadyFrame 確認画面の表示 __init__ 表示フレームの設定 parent
SetReadyFrame 画面表示 -
OnTime タイマーイベント(200msごと)発生時の処理 event
MoveLeft カーソルを左に移動 -
MoveRight カーソルを右に移動 -
ShowRun 走行中画面への移行 -
BackSelect 選択画面へ戻る -
RunFrame 走行中画面の表示 __init__ 表示フレームの設定 parent
SetRunFrame 画面表示 -
OnTime タイマーイベント(1秒ごと)発生時の処理 event
OnComm 通信イベント発生時の処理 event
ShowFinish 完了画面への移行 -
ShowEmergency 緊急停止画面への移行 -
FinishFrame 完了画面の表示 __init__ 表示フレームの設定 parent
SetFinishFrame 画面表示 -
OnTime タイマーイベント(200msごと)発生時の処理 event
ShowExit 終了画面への移行 -
ExitFrame 終了画面の表示 __init__ 表示フレームの設定 parent
SetExitFrame 画面表示 -
ExitApp アプリケーション全体の終了 event
Emergency 緊急停止画面の表示 __init__ 表示フレームの設定 parent
SetEmergency 画面表示 -

その他の機能のモジュール詳細

アプリケーションのモジュールうち、画面表示以外の処理に関するモジュールの詳細についてTable.2に示す。
Table.4 その他の機能 モジュール詳細一覧
クラス名 クラス概要 モジュール名 モジュール概要 引数 戻り値
CommEvent 通信イベントの設定 __init__ 通信イベントの設定 self,flag -
CommunicationThread 通信スレッド __init__ スレッドの設定 self,window -
run 走行プログラムからの受信 self -
- - GetData 日時の取得 - 日時
- - FigSet 表示する図面の取得 - 図面の画像
- - CountRight 図面番号を1,2,3,4,1,…の順に変化させる - -
- - CountLeft 図面番号を1,4,3,2,1,…の順に変化させる - -
- - GetCount 現在の図面番号を返す - 図面番号
- - CommSend 走行プログラムに図面番号を送信する - -
- - RunAnimation アニメーションの表示処理 - アニメーションの画像
- - CountUp アニメーションのカウントを増やす - -
- - GPIOStart GPIOの設定 - -
- - GPIOExit GPIOポートの終了処理 - -

画面遷移とデザイン

画面遷移図

アプリケーションの画面遷移図をFig.2に示す。
Fig.2 画面遷移図
Fig.2 ディスプレイ 画面遷移図

画面デザイン

各画面のデザインを以下に示す。
Fig.3 開始画面
Fig.3 開始画面
Fig.4 選択画面
Fig.4 選択画面
Fig.5 確認画面
Fig.5 確認画面
Fig.6 走行中画面
Fig.6 走行中画面
Fig.7 完了画面
Fig.7 完了画面
Fig8 終了画面
Fig.8 終了画面
Fig.9 緊急停止画面
Fig.9 緊急停止画面

フローチャート

ディスプレイアプリケーションと走行ソフトのフローチャートを以下に示す。
Fig.10 アプリフローチャート
Fig.10 アプリケーションフローチャート
Fig.11 ソフト
Fig.11 走行フローチャート

実行プロセス及びプロセス間の通信

実行プロセスは、走行プログラムとディスプレイ表示アプリケーションの2つで構成される。

ソケット通信によるプロセス間通信(MIRSMG4D-SOFT-0007)を参考に、 ソケット通信を用いて走行プログラム、アプリケーション間のデータのやり取りを行う。
送受信するデータの詳細をTable.3に示す。
Table.5 プロセス間通信 データ一覧
使用ポート 送信側 受信側 送信データ(型)
51000 アプリケーション 走行プログラム 図面番号(int)
51001 走行プログラム アプリケーション 走行完了情報(char)

スレッド構成

走行プログラム

プログラムは全て1スレッドで動作する。

アプリケーション

プログラムは基本的に1スレッドで動作する。
ただし、走行中のみ画面を表示するスレッドと走行プログラムとの通信を行うスレッドに分割し、それぞれ処理を行う。

テスト項目

テスト項目を以下に示す。

単体テスト

ディスプレイアプリケーション単体で以下の項目をテストする。

統合テスト

走行プログラム、ディスプレイアプリケーションおよび完成した機体と合わせて、屋内で以下の項目をテストする。

走行プログラム、ディスプレイアプリケーションおよび完成した機体と合わせて、屋外で以下の項目をテストする。

コーディングルール

・C言語の関数、変数について
関数は全て小文字の短い名前で書き、2単語以上の場合は単語の区切りにアンダーバー「_」を入れる。
変数は全て小文字の短い名前で書き、2単語以上の場合は2単語目以降の単語の頭文字を大文字にする。

・バージョン管理について
新しい機能を追加した際にそのバージョンのバックアップを取り、バージョンの数字を上げていく。
バージョンを上げた際には、足した機能をテキストファイルにまとめる。


MIRS DATABASE