Dropbox

TinyViewPlus-NGのMacOS版をビルドしました

一本のHDMI入力で4channelまとめて表示できるVTXチューナーを利用してお馴染みのTiny View Plusを利用できるように改造したものをzubon2003さんが「TinyViewPlusの受信機回りをスッキリさせたい。」という記事で公開されています。ただし実行ファイルはWindows版のみです。ソースコードは公開されていますのでそのままMacOS版としてビルドすることが出来ました。

私のGithubにてMacOS版のバイナリーを公開しています。

[ テスト ]
ドローン部長よりHawk eye FOUR EYESをお借りできたので動作確認を行いました。HDMIアダプターは”GUERMOK USB 3.0 HDMI to USB C“というのを使用しました。

fpv.xmlの編集が必要です。TinyViewPlusNG.appを右クリックして「パッケージの内容を表示」を行います。その中のContents/Resources/Data/Camera/fpv.xmlを私の場合は以下のようにしました。

<camera>
    <name>USB3 Video</name>
    <camnum>4</camnum>
    <description>USB3 HDMI</description>
    <grab>
        <width>1920</width>
        <height>1080</height>
    </grab>
    <crop>
        <x>0</x>
        <y>0</y>
        <width>1920</width>
        <height>900</height>
    </crop>
    <draw>
        <aspectRatio>4:3</aspectRatio>
    </draw>
</camera>

nameはHDMIアダプターにより変わります。grab/width,heightも実際の解像度に合わせます。どちらもVLCもしくはQuickTime Playerでキャプチャー入力を行うと調べられます。

解像度だけ合わせて手持ちの65タイニーを写してみたところ下にゴミが出ました。

そこで勘でgrab/heightを900にしたところ良い感じになりました。

実際の動作もスムースでしたので、実際のレースでも使えると思います。

macOSの野良アプリ制作事情

数年前から正式に署名の付いていないmacアプリをダウンロードして実行することに対して締め付けが強化されてきました。最初の頃は右クリックで開くを実行すれば大丈夫だったのですが今やターミナルを開いて以下のコマンドを投入するというのが常套手段になってしまいました。

xattr -cr hogehoge.app
もしくは
xattr -d com.apple.quarantine hogehoge.app
です。後者の方が起動時に出るプロンプトが減らせます。

ターミナルを使用しない方法は無いものかとGrokに聞いたら教えてくれました。

プログラムを配布する前に以下のコマンドを実行しておきます。
codesign --deep --force --sign - hogehoge.zpp

一度実行後にシステム設定/プライバシーとセキュリティを開くとアプリケーション名がブロックされたという表示とともに「このまま開く」ボタンが表示されるているので、それをクリックします。それに続きいくつかのダイアログに答えるとプログラムが起動します。ターミナルを開く方が時間的には速い気はします。GUIだけで対処できるのでオプションの一つには成りうると思います。

これだけではうまく行かないようです。あとで本当のオレオレ署名を試してみます。

– 追記 (2026/01/20) –
結局のところ確実なのはxattrコマンドだけのようです。これに関して別記事を書きました。
https://www.nkozawa.com/blog/archives/8626

OSD menuでLEDの色を変更する

WTW四国ではタイニーレースにおいて全周LED搭載かつVTXチャネル毎に色を指定するというレギュレーションを推進しています。以前からVTXチャネル連動でLEDの色を変更する方法を推奨してきましたが、アマチュア無線のバンドプランが変更になりE1/F1/F4以外のチャネルの使用も可能性が出てきました。VTX連動のLED色は周波数で決まっており、Raceband基準の決め打ちになっているため使用するチャネルによっては同じ色になってしまいます。

そこでOSD menuを使用して手作業で好きなLED色を選択する方法を紹介いたします。

[ 前提 ] 「FPVドローンのLED実装、ハードウェアとBetaflightのビルド」が完了していること。

すでに何かしらLEDが光る設定になっている場合は、下のOSD menuの操作例に進んでください。

