Ryze Tech Tello とドローンの学習

遅まきながら技術の進展に対応するために トイドローン Ryze Tello Powered by DJI を購入しました。

ところでトイドローンとは何でしょうか。

Toy Drones vs Enthusiast Drones: What’s the Difference? という記事を見てみると、カメラの性能に重きを置いていない、もしくはカメラそのものを搭載していない、極めて安価な手のひらサイズのドローンの総称という理解で良いのでしょうか。

いきなり面倒だと思われたかもしれません。

ドローンは面倒なもので、購入してから飛ばす前に覚えなければならない事柄がたくさんあります。主に航空法と電波法と条例† に関連するドローンを飛ばしてはいけない場所と飛ばしてはいけない条件がその最たるものです。

店舗に足を運べば、技能資格や研修について資料が幾つも並んでいて、敷居がとても高そうに見えます。

そんな面倒で敷居が高そうなドローンの中でも、手軽に始められるエントリーモデルの定番と販売員が薦める Ryze Tech Tello を購入しました。


【国内正規品】 Ryze トイドローン Tello Powered by DJI

トイドローンだから… ではなくて、本体質量が 200g 未満なので航空法の「無人航空機」には該当せずに「模型航空機」と扱われるそうです。

無人航空機になると、人口集中地区の上空や 150m 以上の高さに飛行させる際に予め許可を得る必要があるそうですが、人口集中地区どころか送電線のような人工物がある山中でさえ飛行させるのを躊躇いますし、無線LANで接続するドローンなんて遠距離通信用のアンテナを用意しなければ、条件が良くて 100m ぐらいが通信の限界じゃないのかと考えながら笑顔で頷いていました。

もともと Parrot ANAFI PF728005 の購入を考えていたものとしては、メリットは小型軽量かつ安価 (練習中に安心して墜落させられる) で人気がある (それだけ開発者が多いことが期待できる) ことぐらいです。はい、凄く大きなメリットですね。




実際にコミュニティではネットワークやストリーミングのプロトコルが解析されていて、非公式のライブラリもなかなか充実しています。

加えて公式のダウンロードページから入手できる Python スクリプト (Tello3.py – SDK 1.3.0 バージョン 1/1/2018) だけでも、コマンドライン操作でドローンを離陸させて、移動させて、温度や飛行時間のデータを取るなんてことはプログラミング知識がなくてもできます。

TELLO DOWNLOADS – Ryze Tech
https://www.ryzerobotics.com/tello/downloads

このスクリプトを自身で書き換えて、ビデオの出力を OpenCV や Keras (Tensorflow, CNTK, Theano) に渡して処理みたいなことをするには、さすがに知識と経験が必要になります。個人的には大学の授業の課題で Microsoft Kinect を使ってロボットを作ったことを思い出しました。

適当な Python スクリプトを書いて、取り敢えず動かしてみるのは簡単ですが、きちんと離陸から着陸までの過程を考えてから実機テストを行わないと、スクリプト実行後に操縦不能になって墜落させるしか無くなるのでお気をつけください (私は手で掴もうとして天井まで上昇させた挙句、墜落させました)。

Linux から派生してドローンに興味を持ち DronecodeOpenDroneMap が面白そうで、3D Robotics や Parrot を触ってみたくなったところに、その前段階として導入したトイドローンで意外と遊べてしまったのは存外の幸運でした。

プログラマの玩具としては優秀な Tello ですが、純粋なドローンとしてはやや期待外れに感じました。飛距離とカメラ性能が価格相応なので、いつもと異なる視点からの撮影を求めるのであれば DJI Mavic Air のような本格的なドローンを最初から買ってしまった方が満足度が高いかもしれません。

もちろん、実売価格1万円のドローンやタブレット端末に付属しているカメラとしては、とても良い性能です。バッテリーやCPUなども含めて考えると、この性能と品質をこの価格で提供できるのは凄いことです。それでも動画サイトに投稿されている空撮動画とは、どうしても違いがあります。

本当は景観画像を掲載したかったのですが、練習中に借りていた私有地 (休閑期の畑) の持ち主の許可が得られなかったので、無加工の室内撮影画像で代用します。

自宅を含めた首都圏では人が多過ぎて住居や道路すらまともに整備されていない状況なので、練習どころか撮影テストすら論外です。という訳で、ドローンを飛ばすだけ飛ばして、ついでに以前から興味があったあのソーダを試飲して戻ってきました 😛

