8月30日 ほのちゃんが歩いた。なかなか歩かない長女(3人目の子供)のことを父と母は、それほど深刻ではなく、3人目なりに心配していた。1才10カ月にあと数日に迫った8月末にいきなりトコトコと十数歩、歩いた。「立てば歩め」の親心というが、小さな成功が本当に嬉しく感じられる。人間のように歩行するロボットを開発したHONDAのエンジニア達も、P3が歩いた時は我が子のことのように嬉しかったであろう。P3は階段を昇り降りできるが、ほのちゃんにはもう少し時間が必要である。こうしろうの『NQCプログラミング』もまだまだよちよち歩きだ。

9月2日 「今日は、変数の勉強をしてみよう」とこうしろうに話しかけて、以前書いた書籍で変数の説明の書き出しを『変数とは変な数ではありません』と始めたことを思い出して、ひとり苦笑してしまった。

 「前回は定数を使ってみたね。定数は決まった値に名前をつけて、それをプログラムの中で使うんだったね。変数はね、プログラムの中で値を変えられるんだ。」と説明して、無限軌道車をらせん状に動かすプログラムを私が入力した。



#define TURN_TIME 85
int move_time;
task main()
{
 move_time = 20;
 repeat(20)
 {
  OnFwd(OUT_A+OUT_C);
  Wait(MOVE_TIME);
  OnRev(OUT_C);
  Wait(TURN_TIME);
  move_time += 5;
 }
 Off(OUT_A+OUT_C);
}

defineで定数定義してあるTURN_TIMEは約90度曲がるための時間だ。前回、この値は160だったが、電池を替えたので85で十分になった。move_timeが変数である。

 「こうしろう、変数には型があるんだ。型によって、使用するメモリの大きさが違うんだ。」といきなり難しいこと言い出した父を、こうしろうはこんな顔(-_-;)で見ている。「まあ、NQCの場合はint(integer)、つまり整数しか使えないんだけどね。」まず、変数move_timeに、「move_time = 20」で初期値を与えて、repeatの中を繰り返すたびに、「move_time += 5」で5ずつ増加させている。直進する時間が徐々に増えていくので、無限軌道車はらせんを描く。「+= は足し算で、同じように引き算は -=、掛け算は *=、割り算は /= だ。変数は値の計算に使えるんだ。」、「掛け算の『*』ちゃどれけ?」とこうしろう。どうも記号が覚えにくいらしい。メール等で日本語はかなり打ちなれているこうしろうであるが(最近は九州の方に住む高校生とメール交換をしている)、記号には和名が無いせいか、『アスタリスク、スラッシュ』などがピンとこないようだ。

 次に、無限軌道車をジグザグに動かすプログラムを作ってみた。

/*
 zigzag  2000/09/02
*/
#define TURN_TIME 40
#define MOVE_TIME 60
int kaisu;
task main()
{
 kaisu = 0;
 repeat(20)
 {
  OnFwd(OUT_A+OUT_C);
  Wait(MOVE_TIME);
  if(kaisu == 0)
   {
    OnRev(OUT_C);
    Wait(TURN_TIME);
    kaisu = 1;
   }
  else
  {
    OnRev(OUT_A);
    Wait(TURN_TIME);
    kaisu = 0;
   }
 }
 Off(OUT_A+OUT_C);
}

変数kaisuの値によって反転させるモーターを変え、正確ではないがジグザグにロボットを動かしている。「kaisuが0の時はモーターCを反転させkaisuを1にしている。そして、kaisuが1の時はモーターAを反転させkaisuを0にしているわけだ。こんな風に変数はスイッチとしても使えるんだよ。」ジロジロと目を上下させプログラムを見渡してから、こうしろうは「うん」と言った。

 次に乱数を勉強した。アルベルト・パラシオス・パウロブスキ博士訳のテキストを見ながら、下記のプログラムをこうしろうが打ち込んだ。

/*
 Random  2000/09/02
*/
int move_time, turn_time;
task main( )
{
 while(true)
 {
  move_time = Random(200);
  turn_time = Random(120);
  OnFwd(OUT_A+OUT_C);
  Wait(move_time);
  OnRev(OUT_A);
  Wait(turn_time);
 }
}

Random関数は引数に指定された数値を上限として乱数を発生させる(下限は0)。「実行するたびに乱数の値は変わるんだよ。」と説明しても、もうひとつ飲み込めていないこうしろうであったが、実際に無限軌道車の不規則な動きを目の当たりにすると理解できたようだ。「変数と乱数を使うとロボットの動きを変化させることができるんだよ。」と本日のNQCのお勉強を締めくくった。