LED構成画面は操作がややこしいので下のコマンドをCLIに流し込むあるいはプリセットで構成するだけで良いです。

[ プリセットの使用 ]
BetaflighのLED設定を行うプリセットを作りました

[ CLIの使用 ]
LED数は64個を想定していますが、32個しかない場合でも問題ありません。余分なLEDの分はエラーメッセージが出ますが無視してください。

# feature
feature LED_STRIP

# led
led 0 0,0::CT:14
led 1 1,0::CT:14
led 2 2,0::CT:14
led 3 3,0::CT:14
led 4 4,0::CT:14
led 5 5,0::CT:14
led 6 6,0::CT:14
led 7 7,0::CT:14
led 8 8,0::CT:14
led 9 9,0::CT:14
led 10 10,0::CT:14
led 11 11,0::CT:14
led 12 12,0::CT:14
led 13 13,0::CT:14
led 14 14,0::CT:14
led 15 15,0::CT:14
led 16 0,1::CT:14
led 17 1,1::CT:14
led 18 2,1::CT:14
led 19 3,1::CT:14
led 20 4,1::CT:14
led 21 5,1::CT:14
led 22 6,1::CT:14
led 23 7,1::CT:14
led 24 8,1::CT:14
led 25 9,1::CT:14
led 26 10,1::CT:14
led 27 11,1::CT:14
led 28 12,1::CT:14
led 29 13,1::CT:14
led 30 14,1::CT:14
led 31 15,1::CT:14
led 32 0,2::CT:14
led 33 1,2::CT:14
led 34 2,2::CT:14
led 35 3,2::CT:14
led 36 4,2::CT:14
led 37 5,2::CT:14
led 38 6,2::CT:14
led 39 7,2::CT:14
led 40 8,2::CT:14
led 41 9,2::CT:14
led 42 10,2::CT:14
led 43 11,2::CT:14
led 44 12,2::CT:14
led 45 13,2::CT:14
led 46 14,2::CT:14
led 47 15,2::CT:14
led 48 0,3::CT:14
led 49 1,3::CT:14
led 50 2,3::CT:14
led 51 3,3::CT:14
led 52 4,3::CT:14
led 53 5,3::CT:14
led 54 6,3::CT:14
led 55 7,3::CT:14
led 56 8,3::CT:14
led 57 9,3::CT:14
led 58 10,3::CT:14
led 59 11,3::CT:14
led 60 12,3::CT:14
led 61 13,3::CT:14
led 62 14,3::CT:14
led 63 15,3::CT:14

set ledstrip_profile = RACE

set ledstrip_race_color = RED
save

[ OSD menu ]
OSD menuに入りFEATURES/LED STRIPにてPROFILEをRACEにします。RACE COLORで色を選択します。LED STRIPメニューを抜けたところでLEDの色が変わります。最後、SAVE&EXITを実行し設定を保管します。

CLIで同じ設定を行うことも出来ます。詳しくはBetaflight Wikiをご覧ください。

DJI Neo 2がやってきた

Neo 2凄いぞっていう記事や動画は巷にあふれているので、その他の雑多な事柄について書いてみます。

[ キャリングバック ]
Neo 2 Fly Moreコンボには残念ながらバックとかケースと言ったものが付属していません。そこで昔懐かしいDJI Spark(DIPS2登録維持しています)付属のバックを流用。本体、充電ハブ、RC-N3がそこそこ無難に収まりました。

[ アンテナ保護 ]
トランシーバーを装着すると2本のアンテナが飛び出した状態です。飛行中には上手に電波を拾ってくれそうな感じではありますが、持ち運びにはちょっと気を使います。TPUでサクッと作りました。

スタンドにもなります。

STLはシンギバで公開しています。
https://www.thingiverse.com/thing:7205054

