Dropbox

DJI Sparkのスフィアモード(360度パノラマ)撮影を試してみた

Android版のDJIGO4もv4.1.15(+firmware v01.00.0700)になりSparkにSpherical Panoモードの撮影が出来るようになりましたので、さっそく試してみました。

以前に追加された180度パノラマでは21枚の写真を自動的に撮影しましたが、スフィア・モードでは全景を写すために実に46枚もの写真を撮ります。そのため100秒ほど時間を要します。テストのために露出を変えて4回撮影したところ、ローバッテリー・アラームが出てしまいました。さすがにSparkのバッテリーでは、何枚もの全景写真を撮るのは難しいです。

[ 露出 ]
自動露出の場合、一枚目の撮影が基準になります。この時、空の部分が多いため、地上部分が露出不足になりがちです。マニュアルで露出設定を行う方が良い結果が得られると思います。

[ Stitch/結合 ]
180度パノラマまでは、とりあえずDJIGO4にダウンロードすると自動的に結合され、その場でSNSにシェアを行うことが出来ました。スフィアでは、今のところDJIGO4ではあまり上手に結合してくれません。

そこで活躍するのはMicrosoft Image Composite Editor(以下ICEと呼びます)です。ICEは自動的にほぼ完璧な写真の結合を行ってくれます。360度パノラマらしい作例として地上の風景を円形に表現するにはSTITCHのProjectionでFishEye, StereoGraphicあるいはOrthoGraphicを選択します。地平線を円形にするためには視点を調節します。

わたしはビルの高さが際立つStereoGraphicが気に入っています。

DJI Spark Spherical Pano - Shanghai, China

必ずしも46枚の写真をすべて使用せずにICEで見栄えの良い部分だけを切り取って一枚の写真にするのも良い使い道かもしれません。一枚物の写真は別として、パノラマ合成をするのならば、一気に全部撮ってしまい、あとからどの方向を切り取るかを考えれば良いので楽な気がします。

下の写真は、上の円形写真とは別テイクですが、ほぼ同じ写真の一部をICEで抜き出したものです。もともと複数写真の合成ですので、一部といえども解像度は高いです。

DJI_0245_crop

FacebookなどでVR風に動かせる全方位写真としてアップロードする方法もあります。これについては長くなるので、次のエントリーで紹介します。

携帯電話カメラの被写界深度エフェクトのエラーについての実験

最近のカメラレンズが2つ搭載された携帯電話の特徴のひとつとして被写界深度エフェクトを自由に変更出来る機能があります。以前から、その機能が正しく働かず、フォーカスしたい部分が背景と同化してしまう作例が度々紹介されて来ました。TwitterでiPhone 8 Plusでペットボトルのポンジュースで蓋の部分が背景と同化している画像が流れて来たので改めて、この現象について考えてみました。

被写界深度エフェクトとあえて”エフェクト”と書いているように、レンズの焦点距離と絞り値による本当の被写界深度ではなく、何かしらソフトウェアによる処理を行い被写界深度エフェクトを得ていることは間違いありません。それ故にエラーも発生します。では、どういう時にエラーが発生するのかをHuawei Mate9にて実験を行いました。

実験に使用したのは中国版のHuawei Mate9でWide Aperture Modeにて撮影しました。

2つのカメラの僅かな視差で距離を見極めbokeh(英語でボケのこと)具合を調整しているではないかと想像し、被写界深度エフェクトのエラーを作り出してみました。エラーを出やすくするために携帯電話と細い棒とが平行になるようにして撮影しています。

被写界深度エフェクトが強く出るように調整して細い棒の部分をタップすると背景にフォーカスが行ってしまいました。棒自体もあまりシャープに写っていませんが下の瓶と棒が被っている部分と背景に棒が写っている部分の境目に注目すれば、被写界深度エフェクト処理のエラーであるのは明確です。

