連載
» 2010年06月29日 00時00分 UPDATE

体験! MBD&MDDによる組み込みシステム開発(4):制御の世界のモデルベース開発とは? (1/2)

簡単な制御モデルを使って“制御の世界”の開発プロセスを解説。また、モデリングで使用するツールについても紹介!!

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

 前回までの連載で、ソフトウェア開発の世界で「どのようにモデルが使用されるのか」という話をしてきました。ソフトウェアのモデルを使用して、システム内部の振る舞いや状態遷移など、システムのフレーム部分が出来上がっていくプロセスが分かっていただけたかと思います。しかし、まだ肝心の“実際の動き”の部分の精度が上がっていません。この“実際の動き”の部分の精度を上げ、システムとして作り上げていくには、“制御の世界のモデル”を使用することになります。

 制御の世界には、“実際の動き”を作り上げていくのに有用な「モデル」「プロセス」「ツール」がそろっています。ただ、ソフトウェア開発者にとって制御の世界のハードルは高いものです。

 今回は開発の前段階として、簡単な制御モデルを使って制御の世界の開発プロセスを一通りなぞって、開発のイメージをつかんでもらいたいと思います。その後で、本連載で使用するツールについて紹介したいと思います。

モデルベース開発

 制御の世界のモデルを使った開発――モデルベース開発――のプロセスは、図1のようになります。

モデルベース開発プロセス 図1 モデルベース開発プロセス

 まず、制御対象をモデリングします。モデリング手法には、「ホワイトボックス」「ブラックボックス」「グレーボックス」の手法があることは、以前に述べたとおりです。次のプロセスでは、対象を制御するための制御コントローラの設計を行います。この2つのプロセスは制御モデルを使用して行われ、開発の“キモ”となります。いわゆる制御系の開発者は、ここに心血を注ぐといってよいでしょう。

 次に、制御モデルを基にシミュレーションなどを行い、机上でコントローラの検証を行います。机上で検証できるというのがモデルベース開発の素晴らしいところです。そして最後に、モデルをコードに落として実地テストを行います。プロセス自体は、前回までのソフトウェアの世界のモデル駆動開発と基本的には同じですね。

 では、早速モデルベース開発のイメージをつかむために、簡単な例で開発プロセスをたどってみましょう。

「モデリング」「コントローラ設計・解析」プロセス

 これらのプロセスは開発のキモですが、本稿では全体の開発プロセスの大まかなイメージをつかむことが主目的ですので、あらかじめモデリングされたものを使って説明します。

 まず、図2にこれらのプロセスのアウトプット例として「DCサーボモータ」の制御コントローラを制御モデルで書いてみました。

PIDを使ったモーターコントローラ 図2 PIDを使ったモーターコントローラ

 見てのとおり、制御モデルは制御システムを表す「ブロック線図」となります。この例ですと、後半部分(図2右側)がモデリングプロセスのアウトプットである「制御対象」で、モーターの出力部を表しています。そして、前半部分(図2左側)が制御コントローラ設計のアウトプットである「制御コントローラ」で、モーターの出力をフィードバック制御するためのPIDコントローラを表しています。モデリング、コントローラ設計プロセスのアウトプットが何となくイメージできたと思います。

 さて、プロセスを次に進めるために、もう少しかみ砕いた制御モデルを使用することにしましょう。図3に簡単な制御モデルを書いてみました。

今回使用する簡単なサンプルモデル 図3 今回使用する簡単なサンプルモデル

 これは、入力に「1」を取り、周期ごとに値を積算し、定数「2.5」を乗じた値を出力するための制御モデルです。これを使って先に進んでいきましょう。なお、制御モデルのノーテーション(表記法)とセマンティクス(意味)については後ほど簡単に説明します。

「検証」プロセス

 図3で作った制御モデルが狙いどおりに動作するかを検証します。モデルベース開発は、机上でのシミュレーションが行えるところが大きな特長であり、メリットです。なお、本連載では後述する「Scicoslab」というツールを使ってシミュレーションを実行し、出力結果を確認します。

 以下、図4がシミュレーション結果となります。

サンプルモデルのシミュレート結果 図4 サンプルモデルのシミュレート結果

 入力「1」が周期ごとに(周期は1sec)積算されて、その積算値に定数「2.5」を掛けた値が出力になっているのが分かると思います。この制御コントローラが狙いどおり、正しく動作していることが机上で確認できました。

「実装・テスト」プロセス

 シミュレーションの結果、どうやら制御コントローラは狙いどおりに動いてくれそうです。今度はこの制御モデルを実際に動かすために実装していきます。

 本稿では、C言語で実装していくことにします。制御モデルの説明をしながら進めていきますので、図5をご覧ください。

ブロックの説明 図5 ブロックの説明

 まず、左端の「1」というブロックですが、これは入力が「1」という意味です。円の中心に「+」と書かれた記号は飛ばして、次の「1/z」は1周期前の値という意味です。その先の矢印が円の中心に「+」と書かれた記号に戻っています。これは加算するという意味なので、入力の「1」と前回値を足したものになります。最後に三角の中に「2.5」と書かれたブロックがありますが、これは「ゲイン」といわれるもので、ここに定義してある値を乗じるブロックとなります。つまり、積算値に2.5を掛けた値が最終的な出力となります。

 このように制御モデルを解釈し、実装した結果は図6のようになります。

#define GAIN(2.5)
int prev_value = 0;
float sample(int input_value)
{
    int value = 0;
    value = input_value + prev_value;
    prev_value = value;
    return value * GAIN;
}
図6 サンプルモデルのコード

 要は演算処理です。ここで使用している制御モデルはとても簡単なものですが、実際のシステムの制御モデルもこれと同じように結果的には演算処理を表すものとなります。ソフトウェア開発者から見るとただの演算処理ですが、これが“実際の動き”には欠かせない処理となるのです。

 では、実地テストの体(てい)で、実装したコードをコンパイルし、実行させてみましょう。実行結果は図7のようになります。

Cコードの実行結果 図7 Cコードの実行結果

 シミュレーションと同じ結果が得られて、「実装・テスト」は無事完了です。以上が、制御の世界のモデルベース開発の大まかな流れとなります。

ツールが欠かせない! 制御の世界のモデルベース開発

 制御モデルを使用した、モデリング・コントローラ設計・シミュレーションですが、今回のような簡単なサンプルを使った例であってもツールを使用しました。モデルベース開発では、ツールの存在は欠かせません。ツールなしには机上シミュレーションはできませんし、それ以外にもツールは開発に有用な機能を提供してくれます。また、最近のツールでは状態遷移を表現できたり、ソフトウェア開発者が作った制御とは無縁のコードをリバースして制御モデルに変換したりできます。制御系の開発者が使うツールはソフトウェアの世界の方にも広がってきています。将来ソフトウェア開発者の居場所が窮屈になる日も来るかもしれませんね。

 さて、次回から本格的に教育用レゴマインドストームNXTを使った「自動追従ライントレースシステム」の“動き”の部分をモデルベース開発で進めていくわけですが、そのためにはツールが必要です。そこで、本稿ではフリーウェアのScicoslabというツールを使用することにします。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.