話を Tello に戻しますと、物足りないのは飛距離とカメラ性能ぐらいで飛行の安定性と離着陸の安心感、操作の容易さに関しては流石です。市販価格1万円のトイドローンとは思えないほど、安定して飛び続けますし、高度を下げすぎると自動で着陸します。

またセンサーの影響なのか、飛行中に本体の真下に障害物に近づけると無風状態でも勝手に移動して動いていくことがありますので、慣れないと予想外の動きをして戸惑います。私は上記の私有地での屋外飛行までに室内で30回ほどバッテリーが無くなるまで飛行訓練をして 2 回も墜落させました。

時間が足りなかったこともあり、屋外ではそれほど飛ばしていないのですが、風速 1.7m/s でも位置を変えている最中に吹かれると風に流される印象がありました。

自分で飛ばしてみると他の人の技能が少しだけ分かるようになり、やっぱり他の人は上手なのだなと改めて思うものですが、他の人の操縦を見ていても自分で飛ばした時の感動や興奮は分かりません。

ドローンは面倒なことが多いのですが、飛ばしてみると単純に楽しいです。これだけは Tello を購入したことで初めて理解できました。

そして、しばらく使い続けた感想を率直に申せば、トイドローンのカメラ機能に満足できずに空撮はしなくなるので、練習用途ならば最初からカメラを捨てている Parrot Minidorone MAMBO FLY(ミニドローンマンボフライ) PF727078 でも良かったのではないかという事に尽きます (飛行性能や操作性には何の文句もありません)。

価格帯は Tello とほぼ同じで、別売のカメラを搭載できる仕様になっているのですが、こちらの方がしっかりとした SDK が用意されており、開発者目線で見ると面白そうです。


† 小型無人機等飛行禁止法という法令もありますが、こちらは常識的に考えてドローンを飛ばしてはいけない場所を具体的に列挙しているものなので、一読すればその内容と意図は明白です。

安全なウェブアプリケーションの作成?運用?閲覧?

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践』 という本を読みました。

私は(WEB上のマニュアルやドキュメントであればともかく)脆弱性を専門に扱った書籍に触れるのは初めて、フロントエンドも専門外なので、知らないことが幾つも掲載されていて勉強になりました。

脆弱性の実物に触れることを重視していると筆者が前文に書かれているように、主にWEBブラウザ操作に関連する脆弱性とそれに関連した攻撃手法が具体的に解説されており、配布されている実習環境を用いて脆弱性を体験できる構成になっています。

その内容もSQLインジェクション、OSコマンドインジェクション、スピアフィッシングと言ったよく知られたものから文字コードの取り扱いやファイルアップロードに関連する脆弱性まで詳しく説明されています。

本書のタイトルこそ『安全なWebアプリケーションの作り方』ですが、作る側よりもむしろ(ブログソフトウェアやアップローダを使用したサイトの管理者を含めた)使う側に向けたメッセージなのではないかと思わせる項目も少なからずあります。

少なくともクリックジャギング(詳しくは本書を読んでください)などの一部の項目に関しては、意図して実装するのは攻撃者だけなのではないかという感想を抱きます。これだけに関して言えば、脆弱性を把握していなければならないのは閲覧者です。

作成者と利用者(プログラムを利用したウェブサイト・サービスの管理者を含む)のどちらに向けて書かれた内容なのだろうという疑問は読中は常につきまといます。




セキュリティ意識の高くない私でも知っているようなことは多くの人がおそらく理解しています。

そんな私でも(過去に見たことがないから)きっと自分でも書かないようなコードが危険で非推奨となっている例などをみると、ウェブアプリケーションの利用者側に向けて書かれた内容なのだろうかという思いを改めて強くします。

もちろん作成者だけでなく、それを利用する管理者や閲覧者が脆弱性を把握して対策することが重要なのは言うまでもないことです。しかし、誰がどこまで把握しておくべきなのかを考えると線引きは簡単ではありません。

プログラミング言語を専門にしていないウェブデザイナが JavaScript ライブラリを多用したり、コンテンツ管理システムを使ってウェブサイトを自作したりすることは特に珍しいことではありません。

ところが最新の情報セキュリティを継続的に学び続けているのは、誠に失礼ながら専門家を除けば、知っておかなければならない立場にある一部の開発者や管理者に限られる印象を受けます。

