Skip to main content

プログラミングの複雑さ

ロボットは、さまざまなタスクを実行するように設計できます。 これらのタスクの中には、自動ドアを開けるなど、非常に単純なものもあります。 都市環境を走行する自動運転車のように、はるかに複雑なものもあります。 タスクがどんなに複雑であっても、より単純なタスクに分割することができます。 これらのタスクは動作と呼ばれ、ロボットプログラミングの構成要素となります。

動作とはロボットの行動の仕方であり、ロボットの構築方法やプログラミング方法に応じて複雑さが変わります。 VEX V5 Speedbot のようなシンプルな移動ロボットにはモーターが 2 つしかありませんが、Clawbot には、アームとクロー用の 2 つの追加モーターを含めて 4 つのモーターがあります。 両方のロボットの動作には、設定された目標を達成するためにモーターを回転させることが含まれます。 より多くの設計とプログラミングを行うことで、この単純な動作から始めて、より複雑な動作を行うことができます。

以下は、Speedbot と Clawbot の両方について、単純なものから複雑なものへと増えていくロボットの動作のリストです。 括弧内には、それぞれの動作を構成するより単純な動作が表示されます。

  • 特定のポートに割り当てられたモーターを回転させる

  • 前進する(ドライブトレインを使用して左右のモーターを回転させる)

  • 5メートル進む(前進して停止する)

  • 遠くの物体をつかむ(2メートル移動し、爪モーターを回転させてつかむ)

  • オブジェクトを取得して高い棚に置く (遠くのオブジェクトをつかみ、向きを変え、2 メートル移動し、アームと爪のモーターを使用してオブジェクトを持ち上げて放す)

より複雑な動作をより単純な動作に分解する方法がわかります。 これらは、あらゆる複雑なタスクの構成要素になります。

教師のヒントアイコン 教師のヒント

  • 複雑なロボットの動作を、より小さく単純なステップに分解するように生徒に指導します。 このプロセスは分解として知られています。

  • 複雑な動作をより単純なタスクに分解(細分化)することが、計画とプログラミングの重要な部分であることを生徒に説明します。

  • 授業時間が十分にある場合は、生徒が自主的にプロジェクトを実行できるようにします。

学習を拡張するアイコン 学習を拡張する

このアクティビティを計算的思考と分解に結び付けるために、ロボットが以下のアクティビティを完了するために実行する動作手順をマップまたはリスト化するように生徒に依頼します。

  • アクティビティ 1: 1 メートル移動して開始地点に戻ります。

  • アクティビティ 2: ロボットの 60 cm 前方にある箱をひっくり返します。

  • アクティビティ 3: 物体を拾い、振って 30 cm 移動し、地面に置いて、開始点に戻ります。

ディスカッションを促すアイコン 議論を促す

生徒は、上記の「学習の拡張」のアクティビティでリストした行動手順を共有する必要があります。 以下の各質問は、いずれかのアクティビティまたはすべてのアクティビティの後に尋ねることができます。

質問: 各グループは、このアクティビティを正常に完了するためにどのような手順または動作をリストしましたか?
回答: 生徒は、アクティビティまたはタスクを完了するために必要な単純なロボットの動作 (前進、後進、左折または右折) をリストすることに加えて、ロボットが移動する必要がある距離とアームの動きと速度を考慮する必要があります。 生徒は、各ステップが表現されるように行動リストを作成する必要があります。

質問: このアクティビティのソリューション (手順のリスト) 間の類似点と相違点は何ですか?
回答: 生徒は自分のソリューションに基づいて比較を行います。 ベン図は、生徒が共有する手順を整理するのに適した方法かもしれません。 大多数の生徒が特定のステップを挙げた場合は、円が重なる中央にそのステップを追加します。 特定のステップを挙げた生徒が 1 人または数人だけの場合は、そのステップをいずれかの円に追加します。 完了すると、中央の手順は確実に単純になり、それ以上細分化することはできないはずですが、円の 1 つにのみリストされている手順は、それほど単純ではない可能性があります。 ただし、複雑な動作を最も単純なステップに分解するクラスの経験に応じて、このパターンは逆になる可能性があります。

Q: 成功したソリューションとの類似点はありましたか? もしそうなら、それはどのようなものでしたか?
A: 最も成功した解決策は、最も詳細かつ具体的であったものです。 ロボットは、最小のコンポーネントに分解された非常に特殊な動作を持つ言語でプログラムされています。 たとえば、ロボットが「1 メートル移動して開始地点に戻る」と表現するのは一般的ですが、その高レベルの説明はプログラミング時に簡単には変換できません。 さらに細かく分けると、1 メートル前進し、180 度回転し、1 メートル前進します。 しかし、それでも精度が十分ではない可能性があり、プログラミングの準備にはこのレベルの詳細が必要です。駆動速度と旋回速度を 40% に設定し、1 メートル前進して 3 秒待機し、左に 180 度旋回して 1 秒待機し、1 メートル前進します。 複雑な動作をさらに細分化してプログラミング可能なロボット動作にすればするほど、プロジェクトを完了するための準備がより整います。