二枚目の写真では被写界深度エフェクトが問題なく処理出来ています。撮影条件および被写界深度エフェクトの設定方法はほぼ同じです。唯一違うのはポートレート(縦持ち)かランドスケープ(横持ち)の違いです。Mate9のカメラは縦並び(携帯電話を縦にもったときカメラの並びが上下)になっています。その為、縦長の物を撮影する際にポートレートでは視差が出にくいのではないかと想像できます。それを意識すれば、被写界深度エフェクトのエラーを出にくい撮影が出来るのではないかと思います。もっとも私自身は、エフェクト効かせすぎてしまいがちなので、このモードはほとんど使っていません。

で、先のポンジュースの例に戻ってみると縦長の写真になっています。iPhone 8 Plusのデュアルカメラは横並びだし、わたしの仮説がiPhoneには通用しないのかも(画像がクリップされている可能性もあるけど)。
最初、ペットボトルの蓋も丸みがあるので視差が生じないと思ったのですがMate9ではどうやってもペットボトルの蓋でエラーは発生しませんでした。ということで、iPhoneでのエラー発生メカニズムは別物かも知れません。

iPhone持ちのかたの検証を求む。

Rodeo110の5.8GHzアンテナをクローバーリーフ・アンテナに換装してみました。もともと付いているのは下のような地味なアンテナです(中央のアンテナ)。これでも特別に問題があるわけではありませんが、FPVドローンでよく見かけるクローバーリーフ・アンテナにすると多少は電波の飛びが良いのではないかと思いました。

入手したのは下のようなもので、ちょっとオシャレな色付けがされています。

こんなコネクターが付いているものであればOKです。同軸ケーブルの長さは7cmの物がちょうど良いです。

本体の上蓋をとり、コネクターブロックの下にあるネジを外します。コネクターブロックに付いている電源コネクターや2.4GHzアンテナは、そのままでコネクターブロックを浮かすことが出来ればOKです。

コネクターブロックを浮かして、元の5.8GHzアンテナを抜き取り新しいアンテナを挿入します。

同軸ケーブルのルートはネジ穴の外側にします。

出来上がり。

鉄筋マンションのためか、もともと家の中でもFPV画像が見えなくなるデッドポイントがありました。それが改善すれば大成功と思ってテストしてみましたが、新しいアンテナでもまったく同じ結果でした。それでオリジナルのアンテナに戻しましたが、換装後の写真も可愛らしいと評判が良いのでまた付け替えて見ようかと思います。

まだ全然、ちゃんと飛ばせていないRodeo110ですが、ドローン友達の勧めも有ってカメラを交換することにしました。この改造は多くのRodeo110ユーザーが行っているものでRunCamのカメラに換装します。これにより広角でより良い画質の映像をFPVで得られるようになります。

新規に用意したカメラはRunCam Micro Swift 2.1mm NTSCというものです。私が買ったサイトによるとNTSCとPAL、レンズも2.1mmと2.3mmがありました。わたしはより広角な2.1mmを選択しました。

オリジナルのカメラと新しいカメラでマウント幅は同じですが、体積が随分と大きくなるので単純な置き換えは出来ません。そのため色々と部品を削ったりしなければなりません。次のYouTubeビデオの内容を参考に作業を行いました。

まずは元々付いているカメラを外します。機体の構造はややこしくはないので、いくつかのネジを外せば簡単にカメラを外すことが出来ます。

マウント部分の幅はRunCamも同じなので、とりあえずそのまま取り付けます。メイン基板にぶつかるのでやや上向きになりますが、これがちょうど良い角度です。

付属のケーブルを使用しますがピン配置が違うので赤い電源線と黄色のビテオ信号線を基板側で入れ替えます。二つ目の写真が完成図です。カメラ側には2つのコネクターがありますが外側のビデオ信号がある方だけを使用します。
 

上の蓋がカメラにあたるので短くします。寸法はざっくり写真で見たとおりにすれば大丈夫です。グラスファイバー製ですので金ノコがあれば簡単に切り取ることが出来ます。
 

