ドローンを活用したプログラミング教材の開発

背景 

学習指導要領の改訂の方向性について審議した中央教育審議会の答申では 情報化やグローバル化により社会が大きく変化していくと されている.特に情報化については,人工知能や AI などの技術革新に関連して,現在ある仕事の半数が今後自動化されるという予測が
ある.このような急激に変化する社会では,「学校で学ぶことが通用しない」 「仕事が AI に奪われる」など 将来に対して危惧されている.
  2020 年度からの初等中等教育でのプログラミング教育の必修化を明記した.これに伴い,プログラミングなどに関する教育活動について学校外の多様な教育活動と連携諸外国のプログラミング教育を参考にしつつ,発達段階に応じてどのように充実を図るべきかを検討し 教育カリキュラムの構成に注力してきた.しかし,現実を見るとプログラミング教育は初期段階で躓くことが多い.学習初期段階では,タイプミスに起因する文法エラーが多々発生し,意味を理解できないエラーメッセージを表示され,苦手意識を持つ人が多い.この文法エラーの修正ばかりに注意すると,プログラムの構造組み立てや論理的思考力などプログラミング的思考が身につかない.
 これに対し 近年 scratch などの コーディング しない 触覚や視覚的 GUIを用いたプログラミング開発環境が開発された.しかし,すべて ブラウザ上で実行されるので「達成感を得にくい」 「目に見えないエラーの処理が困難」など実物が無いために生じる.不明瞭な点に関する不安の声がある.
 そこで本実習では以上の問題を解決するためGUI を用いた開発環境およびドローンを利用したプログラミング教材を開発する コーディングをせず,小中高生 に人気のあるドローンを駆動し,苦手意識を改善 し,意欲的に学習できる ことを目的とする教材を開発する.

使用したドローン

 今回用いるドローンはRyzeTech社のTelloである.このドローンはDJI社の協力で制作されたトイドローンである.価格は1万円台前半と安価だが,安定した飛行性能を備えており,様々な動作を行うことができる.また各種センサおよびカメラを搭載しており,高度や気圧などの取得,動画像の撮影を行うことができる.操縦は公式スマートフォンアプリを用いて簡単に行えるほか,ScratchやPythonを用いたプログラムで飛行させることも可能である.

ドローン

1 今回採用したトイドローン

プログラミング方法

 Telloはコマンドを受信するとそれに対応した動作を行う仕様になっている.例えば,”takeoff”というコマンドは離陸に対応している.プログラミングを用いて操縦を行う場合はこのコマンドの送受信を行うプログラムを作成することで操縦が可能である.PythonとScratchではTelloとの接続方法が異なる.これらの関係は図2に示す.

 Dronandprog

2 Telloとプログラムとの接続関係

 Pythonを用いる場合はソケット通信方式でPCとドローン間の通信を行っている.Pythonを用いるとScratchよりも柔軟なプログラムを作成することができる.単純な飛行はもちろん,カメラを搭載しているためOpenCVなどのライブラリを用いて,物体を認識して任意の動作をさせることも可能である.

 Scratchを用いて行う場合は,Pythonを介してTelloと通信を行う.Scratchから送信されたコマンドはPythonで作成したサーバに送信され,サーバとTelloでソケット通信を行うことになる.Scratchはブロックプラミングであるためプログラミング初心者に最適である.また,Scratchで作成した通りにTelloを動作させることでより理解を深めることができる.

スクラッチによるドローン制御方法

 Scratchとは,アメリカのマサチューセッツ工科大学(MIT)メディアラボのライフロング・キンダーガーテン・グループによって開発されたオープンソースのビジュアルプログラミング言語である.8~16才の低年齢を主な対象としており,ブロックプログラミング言語であるため簡単にプログラミングを行うことができることが特徴である.準備されているブロックの用途,種類ごとに8色に色分けされており,ブロックをマウスでドラッグするだけで一連の処理のプログラムを組むことができる.図3にScratchの操作画面を示す.なお,ScratchはWebブラウザで使用できるが,後述の機能を利用するためにScratch 2 offline版を使用する.

scratchIDE

3 スクラッチプログラムの開発環境

 Scratch 2 offline版はJSON形式のファイルを使用することで,追加のブロックを作成し機能を拡張することができる.そこで本教材では,Telloを操作するためのブロックを追加してScratchによるTelloの制御を行えるようにする.ScratchとTelloはPC上に構築したサーバを介して通信を行う.Scratchとサーバはhttp,サーバとTelloはWi-Fiによって通信を行う.

 表1にScratchで使用する予定である追加ブロックの一覧を示す.これらのブロックのほとんどはScratchからTelloへ命令を送るためのコマンドであるが,tofのブロックのみTelloに搭載されているtofセンサの出力値を読み取るブロックである.このブロックは学習内容の一つであるif文の条件としての使用を検討している.

1 追加するブロック

add-block

Pythonによるドローン制御方法

Pythonを用いたドローン操作は,以下の手順で行われる.

①ドローンとPythonプログラムの通信接続

②ドローン側のカメラの起動およびその画像受信

③ドローンにコマンド(文字列)を送信することによる操作

 

Pythonによるドローンプログラミング講座に用いるファイルは,上記①および②をデフォルトで実行する操作として先に記述し,③については,内部的にドローンへの操作を肩代わりするわかりやすい名前の関数を定義した.これにより,Scratchを用いたプログラミングと同じ思考でプログラムが可能となった.

プログラミング例

Scratchで作成したプログラムと,Pythonによるドローンプログラミング講座用ファイルを用いて作成した同様の動作をするプログラムを図4に示す.Scratchと同様に直感的にプログラムを書くことが可能となっていることが分かる.

dron-prog-ex2.JPG

4 プログラミング例

ドローン飛行コースの作成

本課題で使用する迷路コースを図5に示す.本教材では,ドローンに前後左右や旋回などの動作を自由にプログラミングしてもらうことで,Scratchを用いたプログラミングによりドローンを動作させる方法を学ぶ.そして,コースを通過させるためには,手順が多く微調整が難しいことを理解してもらう.

drone-corse

図5 ドローンの迷路コース