MIRS1701 管理台帳へ戻る
名称 MIRS1701 ソフトウェア開発報告書
番号 MIRS1701-REPT-0005
版数 最終更新日 作成 承認 改訂記事
A1 2018.02.26 鈴木 宏和 牛丸 真司 初版

目次

はじめに

本ドキュメントは、MIRS1701のソフトウェア開発報告書である。

製作プログラム一覧

RaspberryPiプログラム

今回、MIRS1701が製作したプログラムのうち、RaspberryPi用のプログラムの一覧をリンクに示す。
なお、このドキュメントはsphinxを用いて作成した。
また、モジュール構成図をに示す。

モジュール構成図
Raspberry Piモジュール構成図

Arduinoプログラム

今回、MIRS1701が製作したプログラムのうち、Arduino用のプログラムの一覧をに示す。
また、モジュール構成図をに示す。

Arduinoモジュール構成図
Arduinoモジュール構成図
製作プログラム一覧

PICプログラム

今回、MIRS1701が製作したプログラムのうち、PIC用プログラムはmain.cのみである。詳細設計書通りの動作を行う。

製作内容

標準プログラム(移植)

担当:鈴木

標準プログラムの機能のうち、arduino, io(gpioへ改名), request, ussモジュールをpythonへ移植した。シリアル通信にはpyserial、GPIO制御にはRPi.GPIO、I2C通信にはsmbus2を用いた。

この製作内容にはarduino.pyx, gpio.py, request.pyx, uss.pyxが該当する。

マルチタスクプログラム

担当:鈴木

マルチスレッドで高精度の周期実行を提供するttaskモジュールと、マルチプロセスによるマルチコア動作を提供するptaskモジュールおよびそれらを継承したtaskMain(ttask)、taskPoll(ptask)、taskComm(ptask)モジュールを作成した。
マルチスレッドにはthreading、マルチプロセスにはmultiprocessingを用いた。

この製作内容にはtaskComm.py, taskMain.py, taskPoll.pyx, ttask.pyx, ptask.pyxが該当する。

走行プログラム

担当:鈴木・坂下

走行プログラムは、壁追従走行、交差点を曲がる等の動作と、曲がり角判断、障害物判断などの判定および状態遷移を行う。
各種走行状態の判断は詳細設計で示したフローチャートの通りに作成した。
また、バッテリ電圧を監視し、常に適切なバッテリを選択するように判断する。

この製作内容にはtaskMain.py, run.py, state.py, pid.py, battery.pyx, databox.pyxが該当する。

音声通知プログラム

担当:鈴木・坂下

subprocessモジュールを用い、ターミナルからaplayとOpenJTalkで音声をしゃべらせる。また、スピーカのスタンバイスイッチピンのON/OFFも行う。

また、この製作内容にはsound.pyxが該当する。

Arduinoプログラム

担当:鈴木

標準プログラムからの変更点は、通信機能を別スレッドとしたこと、左右のモータの速度値を個別に制御する機能と、半径を指定し、円周状に曲がる機能を追加したことである。
センサ値の送信を常に行うようにし、通信モジュールをマルチスレッドとする予定だったが、マルチスレッドの実現に用いたSchedulerライブラリが割り込みと相性が悪く、Arduinoが制御不能に陥る事態が多発したため、最終的にはマルチスレッドはとりやめ、10回loop()が実行されるごとに通信を行う方式に変更した。

PICプログラム

担当:鈴木

静電容量式タッチセンサとして、電極にユーザが触れているか触れていないかの判定を行う。

完成度の評価

標準プログラム

早期から試作をしていたので、完成度は高く、標準プログラムにあった機能はすべて実装できた。

マルチタスクプログラム

ttaskモジュールは、早期から試作しており、周期実行の機能を実装できた。
ptaskモジュールは、必要に迫られ急に製作したので、バグがかなり残っていると思われる。 しかし、まれに終了しないなどの不具合を除けば安定動作し、必要な機能はすべて実装できた。

走行

壁追従走行、交差点を曲がる、交差点を直進する動作は実装できた。
また、前方障害物検知、段差検知および状態遷移は実装することができた。
それぞれ左壁・右壁、両方で動作した。
しかし、予定していたすべての動作は実装できなかった。実装できなかった動作は、障害物回避動作、段差対応動作、左右の壁変更動作である。

音声通知

各状態に対応する音声ファイル再生メソッドを作成したのは非効率的であった。
それ以外は予定通りの動作をしたため、完成度は高いといえる。

Arduinoプログラム

マルチスレッドでの実装はできなかったが、早期から試作をしていたため、それ以外の機能はすべて実装できた。
しかし、Arduino Dueが認識できなくなるなどの原因不明の不調や、前述したSchedulerのバグにより、多くの時間を割いてしまった。

PICプログラム

予定していた機能をすべて実装することができた。また、閾値の調整もうまくいき、ほぼ完璧に認識したので完成度は高いといえる。

詳細設計書へのリンク

ソフト詳細設計書へのリンクを以下に示す。

使用したプログラムへのリンク

使用したプログラムへのリンクを以下に示す。なお、PICプログラムはMPLABXのプロジェクトディレクトリのzipで、それ以外はGitHubへのリンクである。

総括

標準プログラムのpythonへの移植は早い時期に終わったが、マルチタスクまわりの設計が甘く、大きな設計の変更を余儀なくされた。。
走行モジュールは設計に時間をかけすぎたため、完成度がとても低かったが、条件分岐などの実装はスムーズにできた。
全体としては、走行モジュール以外のところではうまくいったが、肝心の走行モジュールの設計に時間をかけすぎたほか、 班員にインフルエンザが流行したことによる人手不足もあって、走行モジュールの製作に取り掛かるのが遅くなりすぎてしまい、かなり完成度が低くなってしまった。