クラス図を使ってロボットの構造を把握しよう

2009年6月17日(水)
久保秋 真(くぼあき しん)

やりたいことはプログラマーが知っている

 前回は、教育用レゴ マインドストームNXTを使って製作したロボットを動かすためのプログラムを作成しました。光センサーによって黒いラインをトレースしたり、タッチセンサーの入力によって走行を停止したりできるようになりました。このロボットならば、規模がさほど大きくないこともあって、前回のようなプログラムの作り方でも、いろいろなことを試せそうです。

 ここで重要なポイントがあります。それは、私たちがロボットを組み立てながらロボットの構造や動作について把握していたことです。

 例えば、ロボットを前進させるためには左右のモーターが正回転すれば良いこと、また、黒いラインの上にロボットがいるときには光センサーがそのラインの上部にあることなども私たちは知っています。そして、この知識を使ってプログラムを作成していました。

 言い換えれば、この知識は私たち「プログラムを作った人の頭の中」にあって、プログラム自体はこの知識を保持していないのです。つまり、これまでのプログラムは、動いたとき何が起こるのか書いた人にしか分からないプログラムなのです。

 このことを確認してみましょう。前回作ったプログラムを少し詳しく見てみます。例えば、ライントレースを実行する部分は次のようなコードでした。

  if(ecrobot_get_light_sensor(NXT_PORT_S3)    //明るいとき
   ecrobot_set_motor_speed(NXT_PORT_B, 50);
   ecrobot_set_motor_speed(NXT_PORT_C, 0);
  }else{
   //暗いとき
   ecrobot_set_motor_speed(NXT_PORT_B, 0);
   ecrobot_set_motor_speed(NXT_PORT_C, 50);
  }

 ここでやりたかったことは、

(A)ロボットがラインの上にいないときは左に曲がり、ラインの上にいるときは右に曲がる

ということですよね。
では、今度はコードをそのまま読んでみてください。

(B)3番ポートのライトセンサーの値がしきい値より小さいときはセンサーの下の色が明るいときで、そのときはBポートのモーターを出力50で正回転させ、Cポートのモーターは停止する。しきい値以上のときは暗いときで、Bポートのモーターは停止し、Cポートのモーターを出力50で正回転させる。

といったところでしょうか。

プログラムをわかりやすく把握するためには?

 「え、それで問題ないでしょ。どこが問題なの?」という方もいるでしょう。まあ、もう少しよく見てみましょう。(A)に書いてあるのはロボットにやらせたいこと。(B)に書いてあるのは、このロボットに付随するデバイスをどのように制御するかということです。

 上のプログラムには(B)にあたるとこしか記述されていませんね。要するに、このプログラムには、ロボットを(B)のように動かせとしか書いていないのです。(B)のように動かすと(A)のような動作になるという前提がわかっている人たちにしか、このプログラムを理解することはできないのです。

 この例であげているロボットとプログラムはまだまだシンプルなもので、しかも私たち自身がロボットを組み立てているため、(A)と(B)の関係を「私たちの頭の中」に構築しておくことでプログラムと実際の動作のつじつまを合わせることができました。

 しかし、ロボットがもう少し複雑な構造を持っていたり、もっと複雑な動作をさせたい場合、あるいはたくさんの人でプログラムを開発する場合には、より複雑な知識を「みんなの頭の中」で同じように構築しておく必要が出てくるのではないでしょうか。

 今の書き方のままでは、ロボットがどのように動作するのかについて理解するのが徐々に難しくなってくると思います。

著者
久保秋 真(くぼあき しん)
株式会社アフレル
メーカー系ソフト開発会社などを経て、2007年より(株)アフレルに勤務(http://www.afrel.co.jp)。教育用レゴ マインドストームを活用した技術研修の開発と指導に従事。研修の講師として全国を飛び回る毎日。ETロボコン、MDDロボットチャレンジではモデル審査員を務める。早稲田大学理工学術院非常勤講師、日本大学生産工学部非常勤講師。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています