株式会社 車輪の再発見

Deploying Drones for the Enterprise

メニュー

“Scratch”のプログラミングでドローンの動きをシミュレートできる「DroneSimulator2」/無料配布中

【DroneSimulator2】はプログラミング学習アプリケーション“Scratch”と連携し仮想3D空間をキャンパスにするドローン飛行シミュレーターです。“Scratch”でドローン飛行プログラミングに夢中になるかも。Windows7,8,8.1,10用

このシミュレーターは「ドローンの操縦の上達」が目的ではありません。
ドローン操縦技術の上達のための教習所やシミュレーションソフトは沢山ありますが、ドローンをプログラミング制御する方法を教えてくれる教室、プログラミングで飛行をシミュレーションできるソフトは見かけません。
ドローンは自動・自律制御技術が発達し、より精密により安全に飛行できるようになり人間が操縦するよりも、プログラミングで飛行させる技術をもつ人が有利になると考えられます。
ドローン操縦に熟知した大人よりも、様々な科学や工学や数学を駆使し圧倒的にドローンを制御できる子供達の姿を想像してみてください。
プログラミング言語学習ソフトと連携できるシミュレーターソフトは空中を飛行するための科学(Science)、科学を利用する技術(Technology)、技術を適切につたえる工学(Engineering)、それらの根幹をなす数学(Mathematics)を学ぶSTEM教育の教材に最適です。
教育現場への教材としてドローンの導入は費用もさることならが、安全面でもしっかりと対策をする必要があり、その点でもシミュレーターソフトは導入にリスクがありません。
プログラミング授業だけでなく、Scratchを基本に教育分野だけではなく農業、建設、工業、映像芸術といった様々な分野で簡単に安全にシミュレーションできるようなソフトにアップグレードしていきます。

Androidアプリ「キッズ・ドローン」(無料)と連携すれば本物のParrot社製ミニドローンとのシンクロ飛行も可能です。
人間の操縦では到底不可能な正確な幾何学軌道、自動飛行を楽しんでください。
(Amazon Fire HD 8インチ、10インチ タブレットでミニドローンが飛ばせる!)

【アプリケーションの概要】
「DroneSimulator2」は、MIT(マサチューセッツ工科大学)が開発した「Scratch 2.0 オフラインエディター」とWindowsPC上で連携し、作成したドローン飛行プログラミングを驚くほど簡単に3Dシミュレーションすることができます。「Scratch 2 Offline Editor」と「DroneSimulator2」の構成です。

【構成アプリケーションとサンプルプログラミングファイル】
Windows用とAndroid用のアプリケーションで提供されます。(3Dシミュレーションのみの場合はAndroid端末は不要です)
「DroneSimulator2」はWindows OSで動作するプログラミング言語学習「Scratch 2 Offline Editor」の機能を拡張するドローン飛行3Dシミュレーターです。
開発環境はUnityでDroneSimulator2.exeが実行ファイルです。


このフォルダには「ScratchDrone_1.4.s2e」といったScratch2 Offline Editor機能拡張用ファイルが含まれています。※s2eファイル

3Dシミュレーター「DroneSimulator2.exe」と機能拡張ファイル「ScratchDrone_1.4.s2e」のダウンロード
64bit版 DroneSimulator2.zip  / 32bit版 DroneSimulator_x86.zip

ダウンロード後に解凍しダンボールドローンのアイコン 「DroneSimulator2.exe」をダブルクリックすれば起動します。最近の学校のICTシステム事情を考慮しPCにアプリケーションをインストールをしなくてもUSBメモリからでも起動できるようにしています。

【Scratchの機能拡張】
機能拡張ファイル「ScratchDrone_1.4.s2e」の読込みは「実験的なHTTP拡張を読込み」からおこないます。
通常時は表示されません。

shiftキー+「ファイル」で「実験的なHTTP拡張を読込み」が表示されます。

機能拡張ファイル「ScratchDrone_1.4.s2e」を選択後読み込ませてください。
この仕組みを使いもともとScratchには無いドローンの飛行コマンドを追加します。

