Dropbox

[ 関連記事 ]

ドローンにRGB LEDを搭載するもう一つの方法 <- 親記事です
ATtiny85によるLED制御 – ハードウェア実装編
ATtiny85によるLED制御 – BUZZパッドを利用した制御方法
ATtiny85によるLED制御 – UART/LEDパッドを利用した制御方法

[ 参考記事 ]
1. VTX周波数毎に決められた色にする
2. ミニAVRマイコン『ATtiny85』にブートローダーを書き込みArduinoとして使えるようにしてみる!ATtiny85の基本的な使い方!

この二つを読んで頂ければ、このプログラムの概要とATtiny85への書き込み方法が分かります。補足的な事柄を書いておきます。

[ ATtiny85について ]
ATtiny85にはいくつかのパッケージがあります。開発用、大きめのドローンに搭載するにはDIPバッケージ、Tinyに搭載するにはさらに小型のSOPパッケージが良いと思います。SOPにプログラムを書き込む時にはDIPへの変換ソケットがあると便利です。
10MHz動作版と20MHz動作版がありますが、どちらでも大丈夫と思います。

[ ツール類 ]
PCからATtiny85に接続するために何かしらツールが必要です。上のリンクでいくつか紹介されていますが、私は手元にあるArduino Nanoを使用しました。その他にブレッドボードがあると便利です。私はAmazonで色々と部品が付属したキットを購入しました。

[ 接続 ]
上の参考記事2にある「ArduinoとATtiny85の接続」の通りに接続します。記事ではArduino Unoを使用していますが、Arduino Nanoでも全く同じです。ピンの名前を頼りに接続します。写真はDIP版ATtiny85にプログラムを書き込んでいる様子です。

[ 書き込みソフトウェアの準備 ]
ATtiny85をArduinoとして使用します。お馴染みArduino IDEを使ってソフトウェアを書き込みます。

– Arduino Nanoに書き込み用のソフトウェアを導入します。
わたしのArduino Nanoの設定はこんな感じです。

ExmapleからArduinoISPを書き込んで準備完了です。

– ATtiny85を使用するための準備
ATtiny85を使用するためにはPreference/Additional boards manager URL欄に”https://www.arduino.cc/en/software”を追加しました。参考記事2に書かれていたURLでは機能しませんでした。
Toolsメニューの設定を下のように行いBootloaderの書き込みが成功すればATtiny85がAuduinoとして使えるようになります。

[ ATtiny85へのプログラムの書き込み ]
あとはプログラムを作成し書き込むだけです。設定はBootloaderの書き込みと同じです。Sketch(プログラム)のUploadは通常の方法とは異なり”Sketch/Upload using programmer”を使用します。新しいチップに書き込む時はBootloaderの書き込みも忘れないようにしてください。

今回使用したソースコードです。ninjaMoonLightさんが書き始めて、途中から私も参加して共同作業で書いたコードです。条件コンパイルするようになっています。下の状態ではBUZZパッドもしくはスイッチを使用するプログラムになっています。7行目のコメントを外し”USE_LEDPORT”というマクロを有効にするとLEDパッドを使用するためのプログラムになります。setup()の最後にdelay(500)を入れています。これはある構成においてFCの信号が期待通りになるまでに時間がかかった時に入れたものです。現在の使用方法だと必要はないかも知れませんが安全を見込んで入れたままにしています。

// Pin assign
// arduino PIN 0,button = Attiny PIN 5
// arduino PIN 4,RGB LED = ATTiny PIN 3

// Uncomment following macro (USE_LEDPORT) defintion if use UART/LED_Strip as switch
// UART/LED_Stripをスイッチとして使う場合は以下のマクロを有効にする
//#define USE_LEDPORT

#include <EEPROM.h>
#include <FastLED.h>

//LEDの数
#define NUM_LEDS 80
//LED信号ピン
#define DATA_PIN 3
//ボタンのピン
#define myButton 0

#define NUM_COLORS 4
#define NUM_MODES 3

CRGB leds[NUM_LEDS];
CRGB color = CRGB::Black;

int currentColor = 0;
int currentMode = 0;
int prevColor = -1;
unsigned long prevTime = 0;

int flgTimer = 1;
unsigned long btnTimer;
const unsigned long shortPress = 30;
const unsigned long longPress = 800;

