TOPシステム開発> 第4回:リソース制約対応とプログラム開発管理 (1/3)

LEGOから学ぶ組み込みシステム開発のキホン

LEGOから学ぶ組み込みシステム開発のキホン

第4回:リソース制約対応とプログラム開発管理

著者:日本ビクター株式会社 山岸 亨

公開日:2008/04/09(水)

リソースの制約に挑む

組み込みシステムでは、さまざまなリソースの制約があるケースが多い。遅いCPUを使いギリギリのRAM、ROM容量で、アイデアを駆使して何とかシステム要求を満たすプログラムを作る。ところがハードウェアの問題があり、それをプログラムでカバーするということもある。

FLLにおいてもさまざまな制約がある。これはルール上の制約によるものと、RCXそのものの制約によるものと大きく2つに分かれる。

ルール上の制約は「第1回:これがLEGOのロボット競技会FLLだ!」でも書いた電子部品の数の制約である。コントローラは1つ、モーターは3つ、タッチセンサ2つ、光センサ2つ、回転センサ3つ、ランプ1つである。これらはアタッチメントに搭載している数も含まれるので、競技時間中に使うすべての電子部品の総数という意味合いである。

一方RCXそのものの制約も大きい。一番大きいのはプログラムの数が5つしか搭載できないことである。FLL2006の場合のミッションは9個であり、年によってはもっと多いので、1つのプログラムで複数のミッションをクリアすることが求められる。これに対処する方法としてはさまざまなものが考えられるが、代表的な例をここでは2つ紹介する。

1つ目はベースから出て行って、戻るまでに複数のミッションを一度にこなすことである。これは個々のミッションに依存するので、ここでは特に取り上げないが、複数のミッションの内で距離的に近いもの、あるいは位置関係が直線上にありアクセスしやすいもの、さらにはベースから遠い場所にあるものはまとめてクリアするなどの工夫である。

2つ目は1つのプログラムで複数のミッションを切り替える方法である。実際には、タッチセンサを使って行う。図1にタッチセンサを使ったプログラムの切替えのフローチャートを示す。単純なプログラムであるが、スタートボタンを押す時に同時に、タッチセンサを使ったスイッチを押しているか否かで動作を変える。

押していない時にはミッションAのサブプログラムを実行する。スイッチを押している時には、音を鳴らす。これは押したことをロボットが認識したかどうかを確実に操作者が分かるようにするためである。FLLにおいては、2分30秒という限られた時間の中で、次はどのミッションを行うかをその時までの成功・失敗の状況に応じて、操作者が複雑な判断をしながらこなす必要がある。このためこういった、ある意味フェイルセーフ的な作りが重要になる。音が鳴ったら操作者はスイッチを押す指を離し、ミッションB用のサブプログラムが実行される。

なお、RCXの入力ポートは3つしかないが、光センサとタッチセンサは1つの入力ポートに並列に接続できる。この場合RCXには光センサとして認識され、タッチセンサが押されていない場合は光センサの検出値が得られ、タッチセンサが押された場合は光センサの値が100という通常はありえない値になる。この方法を使って使用ポート数の節約をすることができる。

もう1つ大きな制約は、RCXのプログラムの総量の上限が意外と少ないことである。特に注意しなければならないのは、各ミッションを別々のロボットでプログラムを作って練習し、本番の前にいざすべてを1つのロボットに入れて統合しようとすると、メモリ容量が不足して入りきらないというケースである。そのためロボットを作る時には、ミッションを極力メカだけで遂行できるように設計し、単純なプログラムでクリアできるような設計を心がける必要がある。

図1:プログラムの切り替え

プログラムの応答を改良せよ!

この他にもRCXの応答性を改善するためのコツがある。例えば「ROBOLAB 2.9を使う」「Optimizeコマンドを使う」「ループの中の処理を1つでも減らす」「さまざまな記述を試行することにより、ループ時間を比較し最適なものを選択する」などである。特にライントレースなどの応答性を求められるプログラムにおいては、歴然とした差が出る。

FLLでは設計ツールに使用制限があるが、その中で最も応答性に優れているのが「ROBOLAB 2.9」である。従来の「ROBOLAB 2.5.4」よりも応答性が大きく改善されている。モーターが動作する時の音が高い音に変わるのは、より動作の周波数が高くなったからであろう。このROBOLAB 2.9から導入されたOptimizeコマンドは、そのコマンドを実行した後は液晶の表示の更新などをせず、システム動作を最低限とし、できる限りユーザの作ったプログラムにCPUの処理能力を割り当てることを目的としており、常に使うことをお奨めする。

次に留意する点は、ループの作り方である。例えばライントレースでは、ラインの検出とモーターの制御を繰り返し、プログラムとしては、ループを使って制御をする。1回のループを回る時間が短ければ短いほど応答性が良くなる。従ってループをできる限り短時間で回すようなプログラムを書く必要がある。

まずループの中の処理を厳選し、ループ外に出せるような処理はすべて出すことが基本となる。ここは通常のプログラムと同じで初心者はなかなか最適な処理方法に気づきにくい。さらに同じ動作を行うのにいくつか異なるプログラムの書き方があり得る。このプログラムの書き方により実際の実行時間が変わる。内部処理が公開されていないのと、法則性を見出すのが難しいため、どう組むと一番短くなるのかは一概に言えない。実際に色々なプログラムを作って比較するしかない。 次のページ


1   2  3  次のページ


日本ビクター株式会社 山岸 亨
著者プロフィール
日本ビクター株式会社 山岸 亨
1983年東京大学工学部卒。同年日本ビクター(株)入社。以来光ディスク、テレビのICやソフトウェア開発など組込み系開発に携わる。現在技術本部ディビジョン技術開発センターにて国内液晶テレビのソフトウェアの開発に従事。FLLにはチーム「Edisons」のメンターとして参加。2005年度、2006年度と世界大会進出し、特に2006年度欧州世界大会では総合2位を獲得。


INDEX
第4回:リソース制約対応とプログラム開発管理
リソースの制約に挑む
  どの電池を選ぶか?放電特性を考慮せよ
  最新バージョン、最高バージョンを管理するために