vJoySerialFeederを使ってみる

HOI-LINK はさらに低遅延化して、v2となったようです。
http://www.hoihoido.com/blog/?p=4202
風のウワサに聞くと、ケーブル接続より低遅延になったとか。
まさにプロポ接続界の阿頼耶識システム。
残念ながらココから先は非公開となったそうです。

HOI-LINKを通して、この関係にいろいろ興味が出た。
PCに信号データを入れて、もっとあれこれ活用する方法はないだろうか。
そこで見つけたのが「vJoySerialFeeder」。
https://github.com/Cleric-K/vJoySerialFeeder
海外では2年ぐらい前から使われているし、DonkeyCar界隈でもよく活用されているそうだ。
対象はWindowsとLinuxだ。残念ながらMacはない。
これはなにをするものなのか → シリアルプロトコルをUSB HIDに変換して送り出すもの。
わかりにくいので、絵にまとめてみた。

これが無線でドローンを操縦する仕掛けで、ポイントは2つある。
電波部分と通信部分だ。
これをUSB HIDドングルとかで、PCシミュレータに繋ぐ場合はこうなる。

電波部分はそのままだが、USB HIDの通信部分は工夫で高精度/低遅延になる。
そして今回の vJoySerialFeeder の場合はこうなる。

通信部分はシリアルに統一されるので、電波部分とかの差異も確認しやすくなる。
また実機から MultiWii プロトコルを引っ張れるので、実機のセッテングの差異などもある程度確認できる。
あと通信状況を可視化してくれる機能とかもある。

あんまり日本語記事なかったが、DonkeyCar関連で記事があった。
https://qiita.com/rukihena/items/ed17c2245db504dd263a
必要なことはほぼ書かれているので、コチラを参考にするとできる。
こちらは Linux を対象に書いてあるので、Windows向けに簡単に説明をまとめる。
実機があればコストゼロでできるので、試してみるのもよいでしょう。

■共通項目
vJoyをダウンロードしてインストール。
https://sourceforge.net/projects/vjoystick/
vJoySerialFeeder/releasesからダウンロードしてzip解凍する。
vJoyのバージョンと合わせる必要があります。
https://github.com/Cleric-K/vJoySerialFeeder/releases

■実機を接続する場合(MultiWii)
まず MultiWii での接続例。
これはドローン持ってれば追加投資なしで実施可能です。
Betaflight につなぐように USB で PC につなぎましょう。
この際にレシーバーが機能するようにしてください。
外付けのレシーバーだと電源ないとダメとかありますね。
そこらへんの TinyWhoop が実験にはよいでしょう。
FCを USB HID化(set usb_hid_cdc = on)とは違う手法なので、本体はなにもイジらなくてOKです。

Betaflightとかの接続と同じです。

vJoySerialFeeder を起動します。
Profileをテキトウに書いて、Protocol を MultiWii に。
Port を Refresh すると、ドローンが接続されている COM ポートを見つけてくれると思うので Connect します。
Add Axis を4つ押して4ch。スイッチ関係使うなら Add Button で必要な数入れておきましょう。
Add Bit-mapped をいれると信号を見える化してくれます。他にも機能盛りだくさんですね。
いろいろできますが、シミュレータ側で調整できるので、とりあえず割り当てられてるといいみたいです。
なにが正しいかはわからないですが、とりあえず画像を参考に設定してみてください。

左上に「vJoy – Virtual Joystick」が認識されています。

あとはシミュレータ(今回はVeloci)を立ち上げると、コントローラとして Assign されていると思います。
いつもどおり設定してもらえばOK。
SPI接続の内臓受信機の場合は、低遅延って話題の RedPine と比較してみるのもいいかもしれんですね。

■受信機直結の場合(SBUS)
受信機からチョクに取りたい場合。
つまるところ、受信機にUSBシリアル変換基盤をつけて、PCにシリアルを流し込むわけです。
今回はいつもの SBUS ですが、IBUS や DSM もできます。
SBUS というと、HOI-LINK の時にもありましたが、信号が反転している(Inverted)問題です。
前回は反転回路を組みましたが、今回は USBシリアル変換基板に反転機能があるので、それを利用しましょう。
USBシリアル変換基板はコチラです。
FT234x
https://akizukidenshi.com/catalog/g/gM-08461/
USBシリアル変換基盤ならなんでもいいんですが、安くて小さいというメリットがあります。
XM+とかだと幅がほぼ同じであるため、おなじスミチューブに入れられます。
こちらの Rx を Inverted に FT_PROG というツールを使って切り替えます。
FT_PROG
https://www.ftdichip.com/Support/Utilities.htm#FT_PROG

普通に接続します。FT234xはちっこいですね。
Scan and Parse します。
Invert RS232C Signals のところで RxD を反転にします。
Program を押す。
Program で完了。
配線してみました。

配線は 5v/GND はそのままで、SBUS は Rx に接続します。
あとは MultiWii の時と同じ流れになります。
Protocol を SBUS にしてください。
細かい設定もいろいろありますが、デフォ設定あるのでとりあえずそれで。
あとはシミュレータで設定すれば完了です。

まあ設定はそれぞれがもがいてください。(まだよくわかってない)

駆け足ですがこんな感じです。とりあえずまとめてみた感じです。いつもの拙速主義です。
長時間の運用に耐えるのかとか、遅延とか、その他問題はないのかとかは、これからしばらく使ってやってみます。
今回のはシリアル処理が PC 内に入っちゃうので、仮想シリアルを挟むといろいろ応用できる。これは夢広がる。
あんまり日本で使われていない感じなので、この機会にいろんな活用例が出るといいなと思っています。