2020.2.12

プログラムの機能や構造の本質に迫る実践的授業「プログラム構成論」

「あーー,もうちょっとだったのに!」
「だめだ! 迷子になってる!」
「よっしゃーー!! ゴールや!」

最後の授業はいつもこんな感じで大騒ぎです.
授業はプログラム構成論.LEGOに搭載された様々なセンサーを使って,最後の授業はライン上をスタート地点からゴール地点までLEGOが自動走行します.その間には曲がり角あり,曲線カーブあり,障害物が2種類もあります.それらを避けながら自動走行するLEGOをJavaプログラムで作成します.

百聞は一見にしかずで,動画をご覧ください.
おしりを振り振りしながら,LEGOが一生懸命ラインを探しつつ前に進んでいます.さらに,障害物にぶつかるとLEGOは「おや?」というように一度停止し,おもむろに障害物をよけるために,いったんバックします.さらに,左折して障害物を通り越したところで,右折します.右折した後は障害物の厚みの幅だけ前進して,厚みを超えるとさら右折して,元のラインに戻ろうと努力します.

難しいのは,もう一つ種類の違う障害物があるということです.下手なプログラムを作ると,一つの障害物は避けることができますが,すこし形の異なる障害物になると,うまく避けられなくなるところです.

さらに,意地の悪い教員は「タイムトライアルです」と宣言します.要するに何とか,ゆっくりと障害物を避けながらゴールに達しても,タイムトライアルですので,他のチームに負けてしまいます.効率良く,正確に,冗長な動きなくスピーディに動くLEGOのJavaプログラムを書く必要があります.

図1をみると,LEGOのどのセンサーを使って,障害物を感知しながら,正確によけるというプログラムのイメージがわくと思います.
  • 図1 障害物を回避するための方法

ただし,いろいろな制約があります.
  1. 1台のLEGOに設置できるセンサーやモータは5個まで
  2. 準備できるセンサーの種類と個数は以下の通り
    ・カラーセンサー 1個
    ・超音波センサー 1個
    ・ジャイロセンサー 1個
    ・タッチセンサー 1個
    ・タイヤモーターセンサー 2個(右用,左用)
これだけいろいろと制約をかけられて,学生は頭をひねりながら,センサーの選択,設置個所の工夫,小さな補助パーツの選択と設置等創意工夫を精一杯発揮します.さらに,センサーから情報を取得し,それに従って動作を変更するJavaプログラムの作成とそのパラメータ値の調整に四苦八苦しながら,最後の授業で「きゃーー!!」「やったぁ!」等の歓声を上げつつ,タイムトライアルに挑戦するという授業です.

LEGOというわかりやすいロボットを使って,センサーからの情報取得プログラム作成方法,モーター等の制御をプログラムで書く方法,さらにセンサーの組み合わせや設置個所等の創意工夫力等が身に付きます.そして何よりも,障害物を回避するための複数のセンサーやモーターの動きと制御を考えるために,論理的思考が身につく授業です.

やはり,数学のように数式で論理的思考を身に着けることもいいですが,ロボットが本当に動くとテンションが上がりますよね! やっていることは数学の論理的思考とあまり変わらないのですがね...

教員も楽しく授業できる科目です.

花川 典子(科目担当)