この状態で動作確認を行いました。見た目にこだわらなければ、このまま飛ばしても大丈夫な気がします。カメラの基板が露出しないタイプであれば、わたしもこのまま飛ばすことにしたかも知れません。下にあるビデオは、この状態で飛ばしたものです。カメラの角度は、ほとんど調整出来ませんが、概ね良好な位置になりました。やや上向きに見えますが、この状態で水平に置いて床も見えますし、前進飛行の際にはかなり前傾姿勢になるので、これくらいでちょうど良いはずです。

赤いフロントカバーを取り付けるためには、この部品をなんとか戻さなければなりません。これが結構苦労します。

まず下の丸い足を切り取り、カメラのコネクターが当たる部分に穴をあけ、全体的に薄くします。小さなプラスチック製ですが、一番多用したのは金ノコです。あとはリューターがあると便利です。実際に取り付けながら、当たる場所を削り取っていき、最終的には下のような形状になりました。これでも組み立ての時はかなり無理をしながらネジを締めねばなりませんでした。

赤いフロントカバーも中央の突起部分が邪魔になりますので切り取ります。

以上で完成です。組み上がってみると、そこそこちゃんと出来ているようにみえます。

カメラ換装前と後の動画の比較ビデオです。画像がシャープになっているのと何と言っても圧倒的に広角になっているのが分かります。FPVの経験はまだほとんどありませんが、オリジナルカメラの画角では飛ばしにくいと思います。

FPVドローンWlakera Rodeo110がやってきた

FPV(First Person View) = ゴーグルを付けてドローンの視線で操縦すること、を体験したくてRodeo110という超小型(飛行重量147g)ながらパワフルなドローンを入手しました。

まずは色々と準備作業です。

プロペラガードの装着。広いところだけで飛ばすのなら要らないかもしれませんが、室内や障害物の多い場所で飛ばすことも多くなりそうなのでプロペラガードも用意しました。もともと付いている足を外して、それの代わりに取り付けるものです。足を外す時に気づいたのですが、スクリューがロックタイトが塗られているにも関わらずかなり緩かったです。これはモーターのマウントネジでもあるのでゆるんでししまうのは致命的な故障になります。定期的に緩みをチェックする必要がありそうです。

FPVゴーグルであるGoggle4に録画ユニットを取り付けた。小さな四角の箱でコネクターからリード線が何本か出ているだけのものです。Goggle4の電源線から+5Vを分岐して供給、後はGoggle4の映像出力(コンポジット映像信号)を入力しただけです。このユニットでMicroSDカードに映像を記録します。FPV信号ですしコンポジット映像出力なので画質は期待できませんが、記録として残せるようになりました。

注意) FPVには5.8GHz帯の周波数を使用していますが、日本国内でこれを使用するためにはアマチュア無線の免許が必要です。

軽く室内やマンションの庭で飛ばしてみた印象を買いておきます。
– 丈夫そう。かなり墜落したり転げ回りましたが、壊れません。プロペラはだいぶ傷つきました。予備が一組ありますが、追加の予備プロペラも用意した方が良さそうです。
– バッテリーは5分ほどしか持ちません。練習だとあっという間です。予備電池も2つ発注しました。その後、室内でホバリング練習しながら時間を測ってみると最長で9分弱持ちました。最初に5分と思ったのは勘違いかも。
– STABILIZE Flight Modeはそこそこ安定している。が、それでも結構敏感に動作するので油断するとあちこちぶつかります。
– スタントをこなすにはADVANCED Flight Modeにする必要があります。少しだけ試して見ましたが、すぐにフリップして墜落しました。どこか広いところに出かけて十分な高度を確保してから練習してみたいと思います。
– 普通の操縦もままならない状態なのでFPVゴーグルを付けるとメロメロです。特に高度が良くわからない。これも広いところで練習したいと思います。

Huawei Band2 アクティビティトラッカー

iWOWN i6 proの電池が持たなくなってきたので新しいリストバンドを試しています。

通信機器大手で最近では日本でも携帯電話を販売しているHuaweiのBand2というGPS搭載の製品です。いわゆるアクティビティトラッカーですが、わたし的な使い方は何かしらメッセージが届いた時の通知がメインで、後は万歩計と時計の機能を使用するくらいです。目的は満たしていますが不満もあります。気が付いた事柄を箇条書きでまとめてみます。