void blinking() {
  unsigned long time = millis() / 100;
  if (time != prevTime) {
    FastLED.setBrightness( 255 );
    for (int i = 0; i < NUM_LEDS; i++) {
      if((time % 2) == 0){
        if((i % 2) == 0){
          leds[i] = color;
        } else {
          leds[i] = CRGB::Black;
        }
      } else {
        if((i % 2) == 0){
          leds[i] = CRGB::Black;
        } else {
          leds[i] = color;
        }
      }
    }
    FastLED.show();
    prevTime = time;
  }
}

void heartBeat() {
  unsigned long time = millis() / 100;
  if (time != prevTime) {
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i] = color;
    }
    FastLED.setBrightness((7 - time % 7) * 255 / 7);
    FastLED.show();
    prevTime = time;
  }
}

void normal() {
  if (currentColor != prevColor) {
    FastLED.setBrightness( 255 );
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i] = color;;
    }
    FastLED.show();
    prevColor = currentColor;
  }
}

void setup() {
  currentColor = EEPROM.read(0);
  if (currentColor < 0 || NUM_COLORS <= currentColor) currentColor = 0;
    currentMode = EEPROM.read(1);
  if (currentMode < 0 || NUM_MODES <= currentMode) currentMode = 0;
#ifdef USE_LEDPORT
  pinMode(myButton, INPUT); // button
#else
  pinMode(myButton, INPUT_PULLUP); // button
#endif
  ///////LED
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); // GRB ordering
  // following delay may not be required
  delay(500);
}