※注意
Windowsタブレットなどのソフトウェア・キーボードではshiftキーを押しならが「ファイル」を押しても『実験的なHTTP拡張を読込み』が表示されません。
その場合はドローン制御コマンドが書込まれた以下のサンプルプログラミングファイル(.sb2)をダブルクリックすれば拡張機能が自動的に読み込まれます。
こちらの手法の方が簡単なので、以降はサンプルプログラミングファイル(.sb2)を使う方法で説明します。

【サンプルプログラミン・ファイル】
・「Sample_Programming001.zip」ドローン・コントロールコマンドを使用して単純な飛行から、人間では不可能な複雑な幾何学的な3D図形を描くサンプルプログラミングファイルを用意しました。

サンプルプログラミングファイルのダウンロード
Sample_Programming001.zip

サンプルプログラミン・ファイル一覧(2018/9/19現在)随時更新しますのでダウンロードしたものが最新です。

実行例

離陸・着陸、スパイラル(螺旋)、円(操縦者に向かって直角)、円(操縦者に向かって並行)、八の字

パイプ、3Dドーナツ、正三角形、正四角形、正五角形

、正六角形、正七角形、正八角形、ペンタグラム、星型(操縦者に向かって並行)

螺旋、コイル、地球、五芒星(実機用)、正六角形から正三角形まで順次

vertical8、grass、Horizontal8 fpv(機首は進行方向)、WildChrysanthemum、Horizontal8(機首は常に一定方向)、Geometricstar

【実際に使ってみましょう。(サンプルプログラミングファイルでシミュレーション)】
1.任意のサンプルプログラミングファイルをダブルクリックしてください。
2.ドローン・コントロールコマンドが自動的に「スクリプト」-「その他」に読み込まれ拡張されたScratchが起動します。

図は「22_螺旋」を選択した場合最新バージョンでは軌跡(ライト)のオン/オフが可能です。ライト1でオン、ライト0でオフ

3.DroneSimulator2を起動してください。

DroneSimulator2の描画画面が起動します。

4.ScratchのどこかをクリックしScratchをアクティブにします。5.スペースキー押すとシミュレーションを開始します。(Scratchで作成したプログラミングがDroneSimulator2に送信され3D描画されます)
6.Scratchの上部の緑のフラッグをクリックすると停止します。

ドローンコントロールの特徴
ドローン・コントロールコマンドとScratchのコマンドの組合せで簡単な飛行から関数を組み込んだ高度なプログラミング飛行まで実行させることが可能です。
・離陸、着陸
・上昇、下降(ギャズ)
・前進、後進(ピッチ)
・右移動、左移動(ロール)
・右旋回、左旋回(ヨー)
・移動停止(ホバリング-動作停止)
上記のコマンドは命令を1つずつ順番に完了させる遂次方式ですが、本物ドローンではプロポやコントローラーは4軸の動きを同時実行することが可能です。ですので4軸の動きを同時実行可能なブロックも用意しました。
・4軸制御ブロック(ピッチ、ロール、ヨー、ギャズ)
以下のようにScratchの作法に従い変数を入れ複雑な制御をすることが可能です。
様々なブロックを組み合わせてシミュレーションしてみてください。

【DroneSimulator2の画面とアイコン】
DroneSimulator2のUIには4つのアイコンがあります。

Scratchとの接続状態表示アイコンです。
Scratchと接続していません。

Scratchとの接続状態表示アイコンです。
Scratchと接続すると青くなります。

ドローンとの通信状態表示アイコンです。
ドローンと未接続です。

ドローンとの通信状態表示アイコンです。ドローンと接続すると青くなります。
この時にこのアイコンクリックで同一WiFi内にあるドローンを見ることができます。✔を外すとそのドローンは飛びません。

カメラの位置変更アイコンです。
カメラの視点を変更します。正面(後部から)→FPV→斜め上から(機体を後方から追随)→斜め上から(背景に正対)

速度調整アイコン
シミュレーターのドローンの移動速度を微調整します。ドローン本体の4軸の速度設定に合わせて補正してください。

【Scratchでドローン飛行プログラミングのヒント】
ここでは図形を描く(飛行する)プログラミングについて解説します。

・六角形→五角形→四角形→三角形と飛行するプログラミング