[ 折りたたみスティック ]
DJIの取り外し式のスティック、ちょっと面倒だなと思います。かつて使用していたTBS Tango2みたいな折りたたみ式スティックはないものかとアリエクスプレスを探したら見つかりました。質感は良いです。スティックを折りたたむ方向が調整できそうもないのが美しくはありませんが、実用には問題ないです。

下はアリエクのリンクです。

ELRS BackpackのDVR自動録画機能を使う

随分前からELRS Backpackに挑戦していて、ちっとも思うように動いていないコザックです。

最初はTX16SとHDZeroゴーグルで試していました。バインドは間違いなく出来ているけどチャネルが変更出来なくて挫折。その後、違うハードウェアで何度か試してきました。そして遂にちょっとだけELRS Backpackの恩恵を受けることが出来るようになりました。事例として現在の構成などを紹介してみます。

ELRS Backpackの恩恵と書いたのは、DJI Avata2みたいにアームと同時にDVRの録画を開始する機能です。ただし、未だにチャネル変更は出来ていません(何か間違ってるんだろか?)。

[ ハードウェア ]
– 送信機 Jupmer T15
– ゴーグルSKY04X PROで受信機をSteadyView Xに換装したもの

[ ファームウェア ]

T15もSteadyView Xも標準でELRS Backupをサポートしているので、ガイド通りで更新出来ます。バインドフレーズ付きで書き込みました。T15はEdgeTXパススルー、SteadyView XはPCとUSB接続しメニューからELRS BackpackのUpgradeモードにして書き込みました。SKY04X PROのファームウェアも最新のものに更新しておきます。ハードウェアのバージョンによってファームウェアが違うところが要注意ですが手順は難しくはありません。

[ 構成 ]
SKYZ04XはSteadyView Xモードにします。このモードではSkyzoneの特色である受信機を二つ搭載することは出来ません。

DVRの設定をfollowにします。

送信機のELRS Luaスクリプトでアームに使用するAUXとアームする方向を指定します。(プリアームを使っていても、そちらは無視されます)

これで自動録画が出来るようになっているはずです。チャネルが自動で切り替わることより嬉しいかも(負け惜しみ)。

トリム無効化の勧め

いつの間にか送信機のトリムが入ってしまいドローンの動きがおかしくなってしまったことはありませんか? ドローンでトリムを使うことは考えられないのでEdgeTXの設定で無効にしてしまうのが良いです。

方法は二つあります。Flight Modeで行う方法とINPUTで行う方法です。Fligt Modeで無効にすると画面表示からもトリムが居なくなるので、私はこちらが好みです。

[ Flight ModeでTrim Offにする ]
モデル設定画面にFlight Modesの画面があります。

FM0のEdit画面に入ります。

Rud, Ele, Thr, Ailの各ボタンを押してトリムを無効化できます。これだけです。

[ INPUT画面でTrim Offにする ]

Rud, Ele, Thr, AilのそれぞれのEdit画面を開き歯車マークの中でトリムをオフにします。

ATtiny85によるLED制御 – ハードウェア実装編(統一チップ版)

[ 関連記事 ]
ドローンにRGB LEDを搭載するもう一つの方法 <- 親記事です
ATtiny85によるLED制御 – BUZZパッドを利用した制御方法
ATtiny85によるLED制御 – UART/LEDパッドを利用した制御方法
ATtiny85によるLED制御 – プログラムの書き込み方法

[ 注意 ] 当初、BUZZポート使用のものとLED/UARTポート使用のもので別のチップにしていましたが、統一しました。そのためスイッチに使うピンに変更があります。BUZZポートの場合は従来と同じ5番ピンです。LED/UARTで使用する場合は隣の6番ピンを使用します。

BUZZポート接続

[ 配線についての概略 ]
実際の配線は写真を見てもらうとわかりやすいと思います。

この写真では必要のないピンをカットしています。実際のATtiny85には8本のピンがあります。チップ表面の丸い印が1番ピンを表します。そこから反時計回りにピンは数えます。
この写真の例はBUZZボートあるいはGNDへ接触させて使用する場合です。