void loop() {
#ifdef USE_LEDPORT
  if (digitalRead(myButton) == HIGH) {
#else
  if (digitalRead(myButton) == LOW) {
#endif
    if (flgTimer) {
      btnTimer = millis();
      flgTimer = 0;
    }
  } else {
    if (!flgTimer) {
      unsigned long diffTime = millis() - btnTimer;
      if (diffTime > longPress) { // Long pressed
        currentMode++;
        if (currentMode >= NUM_MODES) currentMode = 0;
          EEPROM.write(1, currentMode);
      } else if (diffTime > shortPress) {
        currentColor++;
        if (currentColor >= NUM_COLORS) currentColor = 0;
        EEPROM.write(0, currentColor);
      }
      flgTimer = 1;
    }
  }

  switch (currentColor) {
    case 0: color = CRGB::Red; break;
    case 1: color = CRGB::Green; break;
    case 2: color = CRGB::Blue; break;
    case 3: color = CRGB::White; break;
  }
  switch (currentMode) {
    case 0: normal(); break;
    case 1: blinking(); break;
    case 2: heartBeat(); break;
  }
}

HDZeroゴーグルにはHDMI出力があり常にゴーグル内で見ている画像を外部のディスプレイに映し出すことが出来るようになっています。MacBookの外付けディスプレイを時々切り替えてゴーグルの画像を見ていましたが、その時にはMacBookで使用できる無くなるわけで色々と不自由をしていました。そこで入手したのがHDMIからUVCに変換してくれるデバイスです。そういうわけで、これはHDZeroゴーグルに限らずHDMI出力をPCや端末で表示させるための方法です。出張先でFire TV Stickを見るなんてことも出来そうです。

GUERMOK USB 3.0 HDMI to USB C オーディオ キャプチャ カード、4K 1080P60 キャプチャ デバイスというものです。

試したのは小米MiPad5というアンドロイドタブレットです。USB Cameraというアプリを導入したところ何も悩むことなく画面が表示できました。

ただしHDZeroゴーグル側はHDMIコネクターちょっと小さいやつです。それとキャプチャーデバイスを単純な接続すれば大丈夫です。

MacBookでもQuickTome Playerで入力デバイスをUSB3 Videoを選択したら表示できました。

Insta360 GO 3のカメラ本体は小型でFPVドローンに搭載するのに適しています。ただし初代Insta360 GOに比べるとだいぶ大きくなり、重量も35gほどあり超小型のドローンには少々重くなっています。
そこで試しに100g未満の2S FPV機に載せて飛ばしてみました。重さは感じますが、慣れてしまえば軽いアクロバティクな動作も可能でした。ということで、GO 3をFPV機に載せて撮影する時のわたしの設定や気がついた事柄をつらつらと書いておきます。

[ ビデオモード ]
動画の撮影には二つのモードがあります。撮影時に縦横比やスタビライズの掛け方を決めておく「動画」、撮って出しが可能な簡便な撮影モードです。もうひとつは「FreeFrame動画」で初代GOからある縦横比もスタビライズも後から携帯電話アプリもしくはPC上のアプリで決定を行うモードです。これはカメラのセンサーをフルに活用し真四角くかつ丸い動画を記録します。四角で丸いという意味は下の写真をご覧ください。これをアプリケーションで加工します。最近の流行りの縦長動画も後から作れます。またスタビライズは同時に記録されているジャイロデータを使用します。スタビライズの掛け方も後から選択できます。
FPVドローンではFreeFrame一択とわたしは考えます。

[ 録画可能時間の謎 ]
わたしのGO 3は64GBモデルです。これで実際のところどれくらいの動画が撮影できるのかが気になるところです。本体のプレビュー画面の左上に残り時間らしきものが表示されています。そこにはFreeFrame動画の場合は1h37mと出ています。FreeFrame動画もプレビュー画面で縦横比、解像度、フレーム数を選択することが出来ます。ところがどの設定を選んでも残り時間が変わりません。そこで実験です。

[ FreeFrame動画の実験 ]
まずは1440P/50FPSにして実際に録画をしてみたところ1時間35分ほど録画出来ました。表示されていた残り時間は正しいようです。次に各設定で録画したデータの検証です。結論から言うと、どの設定にしてもビットレートは約80Mb/sと変わりませんでした。つまりストレージの消費は設定に関わらず同じですので残り時間が同じになるのは当然です。

もう少し掘り下げてみます。画面上の選択肢は三種類あります。縦横比が16:9と9:16です。これはプレビュー表示の変更だけであることは容易に想像出来ました。解像度は1440Pと1080Pが選択できますが、実際に録画されたデータを検証するとどちらも2688×2688の動画になっています。動画を再生してみても差があるように思えません。もしかすると将来的には差が出るような計画なのかもしれません。フレームレートは50, 30, 25, 24が選べます。これは正しく録画されたデータに反映されていました。ただしビットレートはどれも同じです。画質に差が出ているかテストしてみましたが、ほとんど同じに見えます。1440P 50FPSがやや荒いようにも感じますが、ほぼ気のせいレベルです。静止した対象物でのテストしか行っていませんので、動きがある場合は何か違う可能性もあります。とりあえずは好みのフレームレートを選択すれば良いと思います。もしかするとこれも将来のファームウェア更新で変わってくるのかもしれません。

[ ISO/シャッタースピード/WB ]
お手軽撮影が売りのInsta360 GOシリーズですし、ISO, シャッタースピード, ホワイトバランスを自動で撮影しました。私的には概ね問題無しです。

木陰を通り過ぎる時にじわっと画面の明るさが変化しています。GoPro Hero6で同じことをすると急激にかくっと感度が変化してしまうと思います。それを経験して以来、GoProではISO固定で使用していますので、最近のモデルで何か変わったかどうかはわかりません。

じわっとした感度変化も嫌う場合はISO, シャッタースピードを手動設定するしかありません。プレビューが簡単に出来るので手動でも失敗がないのは大きな利点です。

[ スタビライズ ]
Gyroflowを使用しています。同期ポイントの手動設定は必要ありません。FOVやスタビライズの強さなど自由に変更出来るのが魅力ですが、規定値のままで問題無しです。画面の補正はリニアな感じになります。縦長の動画やワイドレンズっぽい湾曲した画面が欲しい時にはInsta360 Studioを使用すると良いでしょう。

[ カラー・プロファイル ]
シーンに合わせた多彩なフィルターが用意されていますが、わたしはFlatを使用しています。これは画像編集ソフトで色の調整が必要になります。どのLUTを使うべきか情報が見当たりませんがCaddx Peanutと同様にInsta360 X2用のLUT、ONE-X2-LUTを適用すると良い感じにノーマライズされます。X3-LUTでも良いかもしれません。X2用もX3用も、どちらもほぼ同じに見えます。

LUTファイルはInsta360のダウンロードページにあります。

[ アクションポッド ]

液晶の付いたポッドは特別なことをしなくても常にカメラ本体と接続されています。ドローンを離陸位置にセットしてからポッドでプレビューを確認し録画をスタートする。また着陸したらポッドから録画を停止する。という使い方が出来ます。FPVドローンの使用シーンにおいて完璧なリモコン装置です。

[ 風切り音 ]
動画の中にプロペラ音を取り込むのが好きなので録音機能が搭載されているのはとてもありがたいです。
音声設定は3通りあります。「風切り音低減」「ステレオ」「方向性強調」です。「風切り音低減」を使用したところ、今まで試したどんなHDカムより優秀でした。ほぼ風切り音のない動画が出来上がりました。

[ NDフィルター ]
購入時にはレンズ保護のための透明なフィルターが装着されています。まだ公式なNDフィルターは発表されていないと思います。サイズ的にはCaddx Peanut用のNDフィルターが装着可能でした。ただし、このNDフィルターは色温度が変わってしまうことが分かっています。当面、NDフィルターは使用せずに撮影することにします。

[ マウント ]

Insta360 GO 3マウント(GoPro互換)

Insta360 GO 3マウント(RunCam Thumb Pro共通)

いずれFPVドローンに載せるつもりのInsta360 GO 3を取り急ぎ車に載せて運転の様子を撮影してみました。

入手したのは64GBの標準キットです。GoPro標準マウントが必要な場合は別売のマウントが必要ですが、一般的な用途であれば標準キット(通常版)で十分です。すでに紹介動画も多数ありますし、ここでは詳細は省き使ってみた感想的なことを書いておきます。

GO 3の今までになかった特徴は液晶パネル付きのポッドに取り付けると一般的なアクションカメラ的に使えるところです。まずはアクションカメラ的な使い方を試してみます。

車のダッシュボード上にキット付属のスティキーパッドで良い具合に固定できます。簡単に剥がすことが出来るのですが、普通に運転していて動いてしまうようなことはないという絶妙な粘着力です。また車のUSB充電コネクターから給電しながら録画すれば電池切れの心配はありません。

最初はFreeFrame動画で撮影しました。これは最初のInst360 GOと同じで、センサー全体を生かした四角い動画を収録して、ポストプロセスにて16:9, 9:16など画像縦横比の変更や手ブレ補正をかけるモードです。2688×2688 50FPS、約80Mb/sで録画するため64GBの内蔵ストレージは1時間30分ほどで一杯になってしまいました。iPhoneにデータを吸い上げてから続きのテストを行いました。iPhoneにコピーしたデータはiPhone上のアプリケーションで処理することも出来ますし、生データをiPhoneからPCにコピーしてPC上のアプリケーションで処理することも簡単に行えます。

64GBのストレージでは長時間ドライブの記録は無理かとも思いましたが、今回のGO 3ではアプリケーションによるポストプロセスが必要のない撮って出しの出来る動画撮影も出来ます。解像度を低めにすれば大幅に記録容量を節約できます。64GBでも1080P/30FPSなら4時間以上、1440P/30FPSならば3時間弱の録画が可能です。ということで1440P 30FPSでも録画してみました。

録画した結果はYouTubeにアップロードしています。

ISO/シャッタースピード全て自動にセットしています。トンネルの出入りでの明るさ調整も滑らかで好印象です。FPVドローンでのGoPro撮影では少なくともISOを固定しています。そうしないと木陰から陽の当たるところに出る時などに不自然な明るさの変化がありました。GO 3はもしかすると自動のままでも大丈夫かもしれません。夜間の撮影はややノイズが多いような気もします。

色々なメカなどとても良く出来ていて所有するだけでも満足感が得られます。唯一、後悔しているのは128GBにしておけば良かったなということくらいです。

OWON HDS2102Sは多機能ですが、ここでは主機能である2chオシロスコープについて基本操作を書いておきます。操作パネルが分かりづらいので手っ取り早く使うための手順を書いておきます。その他の細かい事柄は徐々にわかってくるものと思います。

オシロスコープの基本操作はわかっているものとして書いていきます。プローブはx10が規定値です。またプローブの調整についても書きません。

プローブを一本だけ使って1chの操作から始めます。電源をオンにして何か適当な波形が出るところを計測してみます。何もなければスコープの右側にある矩形波が出ているテスト端子に接続します。まずは[Auto]ボタンを押します。だいたい何となく波形が表示されるように自動的に設定されます。これを起点に細かい調整を行います。

[ 水平方向の調整 ]
水平方向、時間軸の調整を行うにはまず[HOR]ボタンを押します。一瞬、方向ボタンの説明が出ます。中央の方向ボタンの上下でタイムベースのレンジが変わります。波形の幅が変化します。一マスあたりの時間は画面の上の方に”M:500us”の様に表示されています。方向ボタンの左右を押すと波形が左右に移動します。最初はトリガーポイントが中央にありますが、それが少しづつ変化します。

[ 垂直方向の調整 ]
垂直方向、電圧軸の調整を行うには[CH1/2]ボタンを一度押します。水平方向の時と同じく方向ボタンの説明が出ます。方向ボタンの左右でレンジが変わります。一マスあたりの電圧は下の方に”1 1.00V”の様にチャネル番号と共に表示されています。方向ボタンの上下で波形が上下に動かせます。

[ トリガー ]
複雑な波形の場合、自動で設定したトリガーポイントでは都合が良くないことが多いです。[Trig/△]ボタンを押して、上下のボタンでトリガーポイントを移動します。初期状態では波形の上昇時にトリガーがかかります。下降時にトリガーがかかるように変更するには[Trig/△]ボタンを押します、ファンクションキーのメニューを2/2を出します。これは必要に応じて[F4]ボタンを押します。[F1]ボタンを押してSlopeを変更します。トリガーの情報はスクリーン右下に表示されています。

[ 2ch測定 ]
プローブ2本使って[Auto]ボタンを押せばそれぞれのチャネルが上下に適当に配置されます。[CH1/2]を押すたびにCH1とCH2の選択が切り替わり、それぞれで垂直方向の調整とカップリングなどチャネル毎の設定を行います。トリガーは初期状態ではCH1に設定されています。CH2でトリガーを取る場合は[Trig/△]ボタンを押します、ファンクションキーのメニューを1/2を出します。[F1]ボタンを押してSourceをCH2に変更します。

これだけ分かっていれば、とりあえず普通に使えます。シングルショット、画像の停止、画面上の2地点間の時間差の測定など必要な機能は揃っていますし、基本操作が分かればメニューを探って行けば見つかります。

日本で新たな生活を始めるにあたり考えていたのはチューナーレスTVの購入でした。今まさに新製品ラッシュで選択肢が増えつつあります。ほとんどが新規ブランドでAndroid搭載のスマートTVです。製造元が不明な物が多くて実績不明だったり、Android部分のスペックが低めなのが気がかりでした。そこで考えたのはそこそこ実績のあるメーカーの純粋なモニターです。

[ JAPANNEXT JN-VT5001UHDR ]
結局購入したのはJAPANNEXTのハイコントラストSVAパネル搭載のモデルです。あえてコントラストの高いパネルにしてみました。IPSと比べて視野角が狭い可能性もありましたが、実際に見てみると十分な視野角を持っています。実用上問題なし。

色合いなどの設定は、結局のところプリセットのものを使用。使用している設定画面は以下の通りです。HDMI CECなども結局のところ使用していません。


内蔵スピーカーも一応試してみましたが、想像通りおまけレベルでした。

[ JBL BAR5.0 MultiBeamブラック ]
サウンドバーはJBLのお手頃価格の物にしました。DENONとSonyの低価格帯の物で迷っていたのですが、何故かJBLになりました。特別な決め手はありません。なんとなく決めました。

そのまま繋げばとりあえず使えますが、まずは自動で行う音場測定=キャリブレーションだけは行っておきます。あとは好みにより低音の調整を行うくらいです。携帯端末からの音声をWiFi経由で再生する場合はGoogle Homeを利用してWiFi接続を設定するのが簡単でした。

AVアンプにサラウンドスピーカーを設置した場合には及びませんが、そこそこ広がりが感じられますので手軽さを考えると十分に価値があるものと思います。

[ Amazon Fire TV Stick 4K Max ]
映像ソースとしてはFire TV Stick 4K Maxを購入しました。これひとつで現在のところAmazon Prime, Amazon Music, TVer, Abema TV, Desny+などを楽しんでいます。

最初は特に設定変更など必要ないと思っていましたが、設定を眺めてみて二つだけ変更しました。色深度を8ビットから12ビットしたのとダイアログエンハンサーをオンにしたことです。

[ 接続 ]
いろいろ試した結果、Fire TV StickをサウンドバーのHDMI INに接続しパススルーしたHDMI OUTをモニターに接続することにしました。他に試した接続はFire TV Stickをモニターに接続し、モニターとサウンドバーを光接続するという方法です。この場合モニターの設定で光出力をビットストリームにしてもFire TV StickがPCM接続しか認識しませんでした。


上はパススルー接続でのテスト結果です。

[ 機器連携 ]
結局使っていませんがJBL BAR5.0はHDMI CECや光ケーブルの信号により自動的に電源をオンにする機能があります。私の使っているパススルー構成でも、この自動電源オンの機能を利用することは出来ますが、JBL BAR5.0の入力がTVになります、それをHDMI INに切り替えなければならないので、自動電源オンの利便性を相殺してしまいます。

モニターのHDMI CEC(説明書によるとHDMI CECは動作保証外となっています)を利用するとモニターのリモコンでFire TV Stickの操作が出来るようになりますがパススルー構成だとJBL BAR5.0に悪影響があるので使えませんでした。

結局使えているのはFire TV StickのリモコンからJBL BAR5.0の電源と音量のコントロールを行うことだけです。Fire TV Stickの初期設定の時に使用しているテレビとサウンドバーの選択画面があります。残念ながらJAPANNEXTは選択肢にありませんでした。JBL BAR5.0のみ設定しました。これで普段はモニターとFire TV Stickのリモコンだけで操作できています。

上海のロックダウン状態で買い物が出来るのかというチャレンジも兼ねてXiaomi Pad 5 Proとカバーにもなるハードウェアキーボードを購入してみました。小米のオフィシャルアプリで購入すると通常であれば上海の倉庫にあれば24時間かからずに到着します。今回は流石にそこまで速くはありませんでしたが、南京からの発送で3日ほどで到着しました。

最初、手にした時の印象は重い!でした。本体は520gくらいと普通ですが、キーボード付きカバーを付けるとなんと888gもありました。キーボード無しのカバーも欲しいかもです。

主な目的は動画再生です。Amazon Primeを試してみると画面は十分に綺麗ですし音も広がりを感じます。Dolby Atmosが効いているからなのかどうかは分かりません。音質がすごく良いとは言いませんが、十分に合格点です。

中国国内販売のAndroidタブレットなのでいわゆる中華タブレットですが、小米が本気で作ったハイエンドタブレットなのでスペックはかなり強力です。Pad 5 Proにはグローバル版も最近発売されたようですが、ここでは中国版について書きます。

[ Google対応 ]
他の小米ハイエンド端末と同様でアカウントの追加にGoogleがあります。中国国内の場合、当然ながらGFW回避が必要です。アカウントを追加するとPlay Storeが自動的にダウンロードされているようでした。わたしは何か途中で失敗したようで導入が完了出来ていませんでした。それでも心配は無用。小米の応用商店にPlay Storeが登録されていますので、そこから導入しなおしました。後はPlay Storeから必要なアプリケーションを導入していけば良いです。

[ ロケール ]
小米の中国版には日本語ロケールは含まれていません。中文あるいはEnglishで問題はないですがどうしても日本語ロケールが必要な場合はMoreLocale2を導入します。

[ ネトフリ問題 ]
中華タブのネトフリ問題というのがあるらしいです。結論から言うと問題無しと思われます。ネトフリには加入していないので直接的な確認は出来ていません。DRM Infoというアプリで表示されるSecurity LevelがL1になっている。Amazon Primeの番組が高解像度で再生出来る。ということからネトフリ問題は存在しないと推測します。

[ キーボード ]
薄いキーボードですがストロークの浅いアップルのキーボードに慣らされた身には、ごく自然に使えます。Gboardで試したところ日本語入力(ローマ字入力)も問題なく行えます。ただしGboardで英語モードと日本語モードのどちらになっているかが画面上で確認出来ません、何か文字を入力して確認するしかないです。
かな入力も可能な気はしますが、まだ試してはいません。Gemini PDAの時はかな入力キーマップのカスタマイズまでやってたのだけど詳細をまったく覚えていない。
キーボードがあるとめちゃくちゃ便利ですね。って、iPadをキーボードを付けて使っている人からすると今更な感想ですね。手が自然と動いてタスクリストが出せました。他のショートカットは無いかと探していたら⌘キーの長押しでショートカットの一覧が出ることに気づきました。ホーム画面だけではなくアプリ画面でも⌘キー長押しすると、アプリ固有のショートカットが表示されます。

もともとTPUはサポートされていない3Dプリンターですし、何度もひどい失敗を重ね、一年越しでやっと使えるレベルの出力が得られるようになりました。

重要なポイントは、

  1. いわゆるダイレクト式ではないので、押出機構からエクストルーダーに素材を送るチューブを内径の細いものにする。フィラメントの直径1.75mmに対して内径が1.9mmのテフロン・チューブに変更しました。Capricornが有名ですが、なもなき中国製を格安(5.8元≒100円)で購入しました。
  2. 実績のある良いTPUフィラメントを使用する。
  3. 適切な印刷速度を設定する。PLAよりだいぶ遅い速度になります。今は、以下のスピードで試しています。

かなり常識的なところでTPUの出力出来ていますが、ここにいたるまで挫折の繰り返しでした。簡単に書くと、最初はeSUN eLasticというフィラメントを使用。これがすぐに送り機構内で絡まってしまいます。絡まったフィラメントを取り除くためにはプリンターの分解が必要なので、一度発生させるとしばらくはやる気が失せます。チューブを交換後にも絡まったりして随分と時間が経過しました。次にお試し用の少量のTPUを購入したのですが、これが煮ても焼いても食えない代物でした。絡まらないもののまともにフィラメント送りが出来ません。しばらくして、気を取り直してeLasticで極端に速度を落としたら何とか出力出来ました。ただ柔らかすぎ。そこで友人におすすめTPUを聞いて購入した無印TPU、これが今までの事が嘘のように出力出来ました。と、かれこれ一年がかりでTPUを使えるようになった次第です。

この無印TPU、推奨温度も書いてありません。適当に高めの温度を設定すると出力の質が今ひとつ。友人におすすめを聞いて210度で出力したら十分に使える出力が得られました。速度は上のスクリーンキャプチャの通り。形状によってはかなり糸を引くので引き戻しを0にしています。それでも糸を引いていますが、まあまあ使える状態にはなりました。まだまだ試行錯誤中。

糸引き対策の一つとして、エクストルーダーの冷却を良くするWindDuctのSTLファイルをもらってきて交換してみましたが、効果があるのかどうかは不明。気持ち的には効いてると信じています。

だいぶ前から中国メーカーの作る三脚が良いという話は色々なところで見ていて気にはなっていました。

そしてたまたまライブで見ていたTJさんの開封動画に背中を押されてBENRO SC05Kを購入しました。上海に在庫のあるお店に発注したのでライブ配信の翌日には手元に届きました。

堅牢な作りですが軽量です。作りの良さで所持するだけでも嬉しくなる製品です。脚の長さも変わらないミニサイズに徹した三脚です。脚の広がる角度が三段階に変化するので、かなり大きなレンズを載せた一眼レフでも安定しています。

大きなレンズ付きの一眼レフを縦位置にすると、さすがにバランスを取るのが難しいです。

携帯電話を取り付けるホルダーも付属しています。

さっそく実際に使ってみました。三脚を使うシーンといえばスローシャッターか動画撮影です。やや無理やりですが小型ドローンの離陸を一眼レフで動画撮影してみました。

時折風が強く吹く日でしたが、とても安定していてまったく不安を感じさせませんでした。撮影した動画は冒頭のほんの一部ですが、この時に撮影したインスタ動画を貼っておきます。

私が中国で購入した価格は340元、およそ5000円ほどでした。それよりはだいぶ高くなりますが日本のアマゾンでも見つかります。

FPVドローンに搭載するFCに記録されるログの中からジャイロデータを抽出し、それを利用して動画の安定化を図る方法があります。色々と解説が出ていますがWindows 10によるものがほとんどな気がします。ここではmacOS Big Surでの事例を紹介します。

本来の目的はドローンの飛行中の動画に適用するものですが、一眼レフの上にFCを単独で載せて手持ち撮影の動画の安定化を試してみようという試みでもあります。

大きな流れはBlackbox Log Viewerでログをcsv形式で保管、それをgyroflowで処理し動画をスタビライズするというものです。これとは別にBlackboxToGPMFというソフトウェアでGoProコンパチの動画ファイルを作り、既存のReelSteadyGoで処理する方法もあります。

2021/02/24追記)
以下Pythonのセットアップから書いていますが、直接実行可能なパッケージが提供されるようになりました。
Gyroflowの公式ページのDownloadにある実行可能ファイルをダウンロードします。macOSの場合は拡張子dmgになっています。これを実行するとgyroflowという実行ファイルとcamera_presetsフォルダーが見えます。これを適当な場所にコピーしてgyroflowをダブルクリックもしくはターミナルから実行するだけです。ただし起動にかなり時間がかかります。わたしのMacBook proでは一分近く待つとgyroflowのウインドウが開きます。