三角形の内角の和[180×(n-2)]を辺の数で割ってその値を180°から引くと多角形を構成する旋回角度ができます。
注意したいのは、辺の長さにあたる移動時間を一定にしてしまうと頂点の数が増えれば図形がどんどん大きくなってしまいます。
ですので、円に内接する正多角形の辺の長さ:a=2 r x sin (π/n)の公式を使い、辺の長さに合わせて移動する速度または移動時間を変更するようにします。
(最新バージョンでは軌跡(ライト)をオン/オフすることが可能です。ライト1でオン、ライト0でオフ)

3Dシミュレーションさせた動画です。(六角形→五角形→四角形→三角形と飛行するプログラミング)

・螺旋(地面に平行)飛行のプログラミング
螺旋飛行させるには、旋回させながら時間の経過とともに少しずつ速度を上げる必要があります。
前進速度が変わる変数を作ります。
必要な飛行コマンドブロックは「離陸」「前進」「旋回」「移動停止(ホバリング)」離陸です。

3Dシミュレーションさせた動画です。(螺旋-地面に飛行のプログラミング)

各種飛行コマンドの後に「待ち時間のブロック」を使っているのはコマンドが実行(処理完了)する時間が必要だからです。
例えば「離陸」だとドローンが飛び上がり空中で停止するまで1~2秒は必要です。
「待ち時間のブロック」を入れないで、例えば「前進」ブロックを使うと斜め前に飛び上がることになります。
機械を制御するときは実行(処理完了)する時間も考えてプログラミングする必要があります。

【システム要件と機能拡張Scratch Extension(s2e)について】
Windows7,8,8.1,10 ※Windows7のグラフィックドライバが古い場合は正確に表示しないことがあります。
なお「DroneSimulator2」フォルダと「Smaple_Programming001」はインストールする必要はありません。USBメモリからでも起動させて使うことが可能です。

・Andorid端末 Android OS 7.0以上(ドローン実機を飛ばす場合)
・WiFi環境(ドローン実機を飛ばす場合)

改良点
・3Dシミュレーター側の動作速度の補正機能追加。
・常時ビーコンを発信するように変更。
・リスニングポートで接続待ちをして、接続があれば別スレッドを起こしてそちらで接続関係の処理、リスニングポートは再度接続待ちに戻る。
(Webサーバーと一緒でマルチコネクションに対応する、1つのKidsDrone.apkに対して1つのコネクション)
・接続してきたKidsDrone.apkとコネクションをリスト管理
・適当な周期でKidsDrone.apkの生存確認をする。1秒毎
・応答の無いKidsDrone.apkはリストから削除。
・ステータス中のidが変わったときはアプリが再起動・再接続しているのでたとえアドレスが同じでもユーザー確認なしにはコマンドを送らない。
・送りたいKidsDroneのアドレスへコマンドを送信。
・1機だけでも複数の機体へ同時に送ってもOK。

※s2eファイルとは
Scratch2 Offline Editor単体では外部のハードウェアデバイスと直接通信することはできません。しかしScratch2 Offline EditorにはScratch Extension(「実験的なHTTP拡張」)と呼ばれるScratchの機能を拡張するための仕様があります。
https://en.scratch-wiki.info/w/images/ExtensionsDoc.HTTP-9-11.pdf
このScratch Extensionの仕組みを利用するとHTTPリクエスト/レスポンスという形で外部のソフトウェアと通信することができます。Scratch2 Offline Editor自体はドローンと通信できなくとも外部のソフトウェア側でドローンと通信するようにすれば良いということになります。実際にScratch Extensionを使ってScratch 2.0の機能を拡張するには、仕様にしたがって拡張子.s2eのファイルに定義をJASONで記述しScratch2 Offline Editorで読み込みます。
記述ファイルの読込みはScratch2 Offline Editorのshiftキーを押しならが「ファイル」を押すと『実験的なHTTP拡張を読込み』と表示され拡張ファイルを選択します。
この仕組みを使いドローンの飛行コマンドを追加しています。

※注意
Windowsタブレットなどのソフトウェア・キーボードではshiftキーを押しならが「ファイル」を押しても『実験的なHTTP拡張を読込み』と表示されません。s2eファイルに記述されたコマンドを使用し保存されたプログラミングファイルをダブルクリックすれば拡張機能が自動的に読み込まれます。

【制限事項】
無断販売・再配布不可
塾や講習会など営利目的での使用は可能です。


Scratch 2 Offline Editorの入手とインストール
すでにScratch 2 Offline Editorがインストールされている場合は割愛してください。