本書の内容も、ウェブの利用者なら誰も知っていて損はないものですが、具体的な対策となるとソースコードを見た瞬間に、サーバやデータベースやウェブブラウザで何が起こるかを把握できないとどうしようもありません。

取り上げられている事例だけでも、呆れるほど多彩な手段で執拗にセッションやクッキーが狙われていることが分かったり、インジェクション攻撃でどれだけ簡単に情報を盗んだり、システムを破壊したりすることができるのかを実例を通して理解でき、実習環境上で簡単に再現できる(責任者の説得にも使える)という点では誰にとっても有益ですが、そこから更に進んで対策を行う段階ではウェブブラウザやOSだけでなくプログラミング言語や文字コード、さらには通信の仕組み等についても正確な理解が必要とされるのが難しいところです。

実習環境では主に PHP が用いられているものの、正規表現など基本的な知識を有していれば、PHP を知らなくても問題なく読めます。

自分で PHP を書くことはありませんし、PHP や Perl の CGI を扱うぐらいならば、よく使われている Java や Ruby で良いのに(個人的にはサーバサイド JavaScript/TypeScript 推し)ぐらいには思っていますが、そんな私でも言語の問題で躓くことはありませんでした。

ただし、HTMLメソッドやブラウザやサーバの機能についての理解は必要ですし、本書に詳しい説明はありませんので全く知識のない方は、先にウェブプログラミングを対象とした書籍を何冊か読まれたほうが良いかと思われます。対象の都合上、どうしてもソースコードやログを読み込んでいかないと本書の内容を完全には理解できません。

このように(解説は平易でわかりやすいのですが)敷居はそれなりに高いので誰にでも薦められるわけではないものの、アプリケーションを作る開発者だけでなく利用者にとっても有益な良書という感想を抱きました。

だからこそ、誰に向けて書かれたセキュリティの入門書なのだろうという疑問が生じるのかもしれません。

焼きたてのパンの匂いを楽しむ

買うか買わないかを1年ぐらい悩み続けて、トースタオーブンを購入しました。そして思いました。もっと早くに購入しておけばよかったと。

躊躇していた理由は単純に荷物を増やしたくなかったからです。

幼少の頃から引っ越しを繰り返してきたので、大型の家電製品や家具を増やすことに私は心理的な抵抗を覚えます。

自宅にある本棚も机もすべてMDFの使い捨てです。車一台の荷台に収まらないので冷蔵庫を購入したのは僅か数年前。洗濯機に至っては他人と共有していないことに違和感を感じます。

さすがに印刷できなかったり、GPUを使って計算できないのは不便なので、プリンタとデスクトップパソコンだけは購入しましたが、そもそも長期出張で自宅に帰らないので活用できているとは言い難い状況です。

生活環境を考えると荷物はスーツケース2つに収まるぐらいの方が良いですし、家電製品は電圧変換器が付属しているもの以外は持っていても仕方がない気がします。




そうは言っても健康で文化的な生活を送るため、オーブンまたは炊飯器のどちらか一つぐらいは欲しいと考え、使用頻度が高くなりそうなオーブンの方を選択しました。

オーブンに対するこだわりは特に無いので、どれを選んでも良いところです。せっかくの機会なのでこちらに決めました。



象印 オーブントースター マットブラック ET-GM30-BZ


このオーブンの大事なところは次の3点です。

すなわち、高さと奥行きが大きいこと、内部の温度を指定できること、そして、離散的に加熱時間を選択できることです。

この3点だけを意識して深く考えずに決めましたが、とても使いやすいです。

ちなみに1点目と2点目は冷凍のライ麦パンやチーズケーキを焼きたいので意識しました。3点目は私が個人的にダイアルが嫌いだからです。

このオーブンではボタンを押すと30秒単位で加熱時間を指定できます。一応はトースト・ピザ、冷凍、手作りパンなどのプリセットも用意されており、これらの機能も実用できなくもありません (私の用途では加熱がやや物足りない感じになります)。

パン粉が溜まって汚れたら下部のプレートを引き抜けば清掃できますし、扉も外せるので分解も容易です。

購入前には使用せずに無駄になることを危惧していましたが、今では1日に2回では飽き足らず、職場や出張にも持っていきたいぐらいに重宝しています。

あとは山羊乳と青カビのチーズに 適当なアルコール 香りの強いアールグレイまたは雪印コーヒーさえあれば完璧です。