[ 良いところ ]
– 電池の持ちが素晴らしい。カタログでは21日スタンバイと書かれています。ただいま満充電からまる8日間経過したところで電池の消耗の激しいGPSテスト(詳細は下の方に書きます)を経てまだバッテリー残が50%になっています。そこそこ激しく使用しても余裕で二週間の稼働が可能と思います。

– ベルトにリングが付いているので安心感がある。いままで試してきた格安な製品はベルトの留める部分が外れて落としそうになったことが多々あります。Huaweiの物はリングが付いているので留める部分が外れてもすぐには落ちません。

– 時刻の確認が簡単。手首を上げる動作で時刻表示するのは各社のリストバンドに搭載されていますが、その機能が思い通りに動くきます(iwownの物が今ひとつだったということですが)。

– 時刻表示のホーム画面に歩数も表示される。わたし的には万歩計でもあるので、これは便利です。

– 完全に日本語対応している。携帯電話の言語設定にあわせて携帯電話アプリケーションと本体が日本語になります。

[ 今ひとつなところ ]
– バイブレーターがかなり弱い。メッセージの着信や電話がかかってくると通知機能により振動しますが、これがかなり控えめです。緩めにバンドを留めておくと全く分かりません。しっかり留めていても、動き回っている時には気づかない事が多いです。

– 通知機能で表示されるメッセージ文字数が少ない。一度に表示されるのは漢字で7文字もしくは8文字しかありません。ひとつのメッセージを複数画面スクロールさせないといけません。わたしは誰からのメッセージかだけが分かれば良いので許容範囲です。

– 通知を蓄積出来ない。通知は一度みたら、それっきりです。また、複数の通知が重なった時には表示されている通知以外は失われるようです。

– Bluetoothの再接続がよく失敗する。携帯電話から遠ざかりBluetoothの圏外に出て接続が失われた後に再び携帯電話の近くに戻っても再接続されないことが多いです。Huawei Wearアプリケーションを画面に表示するだけで再接続されたりもします。自動的に再接続されなくてもアプリケーション上の再接続という文字をタップすれば良いので、わたしとしては許容範囲です。
==> 追記) 母艦を小米5からHuawei Mate9に変更したら再接続の問題はなくなりました。さすが同一メーカーだと調子良いです。

[ その他 ]
– GPSが搭載されている。ランニングモードを開始するとGPSが動き出します。あくまでも目的は走行距離を正確に把握するための物だと思います。Huaweiヘルス上で走行経路が地図上に表示されるので、どこかにGPSのログが入っています。それを取り出せばGPSロガーとして使用できると最初は思いました。しかしながらGPS稼働時のバッテリー消費がとても激しいので、これについては諦めざるを得ませんでした。バッテリー残90%でランニングモードに入り15分ほどでバッテリー残が70%になっていました。ランニングの前後でバッテリーをフルに充電する必要があるレベルです。GPSが搭載されていることが、この機種を選んだ理由のひとつだったので、ちょっと残念です。

ランニングメニューですが実際には歩いています、しかも寄り道しているのもよく分かる。

 

Engadgetの記事「Get Google’s own contacts app on any Android phone」によると以前はNexusとかPixel限定に公開されていたGoogle提供の連絡先アプリケーションが他のデバイスにも導入可能になったとのことで、早速Mate9に導入しました。

以前からGoogle純正カレンダーなどは普通に公開されていたので連絡先だけGoogle純正デバイスのみ公開だったのは謎ではありました。

これが何故嬉しいかというと中華アンドロイドに対してrootなど取らずに後付でGoogleアプリケーションを導入する手順が連絡先アプリケーションが導入出来るようになったことにより完成されるからです。詳しい事情については「Huawei Mate9中国大陸版でGoogleを使う」を御覧ください。

SparkのビデオとログからDashWareで様々なデータを重ね合わせたビデオが作ることが出来ます。詳しくは以前の記事を御覧ください。