LEDポートあるいはUARTを使用する場合は下の写真のようになります。

LED/UARTポート接続

使用しているピンの説明です。

ピン番号 名前 リード線の色 役割
2 D3/A3 RGB LEDの制御信号出力、RGB LEDの信号入力に接続
4 GND GND端子、バッテリーのマイナスに接続
5 D0 LEDの色や光り方を変えるためのスイッチ入力、機械的なスイッチもしくはFCのBUZZに接続
6 D1 黄(下の絵では水色) LEDの色や光り方を変えるためのスイッチ入力、機械的なスイッチもしくはFCのLED/UARTに接続
8 VCC 電源入力、バッテリーのプラスに接続

[ 電源 ]
FCの5Vを使用することも考えられますが、たくさんのLEDを光らせるには5V BECの電力に不安があります。1S機ならばVBAT、バッテリーに直接接続した方が安定動作が期待できます。ちなみにATtiny85の動作電圧は2.7Vから5.5Vです。LEDストリップはもう少し電圧の幅が少ないと思います。
ATtiny85とLEDの双方にバッテリーのプラス、マイナスを接続します。上の写真の例ではLEDストリップの信号入力と反対側のリード線がバッテリーに接続されています。ATtiny85にはLEDストリップを通った後の電圧が供給されています。全周巻きの場合は、この方法が配線しやすいと思います。


絵にするとこんな感じになっています。全周巻ではない場合はATtiny85チップとLEDに並行した電源線の接続でも構いません。スイッチの配線は一般的にはBUZZもしくはLED/UARTのどちらか一方を使用します。

[ 信号線 ]
写真の緑のリード線のようにATtiny85からの制御信号出力をLEDの信号入力に接続します。

[ スイッチ ]
ブザーポートもしくは機械的スイッチでGNDに落として操作する場合は5番ピンを使用します。スイッチを使う代わりに、この線を適当にGND、例えばUSBコネクターの外枠などに接触させても良いです。LEDポートあるいはUARTで操作する場合は6番ピンを使用します。Betaflighの構成方法について別記事にて詳しく説明します。

[ 配線 ]
写真のような空中配線で大丈夫だと思います。当然、配線後はショートしないよう絶縁対策が必要です。私は半田付けしたところを保護する目的でUVレジンで固めました。
大きめのドローンなら基板を使うのも良いと思います。その場合、サイズは大きくなりますがDIP版のATTiny85を使用した方が良いでしょう。

送信機でGPSテレメトリー情報を表示する方法

Jumper T15の大きなLCDスクリーンを有効活用し、GPSのテレメトリー情報を表示する設定を試みました。
この設定により、FPVゴーグルを装着しなくても、手元の送信機でGPSの測位情報をリアルタイムに確認できるようになり、非常に便利です。

特に、USB給電でGPSを起動できるようにしておけば、VTXに通電することなくGPSのコールドスタートを完了できます。その際、送信機の画面で捕捉した衛星数や機体の座標を確認できることが重要になります。

設定手順です。

[ テレメトリーの検出 ]

まず、GPSを搭載したドローンと送信機を接続します。
次に、送信機のモデル設定画面を開き、最後のページにある「Discover new」を実行します。(「Delete all」は必須ではないかもしれませんが実行しても良い)

処理後、センサーリストに「GPS」と「Sats」(衛星数)が表示されれば成功です。

[ 画面レイアウトの設定 ]

次に、表示画面のカスタマイズです。T15送信機の右側にある「TELE」ボタンを押して、テレメトリー画面設定に入ります。

まず、「Layout」を選択します。表示したい情報に応じて、適切なレイアウトを選びます。GPSの衛星数だけなら小さなエリアで十分ですが、座標も表示するにはある程度の広さが必要です。今回は、画面の右半分が3分割されたレイアウトを選択しました。

[ ウィジェットの設定 ]

レイアウトが決まったら、「Setup widgets」を選択し、各エリアに表示する情報を設定していきます。

