ロボジョイちゃれんじ教室

7-1 モーター制御入門

第1回「速度を自動調節できるロボット」


◆決まった速度で走るロボット

「パワーコントロールは角速度コントロールである」ことを裏付けてみましょう。
モーター1個とインテリジェントブロックNXTだけで最小限のロボットを作ってみました。モーターはポートAに接続しています。

まずは速度制御に必須の情報となる「タイヤの円周」を求めます。 写真のように巻尺で計ってみたところ、円周は「18cm」でした。ただし、巻尺自体の厚みが加わってしまうので、少し正確ではありません。

円周は計算で求めることもできます。
直径×円周率=円周ですから、このタイヤは直径が56mmだとすると、56×3.14=175.84mm。四捨五入して176とすると、 17.6cmということになります。 巻尺で計るよりは正確だと思います。

前置きが長くなりましたが、こうしてできたプログラム(program-4.rbt)がこちらです。 指定した速度でロボットを走らせることができるというプログラムです。

プログラムの重要部分を拡大してみました。
プログラムの仕組みは単純で、パワーコントロールを使って、一定のパワーでモーターを回転させているだけです。
パワーコントロールをオンにすると、角速度が一定に保たれるので、ロボットの速度が固定されます。
写真の部分は、パワーを決定するための計算ブロックです。移動速度(単位はcm/秒)をモーターの角速度に換算して、さらにパワーに換算しています。変数「tyre」にはタイヤの円周が格納されています。
計算の最後に「9.73」で割っていますが、その理由は次の写真をご覧ください……。

……「9.73」という数値は先のプログラム(Program-2.rbt)から求めた値です。パワー「75」でモーターを回したさいに、モーターが「約730度」回転していましたので、730÷75=9.733....これがパワー1つあたりの角速度という定数として使うことができるのです。
再現したい角速度を9.73で割ると、モーターに必要なパワーを求めることができます。

では、実際にプログラムを実行してみましょう。
ここでは、「NXTスピードメーター」という自作の測定器を使ってロボットの移動速度を計測してみたいと思います。この「NXTスピードメーター」は2つ光センサーを搭載していて、センサーを通過した時間の差から物体の速度を求めることができます。

プログラムを実行すると、液晶画面に指定する速度が表示されます。ここで「右」「左」ボタンを押すと、速度を変更できます。速度の単位は「cm/秒」です。
「決定」ボタンを押すと、必要なパワーが算出されて、モーターが回転し始めます。
たとえば、移動速度を25cm/秒と選択すると、パワーは52.555と算出されました。

実際にロボットを走らせてみました。ロボットは80cm進むと止まります。
指定した速度が「25cm/s」だったのに対して、実測した速度が「25.2cm/s」でした。 なんと、1%未満の誤差で再現できました。
他にも「10cm/s」や「30cm/s」などの速度も試してみましたが、ほとんどそのままの速度を再現することができました。
大成功です。
パワーコントロール機能が速度コントロールとして使えることを証明することができました。

ただし、プログラムには限界があるようです。
ある速度を超えると、理想と現実にズレが生じてきてしまいます。 ここでは、「50cm/s」と設定したつもりが、実測では「40.7cm/s」となってしまいました。モーターの角速度が足りてません。

なぜ速度が足りないかというと、算出されたパワーが100を超えてしまったからです。
ひとつ前に実験したプログラム(program-3.rbt)ではパワーが90を超えたあたりから、 角速度が上限に達していましたが、 これがモーターを動かせるハードウェア的な限界のようです。
これ以上速く走らせるためには、ハードウェアの改造が必要となります(タイヤの直径を大きくするとか、加速ギヤを取り付けるとか、、、)。
最速のロボットを目指してみるのも面白そうです。