・Scratch 2 Offline EditorはAdobeAIR上で動作します。最初にAdobeAIRのランタイムをインストールします。
https://get.adobe.com/jp/air/

・Scratch2 Offline Editorの入手とインストール
https://scratch.mit.edu/scratchr2/static/sa/Scratch-461.exe

【Scratch3への対応は?】
HTML5+Unity+WebGLにて開発中
DroneSimulator3 for Scratch 3.0 (仮称)・iPad/タブレットのみでのプログラミング可能へ
WiFi接続ドローンへの対応
・Parrot社のWiFi接続のドローンへの対応
・DJI社のWiFi接続のThelloへの対応他のアプリケーションとの連携・GoogleMap
・SLAMアプリケーション
3D地図データの活用

更新情報
2018/9/1
32bit版追加しました。
(32bit版は64bitOSでも動作します。)
http://kidsdrone.rediscovery.co.jp/scratch/DroneSimulator_x86.zip

2018/9/25
軌跡(ライト)をオン/オフできるようにしました。ライト1でオン、ライト0でオフです。
こんなことが出来ます。Angel in the SKY

メディアでのご紹介

Scratch用ドローンプログラミング飛行3Dシミュレータを公開


窓の杜の(インプレス・ウオッチ)
“Scratch”のプログラムでドローンの動きをシミュレートできる「DroneSimulator2」


ドローン実機に接続して作成したプログラミングでドローンを飛行させることができます
・ 「DroneSimulator2」は「 Kidsdrone」(Androidアプリケーション)と連携してParrot社のミニドローンをシミュレーターとシンクロ飛行させることが可能です。(機体の設定値により誤差はあります)

システム概略図
 Parrot Mini Drone + Android端末 +WiFi Router
対応ドローン一覧
・Mambo
・Swing
・Airborne Night/Cargo、
・Hydrofoil Orak、
・Rolling Spider
Andoridアプリケーション「Kidsdrone」をAndroid端でGoogle Playからインストールします。

詳しくはこちら