上記は設定完了後の画面です。設定したいエリアをダイヤルで選び、押し込みます。次に「Select Widget」から「Value」を選択してください。

最後に、「Source」の項目で、テレメトリーソースの中から「Sats」を選択すると衛星数が、「GPS」を選択すると座標が表示されるようになります。お好みで文字色なども調整しましょう。

hailomz optimizeでエラーが出た

Raspberry Pi AI Kit向けのモデル生成が突然出来なくなりました。モデル生成と環境設定に関しては次の記事を参照ください。
Raspberry Pi AI Kit用に画像認識モデルを作る
Hailo AIモデル変換環境の構築:Dockerイメージを活用した導入

この手順の中で以下のコマンドを実行するとエラーが出ました。

hailomz optimize --hw-arch hailo8l --har ./yolov10s.har yolov10s

エラーの内容は以下のようなものです。

hailo_model_optimization.acceleras.utils.acceleras_exceptions.NegativeSlopeExponentNonFixable: Quantization failed in layer yolov10s/conv48 due to unsupported required slope. Desired shift is 9.0, but op has only 8 data bits. This error raises when the data or weight range are not balanced. Mostly happens when using random calibration-set/weights, the calibration-set is not normalized properly or batch-normalization was not used during training.

テスト的にepochを小さくして作成したモデルだとエラーしなかったりします。以前作ったモデルを生成し直したら、同じエラーになったりして試行錯誤だけでは今ひとつ発生条件が絞り込めません。

ほぼ意味不明ですがエラーメッセージを検索するといくつかのQAがヒットしました。意味が分からないなりになんとなく使えそうな情報をHAILO CommunityのProblem With Model Optimizationというスレッドに発見しました。

これを参考に /local/workspace/hailo_model_zoo/hailo_model_zoo/cfg/alls/generic/yolov10s.alls というファイルの先頭に以下の一行を追加しました。

quantization_param([conv48, conv59, conv69], force_range_out=[0.0, 1.0])

conv48はエラーメッセージにあったものです。conv59, conv69はyolov10s.allsに元々含まれているものです。

相変わらず、何を直したのかは分かりませんが、これでoptimizeが成功し続いてcompileを行い実行可能なhefモデルファイルが出来ました。

TinySA UltraをPCから使う

お手軽にVTXの電波を見るツールとして以前紹介したTinySA Ultra(Ultraと付かない無印だと周波数レンジが狭いので注意)ですが、以前はPCから操作するプログラムの出来が今ひとつどころか意図した動きを全くしない代物でした。改めて調べてみたらQtTinySAというオープンソースなプログラムが出来ていました。

QtTinySAはUbuntuでもWindowsでもMacOSでも稼働するプログラムです。私はMacOS版を試しました。
細かいところにまだ不具合がありそうな気もしますが、普通に使えますしレスポンスもとても良いです。使い方を極めたわけではないのでごく簡単な説明だけを書いておきます。

[ 設定 ]

name,preset,startF,stopF,value,colour
vtx,other,5600000000,6000000000,True,green,

上の内容をtinsavtx.csvみたいな名前で保管しておきます。

Setting画面のImportでこのCSVを読み込むと周波数レンジが簡単に設定できます。

[ 画面 ]

TinySA UltraをUSBで接続してRunボタンを押すとスキャンを始めます。
画面の詳しいことは分からないまま使えてしまったので細かい説明はできません。
ざっと眺めていくと、左上からアッテネーターと高調波除去、続いてサンプリング関連。Tracesの部分、この画面の設定ではブルーの線は現在の数値、オレンジは過去の最大値を示します。
下部一番左はWater Fallの設定です。左側のスライダーで大きさが変更できます。その右側で何やら設定が変わるのですが、何をやっているのかよく分からなかったです。
下部左半分が周波数レンジです。ここのセレクターでother, vtxというのが選択すると上の設定が読み込まれます。
下部右側はマーカーなのですが、これも今ひとつ動作不明でした。