| 名称 | MIRS1701 ソフトウェア基本設計書 |
|---|---|
| 番号 | MIRS1701-DSGN-0006 |
| 版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
|---|---|---|---|---|
| A1 | 2018.01.10 | 坂下 尚史 | 小谷 進 | 初版 |
本ドキュメントは、MIRS1701のソフトウェア基本設計書である。
ソフトウェア設計の観点から今回のMIRSにどのような機能が必要か、Raspberry PiとArduinoに分けて以下に示す。
Raspberry Pi
Arduino
各機能を実現するためのモジュール構成を表と図に分けて、
にRaspberry Piモジュール一覧表、にArduinoモジュール一覧表を、
にRaspberry Piモジュール構成図、にArduinoモジュール構成図を示す。
| モジュール名 | 概要 | 新規性 |
|---|---|---|
| pilot | 各種スレッドを生成する | 新 |
| taskMain | メインの走行スレッド | 新 |
| taskComm | Arduinoとの通信スレッド | 新 |
| taskPoll | I2Cデバイスにポーリングを行うスレッド | 新 |
| run | 走行を行うためのモジュール | 新 |
| request | Arduinoとの通信モジュール | 新 |
| uss | i2cを用いた超音波センサの信号処理モジュール | 新 |
| gpio | gpioの信号処理モジュール | 新 |
| arduino | ArduinoとのUSB通信を制御するモジュール | 新 |
| sound | スピーカー、骨伝導イヤホンを鳴らすモジュール | 新 |
| battery | バッテリーを管理するモジュール | 新 |
| モジュール名 | 概要 | 新規性 |
|---|---|---|
| slave | 走行から信号処理まで各種処理をする | 小改造 |
| comm | Raspberry Piと通信を行う | 新 |
| run_ctrl | 走行制御を行う | 小改造 |
| vel_ctrl | 速度制御を行う | 小改造 |
| distance | 走行距離を計測する | 流用 |
| encoder | ロータリーエンコーダの信号処理をする | 小改造 |
| motor | モータのPWM制御を行う | 小改造 |
| io | IOピンの管理、信号処理を行う | 大改造 |
| raspi | Raspberry Piとの通信の信号を処理する。 | 大改造 |
※Arduinoのモジュール構成図にあるschedulerモジュールは、Arduinoの標準ライブラリであり、loop関数を増やす形でスレッドを作るため、モジュールとして扱うことができない。そのため、モジュール構成図にあるとおりの表記となっている。
今回のMIRSのプログラムはマルチスレッドを用いている。 なぜなら、Raspberry PiとArduinoの通信やI2C通信のような処理は、結果が得られるまでタイムラグからである。 そこで、それらのタイムラグのある処理を別スレッドにして、そのスレッドで常時ポーリングを行うことでメインタスクでタイムラグが発生することを防いでいる。
今回、MIRS1701ではRaspberry Piのプラグラミング言語にPythonを採用する。なぜなら、改めてC言語を学習しなおすよりも、新しくPythonを学習するほうが学習コストが低いほか、Pythonの方がプログラミングが楽に速く書くことができるからである。