関連記事

  1. 中山涼一 2018.08.31 6:14pm

    windowsのOSは64bitではないとだめですか?32bitのWindows7と10では、DroneSimulator2.exeを開けませんでした。OSの問題でしょうか?よろしくお願いいたします。

    • 0
    • 0
  2. deploying 2018.09.02 12:03am

    32bit版追加しました。
    DroneSimulator_x86.zip 
    http://kidsdrone.rediscovery.co.jp/scratch/DroneSimulator_x86.zip

    • 0
    • 0
    • 中山涼一 2018.09.02 8:52am

      早速32bit版を追加いただき、ありがとうございます。問題なく動きました。

      • 0
      • 0
      • 村山 2020.07.08 5:05pm

        お世話になります。
        学校関係者です。
        シュミレーターを使用させて頂いた授業内容など学校案内パンフレットで使用させて頂く事は可能ですか?

        • 0
        • 0
  3. deploying 2018.09.02 12:23am

    ご掲載いたきましてありがとうございました!今後とも出来る限りフリーで配布していきたいと思います。

    • 0
    • 0
  4. yegusa 2018.12.10 12:25pm

    「DroneSimulator2」は「 Kidsdrone」(Androidアプリケーション)と連携してParrot社のミニドローンをシミュレーターとシンクロ飛行させることが可能です。
    との事ですが、連携可能なParrot社のミニドローンの具体的な商品名(型番)を教えてください。
    よろしくお願いします。

    • 0
    • 0
    • deploying 2018.12.10 12:47pm

      「 Kidsdrone」の記事に明記しています。 http://www.rediscovery.co.jp/?p=1810
      Mambo、Swing、Airborne Night/Cargo、Rolling Spider、Hydrofoil Orakに対応しています。

      • 0
      • 0
  5. deploying 2018.12.13 1:41am

    →Amazon Fire HD 8インチ、10インチ タブレットでミニドローンが飛ばせる!
    http://www.rediscovery.co.jp/?p=2686

    • 0
    • 0
  6. yegusa 2018.12.17 10:10am

    Scratch + DroneSimulator2 で少しづつ勉強を始めました。
    ドローン・コントロールコマンド(ブロック)の動作(作用)を解説したものはありますでしょうか?
    細かい動作(作用)がわからない所があります。

    ・上昇、下降(ギャズ) ・前進、後進(ピッチ) ・右移動、左移動(ロール) ・右旋回、左旋回(ヨー) ・バッテリー
    は、Drone実機に接続した後の実機の各状態を、戻り値として返す、と理解してよいでしょうか?

    ・「離陸」、上昇速度は設定できるのか? 上昇距離は?

    ・速度などの設定値範囲は?(0~255?)
    ・「ライト」引数の設定値は、0 と 1 のみか?

    *現在、私共では mBot を使用した「ロボットプログラミング教室」を開設しております。
    *将来、貴 Drone Simulator 2 の利用を検討しております。

    ご多忙とは存じますが、ご教授いただければ幸いです。
    ドローン・コントロールコマンド(ブロック)の動作(作用)を解説した「資料」を頒布(有償)していただけますでしょうか?
    何卒、よろしくお願いします。

    • 0
    • 0
    • deploying 2018.12.18 2:14am

      以下をご参考に

      バッテリー残量
      ・実機接続時はバッテリー残量として実機のバッテリー残量を返します。

      ロール・ピッチ・ギャズ・ヨー
      ・それ以外の項目(ロール・ピッチ・ギャズ・ヨー)は現在ターゲットとしているミニドローンでは値を取得できないため常に0が返ります。また、実機が接続されていない場合は0が返ります。

      移動コマンド
      ・上昇・下降、前進・後進、右移動・左移動で指定する値は相対速度です。
      右旋回・左旋回で指定する値は相対角速度または角度です。

      速度・角度の設定
      ・移動速度・旋回速度は[-100,+100]
      (シミュレータ上だけであれば描画可能な各速度は[-∞,+∞]ですが実機の制御には使えません。)
      旋回ブロックには角度を指定するものがありますがこの場合は[-180,+180]です。
      このとき、Scratch側で設定する値100は、実機に設定してある最大移動速度に対する100分率の値です。
      また、例えば前に-100は後ろに+100と等価、右に100は左に-100と等価なのですが、小学生だと学年によっては負数を習っていないはずですので、あえて前進・後進、右移動・左移動等を分けて指定できるようにしてあります。

      ライト
      ライトは[0,1]です。0は消灯、1は点灯。
      (ARSDKでは[0,255]の値をもっています、ライトがオプションで点灯するような計画があったのかもしれません。)

      フリップ
      処理が終了するまで自動でフリップします。

      動作
      ・基本的に一度指定すると移動停止しない限りその値で移動し続けます。
      ただし角度指定の旋回ブロックは指定した角度旋回するとそれ以上は旋回しません。
      できるだけ正確に指定角度旋回させたい場合には角度指定の旋回ブロックを使用してください。
      また角度指定の旋回ブロックの実行には回転角に応じて実行するのに時間がかかりますので、角度指定旋回ブロックの後には一定時間待機させたほうが正確に飛行します。

      組合わせ
      ・例えば前進に続けて右移動を実行するようにブロックを組めば斜め右前に進むことになります。

      4軸同時制御
      Scratch(node/JavaScript)と通信の都合でどうしても前進と右移動に僅かなずれが発生するので、一括して4軸同時に指定できるブロックを設けてあります。
      前項目の前進+右移動に組んだ上記のブロックの組合わせの例では、無限に等分された直線で円を構成することになります。

      離陸について
      ・離陸時の上昇速度や高度は指定できません。機体の制御に依存します。
      (シミュレーター上だけであれば取得可能ですが実機の制御には使えません。)

      機体の(絶対/相対)座標
      ・機体の(絶対/相対)座標は取得することができません。GPS付の機種なら可能です。
      (シミュレーター上だけであれば取得可能ですが実機の制御には使えません)
      またScratchのバックエンドはnode/JavaScriptですのでループを作ったも常に等間隔で動作するわけではありません。
      ですのでうまくブロックを組み立てないと誤差が蓄積して思ったとおりに動かないことが多いです。
      例えば、なんらかの数式に基づき図形に合わせて飛行させたい場合、Scratchの時間関数を使って前回実行時刻と現在時刻の差分と速度ベクトルから位置を計算し、次の速度ベクトルを計算する。といった実装をするほうがよりきれいな図形を描くことができます。
      こちらから提供しているサンプルプログラミングファイルに多用しています、レベルに合わせて実装してください。
      また、60fpsでループ毎に実行すると約16ミリ秒に1回処理をすることになりますが、特に移動速度が遅い場合などこの時間ではほとんど機体は動きませんので計算上の位置と実際の位置とのズレが大きくなります。こういう場合には例えば5ループに1回、あるいはループ毎に前回指示を送ったときの時間差分が0.3秒や0.5, 1秒以上になったときに位置計算・速度ベクトルの変更指示をするようにブロックを組み立てたほうが良い飛行結果が得られることが多いです。

      実機を飛ばす場合のヒントと注意
      ・実機飛行時は電池の新旧にもよりますがバッテリー残量30%を切ったあたりで電池を交換していただくほうが過放電を避けて長く使用することができます。
      ・満充電で長期間放置すると電池が膨らみ損傷・発火・電池寿命の低下に繋がりますので数日以上使用しないのであれば30-50%程度で保管していただいたほうがいいです。
      ・飛行した直後は電池が熱くなることがありますが、このまま充電するのも電池寿命が短くなる原因となりますでのできるだけ冷ましてから充電したほうがよいです。
      ・10-15分連続して飛行するたびにモーターが冷えるまで休ませたほうがモーターの故障を抑えることができます。
      ・モーター部をフライトコントローラー(機体の真中部分に)近づけすぎると磁気センサーやジャイロ等に異常が生じて正常に飛行できなくなる可能性があります。
      (複数機体を持ち運ぶ場合などできるだけモーター部が他の機体のフライトコントローラーに近づかないようにケース等に入れて運んでいただくほうがよいです。)
      ・現在対応しているのはParrot社製ミニドローンですが、この機体は機体下部の下向きのカメラで地面のトラッキングを行いドリフトを防止しています。
      ・このため光沢の強い床材の場合、あるいは暗所では正常にトラッキングできずにホバリング時にドリフトしてしまうことがあります。
      ・速度や高さにもよりますが、机から机に飛ばしたい場合、途中に机があったりすると超音波測定で飛行する高さが変わってしまったりします。飛行経路上はできるだけ障害物などがないようにしてください。
      ・[KidsDrone]がミニドローンを認識しない場合は、Bluetoothが正常に認識されていないことが多いため他のデバイスの通信を切ったり、タブレット機などの安定して通信可能な筐体の端末を使ってみてください。
      ・ゲームパッドで制御不能になった時に割り込みができるようにしています。教室での使うとには是非安全対策のために[KidsDrone]がインストールされた端末にはゲームパッドを接続してください。
      ・こちらも参考にしてください。
      http://www.rediscovery.co.jp/?page_id=245

      おまけ
      ・Amazon Fire HD 8インチ、10インチ タブレットでParrotミニドローンが飛ばせる!
      http://www.rediscovery.co.jp/?p=2686

      PS
      シミュレーターでは描画しませんが、グラバーの開閉キャノン砲写真を撮影するコマンドは使えます。

      • 2
      • 0
  7. 平ノ上政輝 2019.10.01 12:04pm

    scratchで慣れたら、javascriptで「Dronesimulator2」をプログラミングしたいと考えていますが、よい方法がなかなか見つかりません。
    御指南いただけると有難いです。

    • 0
    • 0

今後のイベント

現在予定されているイベントはありません。

イベントカレンダー

アーカイブ

事業内容

・ドローン制御アプリケーションの開発(オープンソースで公開)
・自律型ドローンによるミリ波・マイクロ波によるコンクリート内部検査
・ドローン搭載型各種センサーによる金属表面腐蝕検査
・自律型ドローンによる構造物表面検査
・STEM教育素材の研究と開発
・子ども用ドローンの開発と販売
・Scratchプログラミング教室の運営
・ドローン制御技術に関する情報を発信し制御技術書籍を発行
・ドローンによるレースイベントの開催
・WebGLによるドローンシミュレーターの開発
・ドローンを使った先進的技術の研究・開発

保有商標

商標登録第5984465号
『ドローンフィールド』
----------------------------------
商標登録第6016198号
『ドローンガール』
----------------------------------
商標登録第6062323号
『ドローン女子』

翻訳文書

ものづくり 工作

書籍販売中!