自動追従ライントレースシステムを題材に「モデル駆動開発」について解説。まずは、モデリングと解析・検証から
前回「組み込みシステム開発における“モデル”とは?」では、組み込みシステムに登場する2つのモデル ―ソフトウェアと制御― について紹介しました。本連載では、簡単な組み込みシステムを作りながら、実際にこの2つのモデルを使っていきたいと思います。
まず、今回と次回は“ソフトウェアの世界のモデル”に着目し、「モデル駆動開発(MDD:Model Driven Development)」を進めていきます。今回は、前回示したプロセス図のうち、「モデリング」と「解析・検証」の一部に当たる部分を解説していきます(図1)。
本連載で開発するシステムは、ラインに沿って走行する車両型システムです。単にラインに沿って走るだけではなく、何かに追従しながら自律的に走るシステムとします。本連載では、このシステムを「自動追従ライントレースシステム」と名付け、超音波を用いて、ある一定距離を保ちながら走行させることと、普通走行の実現を目指します。
はじめに、自動追従ライントレースシステムの開発に必要なモノを整理しておきましょう。
自律的に走る車両を作るために、今回は「教育用レゴ マインドストームNXT」を使います。また、車両制御ソフトウェアのプログラミングには、C言語を用いることにします。さらに、ソフトウェアの世界のモデルは「UML(Unified Modeling Language)」で記述することとし、UML図の記述にはモデリングツール「astah*」を利用することにします。
教育用レゴ マインドストームNXTには、プログラミング可能な32ビットCPUのARM7が搭載された「インテリジェントブロックNXT」のほか、「インタラクティブサーボモータ」が3つ、「光センサ」が1つ、「タッチセンサ」が2つ、「超音波センサ」が1つ、「音センサ」が1つ含まれており、これらを使えばちょっとした自律型のシステムを簡単に作ることができます。教育用レゴ マインドストームNXTは、比較的手軽に入手しやすく、品質的にも安定しているので実験にはもってこいです(図2)。
今回の車両は、教育用レゴ マインドストームNXTの基本キットに入っている組み立て図を参考にして、「ホッケーロボット」と呼ばれるロボットをベースにちょっと改良を加えたものを使用します(図3)。
教育用レゴ マインドストームNXTをC言語で制御するために、今回は「nxtOSEK」という環境を使います。nxtOSEKは、教育用レゴ マインドストームNXTのデバイスを制御するための「I/Oドライバ」や、TOPPERSプロジェクトの成果物の1つ「TOPPERS/ATK1(旧:OSEK)」をNXT内蔵の「ATMEL AT91SAM7S256」に移植したRTOS(Real Time Operating System)から成り立っています。
必要なファイルのダウンロードや設定は、以下のWebサイトが参考になります。
参考URL: | |
---|---|
⇒ | nxtOSEKのインストール |
今回使用するソフトウェア開発環境の構築は、このWebサイトの「nxtOSEKのインストール(Windows XP/Vista)」の「拡張NXTファームウェア+nxtOSEKのインストール方法」を参考に進めてください。
astah*は、ソフトウェア開発で活用されているUMLやER図などを作成するための設計支援ツールです。今回は、チェンジビジョンが提供する「astah* professional」を使って、モデルを作成していきます。なお、ユーザー登録をすると、astah* professionalの20日間評価ライセンスを取得できます。
環境の準備が整いましたので、ここから本題に入ります。まずは、モデルを用いて自動追従ライントレースシステムの要件を整理していきます。それでは、UMLのダイヤグラムの1つ「ユースケース図」を書いてみましょう(図4)。
また、各ユースケースで「どのようなことをするのか」について、表1のようにまとめてみました。
ユースケース名 | 基本フロー |
---|---|
追従走行する | 1.利用者は、スタートスイッチを押下する 2.システムは、対象物の距離を保ちながら線に沿って走る |
通常走行する | 1.利用者は、走行切り替えスイッチを押下する 2.システムは、線に沿って走る |
停止する | 1.利用者は、停止スイッチを押下する 2.システムは、停止する |
表1 各ユースケースで「どのようなことをするのか」(1) |
ユースケース図を記述したことで、自動追従ライントレースシステムは「停止する機能」「追従走行する機能」「通常走行する機能」を提供するシステムであることが整理できました。ユースケース図の記述は、システムがどのような機能を提供するものなのかをきちんと整理するのにとても有効です。
自動追従ライントレースシステムが提供する機能について整理できましたので、次は「どうやってその機能を提供するのか」を考えていきます。まず、開発のターゲットとなるハードウェアと、それを制御する環境について整理しましょう。
教育用レゴ マインドストームNXTで作られた車両は、モータが2つ、超音波センサが1つ、光センサが1つ、タッチセンサが1つで構成されています。今回、モータはAとCの出力ポートに、超音波センサは4番の入力ポートに、光センサは3番の入力ポートに、タッチセンサは1番の入力ポートにつなげることにします(図5)。
nxtOSEKは、モータやセンサを動かすためのC言語APIを含んでいます。そのため、各デバイスを動かすためのプログラムは“開発済みである”といえます(つまり、開発の対象外とします)。これらのAPIを利用することで、超音波センサからは対象物までの距離を、光センサからは対象物の明るさを数値で取得できます。さらに、タッチセンサからは押されているか離れているかを取得できます。
使用するハードウェアと開発環境を基に、自動追従ライントレースシステムを次のように実現することにしました。
ここまでの内容を踏まえ、開発範囲を再度検討した結果、以下のようなユースケース図となりました(図6)(表2)。
ユースケース名 | 基本フロー |
---|---|
追従走行する | 1.利用者は、タッチセンサを押下する 2.ソフトウェアは、タッチセンサの押下を認識する 3.ソフトウェアは、超音波センサの情報を基に対象物との距離を保ち、さらに光センサから得られる明るさを基に、左右の駆動モータを動かす |
通常走行する | 1.利用者は、タッチセンサを押下する 2.ソフトウェアは、タッチセンサの押下を認識する 3.ソフトウェアは、光センサから得られる明るさを基に、左右の駆動モータを動かす |
停止する | 1.利用者は、停止ボタンを押下する 2.ソフトウェアは、停止ボタンの押下を認識する 3.ソフトウェアは、左右の駆動モータを停止する |
表2 各ユースケースで「どのようなことをするのか」(2) |
Copyright © ITmedia, Inc. All Rights Reserved.