ひとつ問題が残っています。それは高度を表示すると海抜表示になってしまいます。希望としては離陸時を0とした相対的なグランドレベルの高度が表示したいです。そのための方法が公式FAQに書かれています。以下、その抜粋です。

Altitude is based on sea level, how do I make it ground-based?

How to make ground based altitude–it will be a single step at the start of every project for you:
-Figure out what the ground altitude is (for example, 750 meters)
-Make a clone of the data profile you are using, so that you can edit it. This can be done in the Data Profile Editor (File Menu > Edit Data Profiles…)
-In this clone add a Math Calculator (bottom left area) that takes the Altitude in meters and subtracts 750. Call this new channel “Ground Based Altitude”, or whatever you want.
-Map your new channel to our appropriate “Positional \ Ground-Based Altitude” type, based on your desired units.
-Save the new data profile.

Every time you make a change to a data profile, or want to use a different data profile in a project, you need to remove then re-add your data file to the project. So re-add your data file to your project and select your new cloned data profile.

Add a gauge to your project that shows ground based altitude, or edit an existing gauge and change the gauge’s input data type to ground based.

これがなかなかに難解で実現できるまでに随分と試行錯誤が必要でした。実際にわたしが行った手順を紹介いたします。

– FAQの手順に入る前に使用しているゲージの編集画面から目的の数値のData Typeを調べておきます。ビデオ画面上のゲージをダブルクリックすると下の画面が開きます。高度に割り当てられているはAltitude / Z Position (Meters)であると確認できます。

– まずグランドレベルの高度を認識します。海抜何メートルから離陸したかということでデータを見ていればすぐにわかります。わたしの場合は116メートルでした。

– Data Profileをコピーし編集を行う。File/Edit Data Profileを開きます。前回の記事で紹介したCSVファイルでは自動的にFlytrexというData Profileが使われますので、それをクローン(上の方の左から二つ目のアイコン)します。Flytrex — Clone (1)というファイルが出来るので、それを編集します。

– 左下のウインドウでMath Calculatorという項目を追加します。Input ValueにElevation Meter、Contstanに116と入力Output Valueは自分の定義値、My Altitudeなどとします。Math OperationはSubtract(Inout Value – Parameter)です。これで目的の値がMy Altitudeという名前で得られます。

– 次に右側のウインドウで得られた値をData Typeにマップします。Input Data ColumnをMy Altitude、Map to Data CategoryをPosition、Map to Data TypeをAltitude / Z Position (Meters)で作成します。実はAltitude / Z Position (Meters)はすでに存在しているので、新しく作った項目を一番上に持ってきて正しく選択されるようにします。

Data Profileを保管したら、いちどProjectからData Fileを削除して、新しいData Profileを使ってCSVファイルを読み直せば目的の高度値が得られているはずです。

FlashAir W-04を買いました

新しいFlashAir W-04を買いました。このモデルからEye-Fi対応のカメラで電源のコントロールが出来るということで、昨年から発売を待っていました。

[ Eye-Fiとして認識されない ]
初代のEOS-Mに入れましたがEye-Fiとして認識されません。互換性に問題があるのだろうかと思いながら2週間ほどEye-Fiとしてのコントロールをしないまま使っていました。実際のところ、それでもまったく問題はありませんでした。

やっと最近になって既定値ではEye-Fi互換機能はオフになっていてアプリケーションの設定からオンにする必要があることがわかりました。落とし穴であったのはAndroid版のFlashAirアプリケーションの設定画面にはまだEye-Fi機能の設定が実装されていないことでした。PC版、私の場合はMac版のFlashAirToolを導入して設定しました。

[ FlashAirアプリケーション ]
Eye-Fiと違って、自分の欲しい写真だけを携帯電話にダウンロードします。その場でInstagramとかにアップロードするのが目的ですので、Eye-Fiよりこちらの方がわたしの使い方には適しています。Keenaiというアプリケーションを利用するとEye-Fiのように自動転送出来るそうですが試していません。