[ Pythonのセットアップ ]
わたしのmacOS Big SurにはPython2.7とPython3.7が最初から入っていました。必要なのはPython3系なので3.7で試してみましたがうまく行きませんでした。最新の3.9なら大丈夫そうということで、常套手段であるpyenvを導入して色々とやってみましたが問題続出でひとつひとつ片付けていってもダメでした。思い直してbrewもpyenvも忘れることにしてパッケージで導入しました。以下手順です。

https://www.python.org/のDownloadページから現時点での最新版3.9.1のmacOS版インストーラーをダウンロードして導入。
– ターミナルを開き直すとpython3.9が使用可能になっています(python3で起動できます)。
– “pip3.9 install numpy” でNumPyモジュールを導入します。
同様に以下のモジュールを順次導入します。
– opencv-python, PySide2, scipy, orangebox, construct, python-dateutil, hachoir, matplotlib, VidGear

[ Gyroflowのインストール ]
GuroflowのダウンロードページにmacOSの実行ファイルがありますが、今ひとつ動かし方が分かりません。GithubからソースコードをダウンロードしてPython3で起動することにします。
https://github.com/ElvinC/gyroflowのCodeボタンを押してzipで全てのコードをダウンロードし任意の場所に解凍します。
ターミナルを開き解凍したフォルダーにcdしてpython3 gyroflow.pyで起動できます。

