MIRS1701 管理台帳へ戻る
名称 MIRS1701 ソフトウェア基本設計書
番号 MIRS1701-DSGN-0006
版数 最終更新日 作成 承認 改訂記事
A1 2018.01.10 坂下 尚史 小谷 進 初版

目次

はじめに

本ドキュメントは、MIRS1701のソフトウェア基本設計書である。

機能設計

ソフトウェア設計の観点から今回のMIRSにどのような機能が必要か、Raspberry PiとArduinoに分けて以下に示す。

Raspberry Pi

Arduino

構造設計

各機能を実現するためのモジュール構成を表と図に分けて、 にRaspberry Piモジュール一覧表、にArduinoモジュール一覧表を、
にRaspberry Piモジュール構成図、にArduinoモジュール構成図を示す。

Raspberry Piモジュール一覧表
モジュール名 概要 新規性
pilot 各種スレッドを生成する
taskMain メインの走行スレッド
taskComm Arduinoとの通信スレッド
taskPoll I2Cデバイスにポーリングを行うスレッド
run 走行を行うためのモジュール
request Arduinoとの通信モジュール
uss i2cを用いた超音波センサの信号処理モジュール
gpio gpioの信号処理モジュール
arduino ArduinoとのUSB通信を制御するモジュール
sound スピーカー、骨伝導イヤホンを鳴らすモジュール
battery バッテリーを管理するモジュール
Arduinoモジュール一覧表
モジュール名 概要 新規性
slave 走行から信号処理まで各種処理をする 小改造
comm Raspberry Piと通信を行う
run_ctrl 走行制御を行う 小改造
vel_ctrl 速度制御を行う 小改造
distance 走行距離を計測する 流用
encoder ロータリーエンコーダの信号処理をする 小改造
motor モータのPWM制御を行う 小改造
io IOピンの管理、信号処理を行う 大改造
raspi Raspberry Piとの通信の信号を処理する。 大改造
モジュール構成図
Raspberry Piモジュール構成図
Arduinoモジュール構成図
Arduinoモジュール構成図

※Arduinoのモジュール構成図にあるschedulerモジュールは、Arduinoの標準ライブラリであり、loop関数を増やす形でスレッドを作るため、モジュールとして扱うことができない。そのため、モジュール構成図にあるとおりの表記となっている。

今回のMIRSのプログラムはマルチスレッドを用いている。 なぜなら、Raspberry PiとArduinoの通信やI2C通信のような処理は、結果が得られるまでタイムラグからである。 そこで、それらのタイムラグのある処理を別スレッドにして、そのスレッドで常時ポーリングを行うことでメインタスクでタイムラグが発生することを防いでいる。

Raspberry Piプログラムについて

今回、MIRS1701ではRaspberry Piのプラグラミング言語にPythonを採用する。なぜなら、改めてC言語を学習しなおすよりも、新しくPythonを学習するほうが学習コストが低いほか、Pythonの方がプログラミングが楽に速く書くことができるからである。