自動追従ライントレースシステムにおいて、ソフトウェアとして実現すべき機能が整理できましたので、自動追従ライントレースシステムのソフトウェアを静的な視点で整理し、構造を表す「クラス図」を作成してみましょう。先ほど要件を整理したユースケース図から、次のようなクラス図を導き出しました(図7)。
nxtOSEKから提供されている教育用レゴ マインドストームNXTのハードウェアに対応したAPIなどの情報を基に、「各デバイスを表すクラス」と今回作成したい機能を役割として持った「自動追従ライントレーサークラス」が導き出されています。
今回作成する自動追従ライントレースシステムが、どのように動くのかを明らかにしていきましょう。まず、概念クラス図の中で、システムをコントロールする役割を持った自動追従ライントレーサーの状態に着目して、「ステートマシン図」を記述します(図8)。
今回、自動追従ライントレーサーには、大きく2つの状態があると考えました。スタート待機をする「スタート待機中状態」と、ラインに沿って走行する「走行中状態」です。スタート待機中状態では、タッチセンサが押されるまで走行を開始しません。一方、走行中状態では、タッチセンサを押すたびに、通常走行中と追従走行中を切り替えながら走行します。また、どんなときでも「停止ボタン」が押されると、自動追従ライントレーサーは停止して終了します。
先ほど書いた自動追従ライントレーサーのステートマシン図から、自動追従ライントレーサーの大きな役割を“スタート待機中状態と走行中状態を切り替えること”とし、“通常走行中と追従走行中を切り替える”役割を持った「走行コントローラー」に責務を分担します。さらに、左右の駆動モータをコントロールする責務を持った「駆動コントローラー」を導き出しました(図9)。
先ほど作成したクラス図は、自動追従ライントレースのソフトウェア構造として問題はないでしょうか? 「シーケンス図」を記述して確認してみましょう。
実現したい機能については、ユースケース図で整理できていますが、本来1つ1つのユースケースが実現可能かどうかを検証すべきです。しかし、今回は、このシステムの重要な機能である「追従走行する」「通常走行する」に関係する機能が実現可能かどうかのみシーケンス図を記述して確認していきます(図10)(図11)。
超音波センサから距離を取得して、駆動コントローラーに前進スピードの設定とターンスピードの設定を依頼する。
光センサから明るさを取得して、駆動コントローラーに前進スピードの設定とターンスピードの設定を依頼する。
シーケンス図の記述により、クラス図におけるクラスとクラスの関係や、振る舞いの過不足などはなさそうだということが分かりました。
以上、今回は簡単な自動追従ライントレースシステムを開発することを題材に、ソフトウェアの世界のモデルに注目して、分析と基本設計を行いました。次回は、今回作成したUMLを基に、さらに実装を意識した設計とソースコードの生成をしていきたいと思います。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.