[ その他 ]
体感ですがEye-Fiより転送速度はかなり速いと思います。その場その場で必要な写真だけを転送してることもあり、ストレスフリーです。電池の持ちが悪いという評価をよく目にしますがEye-Fiからの乗り換えのためか、ほぼ気になりません。

DJI Sparkで撮影した動画にログファイルから速度や高度などの情報を重ね合わせて表示する方法の紹介です。

Let me introduce how to overlay flight information gauge to Spark footage.

[ ログファイルの取り出し / Retrieve flight information log file ]
Androidの場合です。内部ストレージの DJI/dji.go.v4/FlightRecord/DJIFlightRecord*.txt が目的のログファイルです。ファイル名にタイムスタンプが含まれています。目的の動画のタイムスタンプより少し前のものを選びます。拡張子はtxtですが実際にはバイナリーファイルです。

For Android, flight information log file is at DJI/dji.go.v4/FlightRecord/DJIFlightRecord*.txt of Android internal storage. File name includes timestamp. File extension is ‘txt’, but this is binary file actually.

[ ログファイルの変換 / Convert log file to csv ]
ログファイルを読める形に変換しなければなりません。いくつかの方法があるようですが、わたしは以下のwebサイトを使用しました。出力はcsvファイルです。

Flight information log file has to be converted to csv file. I use following web site.

http://www.djilogs.com/#/

[ ログデータと動画の合成 / Overlay log data to footage ]
DashWareというWindowsプログラムで行いました。
わたしはうまく組み込めていませんが、DJI Phantom用の追加ゲージなども公開されています。

I use Windows program called DashWare. There is additional gauge data for DJI Phantom also (I can not use this well yet).

– Project画面で動画ファイルとcsv変換したログファイルを追加します。Gaugeについては後から変更しますのでProject Templateは気にしなくても良いです。 Add footage file and csv converted log file on the project wizard. You do not need to care about ‘Project Template’ here, we can change the gauge later.

– Gauge Toolboxで好みのゲージを探して貼り付けます。 Add your favorite gauges from Gauge Toolbox.

– Synchronization画面で動画とログの同期を行います。 Adjust synchronization point by using Synchronization tab.

以上です。ここまでは試行錯誤あるもののさほど難しくはありません。 That’s all about setup.

[ Create Videoでエラー / Error when Create Video ]
最後にCreate Videoで合成後のビデオを出力します。この時に”Error rendering in MediaFoundationMedia Foundation Error + -2147467259″というエラーが出てビデオを作る事が出来ませんでした。海外の掲示板に元のビデオになんでも良いから音声トラックを付けるとエラーしないと書かれていました。確かにSparkから取り出した動画には音声トラックがありません、適当なMP3ファイルをiMovieで動画ファイルに付けたらエラーしなくなりました。

I got an error message ‘Error rendering in MediaFoundationMedia Foundation Error + -2147467259’ when I initiated Create Video function. It could be fixed by adding any audio tracks to the Spark footage (original Spark footage on the micro SD card does not have audio) before add the DashWare project.

[ 高度が0から始まらない / Altitude does not start from 0 ]
飛行高度の表示が目的でしたが離陸時の高度が0ではありませんでした。説明では海抜になっていますが、ちょっと変な数字です。いずれにしても欲しいのは離陸場所からの相対的な高度です。これにはちょっとしたトリックが必要です。

I want display altitude meter on my Spark video. However it does not start from 0. Some of explanation texts said that it is sea level altitude, but it seems to me something different from the sea level also.

公式FAQの”Altitude is based on sea level, how do I make it ground-based”にさらっと方法が書かれています。説明が簡単すぎてなかなか理解出来ませんでした。具体的な手順は以下のリンクを御覧ください。

Official DashWare FAQ mentions about how to change the altitude value from the sea level to ground level. But it is difficult to understand because of too simple explanation. I wrote how to change altitude from sea level to ground level below. This article written in Japanese, but you may find some screenshots for your reference.

DashWare+Sparkビデオで高度表示をグランドレベルにする