[ FCの準備 ]
一眼レフの上に適当なマウントを作ってFPVドローン用のFlight Controllerを単独で載せました。なるべく多くのログが取得出来るようにMicroSDカードが使えるFC(MATEX F722-STD)にしました。給電はモバイルバッテリーからUSBで行います。一般的には飛行開始時に行うARM動作でログの取得を開始するようになっていますが、FC単体ではログを開始するきっかけがありません。そこで下のCLIコマンドにて電源投入と同時にログを開始するようにしました。
blackbox_mode = ALWAYS
問題はログを停止する手段がないことです。仕方がないので録画終了からしばらく時間をおいてUSBケーブルを抜いて電源を切るようにします。

[ 録画 ]
後からジャイロデータと動画の同期を行う必要があるので、動画の最初と最後にわかりやすい動きを記録しておきます。カメラを大きく横と縦に振っておくと良いです。

[ 実際の手順 ]
動画にまとめましたので、それを見ていただくのがわかりやすいと思います。

いくつか動画の補足を書いておきます。
– YouTubeに作者らしき人からコメントをいただきました。Initial rough gyro offsetを計算してセットしていますがgyroflowは+/-5秒で同期ポイントを探すので5秒以下のズレならば何も入力しなくても良いそうです。

– もとの動画は59.94FPSでした。これをgyroflowで処理する方法もあるのかも知れませんが、よく分からないので予めDaVinci Resolveで30FPSに変換してから使用することにしました。
Blacbox Log Explorerでオフセットを調べていますが、これはあまり正確な数値を追求しなくても大丈夫です。gyroflowが自動的に同期タイミングの調整を行ってくれます。
– gyroflowはBlackboxログの生ログを読み込めますが、今の所うまく動かない気がします。blackbox log explorerでCSV形式で書き出したものはうまく処理出来ます。
– Gyroflowのcamera presetsが何者かは良く知りませんが、色々とためして一眼レフで取得した動画で歪の無い出力が得られるものを探し当てたものがlgg6_normal_16by9というだけです。論理的な理由があるわけでは無いです。
– Syncを計算した後にDelay for sync 1とDelay for sync2が表示されます。これを見ると動画の最初と最後では随分とオフセットが変わるのがよく分かります。
Exportした動画は何か不具合があるようでmacOSのプレビューも出来ないですしDaVinci Resolveに読み込むことも出来ません。こんな時の定番がVLCです。VLCは他で読めない動画ファイルの再生が出来ます。VLCに読み込んで改めて書き出すことによりDaVinci Resolveに取り込むことが出来るようになりました。これはいずれgyroflowで修正されるものと思います。
=> 環境依存のようですが、Color profileがyuv444の動画になっているのが原因でした。gyroflowの画面に書かれているとおりにExportする時にyuv420pという指定を”FFmpeg color spae selection”という所に書き込めばOKです。
– Exportした動画はフレームが踊っている変わった動画です。中央を上手に切り取ることによりスタビライズした動画となります。