連載
» 2010年04月20日 00時00分 UPDATE

体験! MBD&MDDによる組み込みシステム開発(2):ソフトウェアのモデル駆動開発にチャレンジ! (1/2)

自動追従ライントレースシステムを題材に「モデル駆動開発」について解説。まずは、モデリングと解析・検証から

[軽部 禎文(アフレル)、藤井 律行(永和システムマネジメント),@IT MONOist]

超音波を使った走行制御

 前回「組み込みシステム開発における“モデル”とは?」では、組み込みシステムに登場する2つのモデル ―ソフトウェアと制御― について紹介しました。本連載では、簡単な組み込みシステムを作りながら、実際にこの2つのモデルを使っていきたいと思います。

 まず、今回と次回は“ソフトウェアの世界のモデル”に着目し、「モデル駆動開発(MDD:Model Driven Development)」を進めていきます。今回は、前回示したプロセス図のうち、「モデリング」と「解析・検証」の一部に当たる部分を解説していきます(図1)。


ソフトウェアのモデル駆動開発プロセス 図1 ソフトウェアのモデル駆動開発プロセス
(※赤枠が今回の範囲)

 本連載で開発するシステムは、ラインに沿って走行する車両型システムです。単にラインに沿って走るだけではなく、何かに追従しながら自律的に走るシステムとします。本連載では、このシステムを「自動追従ライントレースシステム」と名付け、超音波を用いて、ある一定距離を保ちながら走行させることと、普通走行の実現を目指します。

開発に使うモノ

 はじめに、自動追従ライントレースシステムの開発に必要なモノを整理しておきましょう。

 自律的に走る車両を作るために、今回は「教育用レゴ マインドストームNXT」を使います。また、車両制御ソフトウェアのプログラミングには、C言語を用いることにします。さらに、ソフトウェアの世界のモデルは「UML(Unified Modeling Language)」で記述することとし、UML図の記述にはモデリングツール「astah*」を利用することにします。

「教育用レゴ マインドストームNXT」について

 教育用レゴ マインドストームNXTには、プログラミング可能な32ビットCPUのARM7が搭載された「インテリジェントブロックNXT」のほか、「インタラクティブサーボモータ」が3つ、「光センサ」が1つ、「タッチセンサ」が2つ、「超音波センサ」が1つ、「音センサ」が1つ含まれており、これらを使えばちょっとした自律型のシステムを簡単に作ることができます。教育用レゴ マインドストームNXTは、比較的手軽に入手しやすく、品質的にも安定しているので実験にはもってこいです(図2)。

教育用レゴ マインドストームNXT 図2 教育用レゴ マインドストームNXT
※教育用レゴ製品の正規代理店であるアフレルで取り扱っています

 今回の車両は、教育用レゴ マインドストームNXTの基本キットに入っている組み立て図を参考にして、「ホッケーロボット」と呼ばれるロボットをベースにちょっと改良を加えたものを使用します(図3)。

ホッケーロボ(改) 図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*」

 astah*は、ソフトウェア開発で活用されているUMLやER図などを作成するための設計支援ツールです。今回は、チェンジビジョンが提供する「astah* professional」を使って、モデルを作成していきます。なお、ユーザー登録をすると、astah* professionalの20日間評価ライセンスを取得できます。

要件の分析

 環境の準備が整いましたので、ここから本題に入ります。まずは、モデルを用いて自動追従ライントレースシステムの要件を整理していきます。それでは、UMLのダイヤグラムの1つ「ユースケース図」を書いてみましょう(図4)。

自動追従ライントレースシステムのユースケース図(1) 図4 自動追従ライントレースシステムのユースケース図(1)

 また、各ユースケースで「どのようなことをするのか」について、表1のようにまとめてみました。

ユースケース名 基本フロー
追従走行する 1.利用者は、スタートスイッチを押下する
2.システムは、対象物の距離を保ちながら線に沿って走る
通常走行する 1.利用者は、走行切り替えスイッチを押下する
2.システムは、線に沿って走る
停止する 1.利用者は、停止スイッチを押下する
2.システムは、停止する
表1 各ユースケースで「どのようなことをするのか」(1)

 ユースケース図を記述したことで、自動追従ライントレースシステムは「停止する機能」「追従走行する機能」「通常走行する機能」を提供するシステムであることが整理できました。ユースケース図の記述は、システムがどのような機能を提供するものなのかをきちんと整理するのにとても有効です。

実現方法

 自動追従ライントレースシステムが提供する機能について整理できましたので、次は「どうやってその機能を提供するのか」を考えていきます。まず、開発のターゲットとなるハードウェアと、それを制御する環境について整理しましょう。

 教育用レゴ マインドストームNXTで作られた車両は、モータが2つ、超音波センサが1つ、光センサが1つ、タッチセンサが1つで構成されています。今回、モータはAとCの出力ポートに、超音波センサは4番の入力ポートに、光センサは3番の入力ポートに、タッチセンサは1番の入力ポートにつなげることにします(図5)。

 nxtOSEKは、モータやセンサを動かすためのC言語APIを含んでいます。そのため、各デバイスを動かすためのプログラムは“開発済みである”といえます(つまり、開発の対象外とします)。これらのAPIを利用することで、超音波センサからは対象物までの距離を、光センサからは対象物の明るさを数値で取得できます。さらに、タッチセンサからは押されているか離れているかを取得できます。

教育用レゴ マインドストームNXTのパーツとパーツに対応するAPI 図5 教育用レゴ マインドストームNXTのパーツとパーツに対応するAPI

 使用するハードウェアと開発環境を基に、自動追従ライントレースシステムを次のように実現することにしました。

  • タッチセンサを押すと追従走行を開始
  • 追従走行は、追従対象までの距離を超音波センサで計測しながら、ある一定の追従距離を保つようにして走行する
  • 追従走行中にタッチセンサを押すと、通常走行になる

 ここまでの内容を踏まえ、開発範囲を再度検討した結果、以下のようなユースケース図となりました(図6)(表2)。

自動追従ライントレースシステムのユースケース図(2) 図6 自動追従ライントレースシステムのユースケース図(2)
ユースケース名 基本フロー
追従走行する 1.利用者は、タッチセンサを押下する
2.ソフトウェアは、タッチセンサの押下を認識する
3.ソフトウェアは、超音波センサの情報を基に対象物との距離を保ち、さらに光センサから得られる明るさを基に、左右の駆動モータを動かす
通常走行する 1.利用者は、タッチセンサを押下する
2.ソフトウェアは、タッチセンサの押下を認識する
3.ソフトウェアは、光センサから得られる明るさを基に、左右の駆動モータを動かす
停止する 1.利用者は、停止ボタンを押下する
2.ソフトウェアは、停止ボタンの押下を認識する
3.ソフトウェアは、左右の駆動モータを停止する
表2 各ユースケースで「どのようなことをするのか」(2)

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.