Fireworks!

人間が長い間飛べなかったのは空を飛べるわけがないって考える人が圧倒的に多かったからなんだ。うまく言えないけど、人間は、鳥にだってなれたんじゃないかと思うんだ。そして、今だって鳥になれると思うんだ。人間の格好をしたままでさ。
大事なのは、やる気みたいなもので、ちゃんと空を飛ぶ方法というのはあって、それを学んだり勉強したりしようとする気持ちが大事なんだと思うね俺は。

リチャード・バック「イリュージョン」/村上龍訳

リチャード・バックは「FPVドローン」という、彼らの時代には想像のつかないチートみたいな方法で空を飛ぶことを、どう思うだろうか。
リチャード・バックというと「かもめのジョナサン」が有名。
当時はグルイズム的なところはヒッピーに担ぎ上げられた過去がある。
オウムでも同じようなこと言っていたのがいるな。
他の作品を見ると、とにかく飛行機で飛びたかっただけの人であることがわかる。
結婚した「One」あたりから、なんつうか普通になり、挙句の果てに「かもめのジョナサン」に最終章を足してしまった。
それでもリチャード・バックには正直でリアルな男の生きざまを感じる。

今回「花火撮影の手伝いしない?」ということで呼ばれてみた。
暗闇での位置確認は必要だろうなあと思い一工夫。
FAI DTRC2019 で使った Neopixel を引っ張り出して設営。サイズは10mぐらい。
当初は線香花火をイメージして設置したのだが、動画を見ると、葉っぱもついて花のような、打ち上げ花火のような。
急場しのぎにしてはいい感じになり、実際かなり活躍し、いい感じに動画で拾ってもらえた。
準備が十分だったところも、足りないところもあったりして、それでもなんとか無事完了して。
そしてまた次の課題が見えてくるドローンはホント飽きないな、と思うのです。

なんせ空を飛べる。

続・HOI-LINK HR を作ろうぜ

前回記事からの続き。
https://papalagi.org/blog/archives/1523

ほいほい堂さんで改良版リリースの情報をいただきました。ありがとうございます。
■HOI-LINK-HR の遅延を減らせるか試す。
http://www.hoihoido.com/blog/wp/?p=4158
低遅延化とSBUS区切り検出の改善が行われ、新しいHex(20200822版)が配布されています。
http://www.hoihoido.com/HOI-Link/HOI-LinkHR20200822.zip
今回のやつは、前回のショートカット版では動きません。
お作法通りブートローダから焼いていかないとダメなので、そのあたりの説明を書いてみます。
ブートローダの役割や構成の仕方などは、ほいほい堂さんの記事をよーく読み込んでもらうとして、作成する手順だけまとめます。

■ファイルを集める
http://www.hoihoido.com/OpenStick/index.html
HOI-LINK HRのそもそものベースである、OpenStick のページです。
ブートローダ焼付後は、USB接続だけでファームを焼けるようになります。
焼き付けるツールが「MybootOS(64bitOSも使用可能なバイナリ) MybootX86-bin-160725.zip」になります。
http://www.hoihoido.com/OpenStick/MybootX86-bin-160725.zip
加えて「UBW用inf(ドライバ)MCHP-USB.zip」が必要ですが、残念ながらリンク切れ。
ココに落ちているのを見つけました。
https://www.microchip.com/forums/m836237.aspx
ココからダウンロードです。(MCHPUSB+Driver.zip)
https://www.microchip.com/forums/download.axd?file=0;836237
続いてブートローダのファームですが、ブートローダ単体より「ブートローダ+OpenStickLiteのセット」を焼いて動作確認し、その後 HOI-LINK HR のファームを焼き直したほうが、間違いないかもしれないです。
http://www.hoihoido.com/blog/wp/?p=1764
ココからダウンロード。
http://www.hoihoido.com/OpenStick/OpenStickLiteBinary161011.zip
この中の「Bootloader18F14K50+OpenStickLite.hex」を使いましょう。

■作成手順
まず前回同様の手順で、PICKit3 でファームを焼き付けます。

前回と同じ方法です。

最初に焼き付けるのは「Bootloader18F14K50+OpenStickLite.hex」です。
PICKit3 で焼き付けましょう。
USBでつないだら「JOYSTICKmini」というデバイスが見えると焼付成功。

次にブートローダ用のドライバを入れます。
「MCHPUSB+Driver.zip」の「Realease」の中にこんなファイルが並んでいます。

「mchpusb.inf」というファイルを右クリックし「インストール」。

次にPICをブートローダモードで立ち上げます。
VPP(PICKit3をつなぐ左端の端子)をGNDに落とした状態にして、USBを接続し電源オンします。
これでブートローダモードになります。
この状態から焼き込みツールで焼き付けます。
「MybootX86-bin-160725.zip」の中にある「Myboot.exe」を立ち上げます。
この際に、Defender から怒られるとおもいます。

「詳細情報」を押すと実行できるようになります。

あとは「Open Hex」で、20200822版の「HOI-LINK.hex」を指定して「Write Verify」すれば焼付完了。

VPP→GNDを外して、USBを接続し直すとデバイスに出てくると思います。
SBUS反転回路とかの接続は前回と同じですので、そちらを参照してください。

ブートローダを一度焼いたあとは、PCからUSB経由で焼付可能になります。
次回からの更新はラクチンですね。(最初からそうしようよ)
いずれにしても最初はブートローダ焼付に PICKit3 が登場することは避けられないので、ブートローダごとまとまったバイナリがあったほうが新しいのを作るときには便利です。
その場合は PICKit3 でコチラから吸い出して保存することができます。

■さいごに
今回でちゃんとお作法通りに作成することができました。
そして低遅延化の効果ですが、これは確かに効果出てるように思います。
FrskyのUSB接続だと、「遅延ゼロで11bit」という実環境以上に恵まれた環境になっており、ゲームとしてのプレイ環境としては一番理想なのかも。
しかしながらシミュレータという観点から見ると、実際に発生するであろう無線プロトコルの遅延も含めてよりリアルな操作環境がシミュレートできる。
そうした中で、HOI-LIK HR の低遅延化はさらに高い効果が得られそうです。

こういう「体感できる」っておもしろいですねえ。
ほいほい堂さん今回もありがとうございました!
さらなる改善も期待しております!

HOI-LINK HR を作ろうぜ

これはプロポを USB 経由でPCに接続する、高分解能な無線ドングル。

8/22追記。
正しい手順通りの作成方法を続編でまとめてあるので、そちらも確認推奨。
続・HOI_LINK HR を作ろうぜ
https://papalagi.org/blog/archives/1566

プロポは USB-HID で接続され、PC側の扱いはそんなに難しくない。
中華のプロポはファームアップ用途で USB 端子が大体ついており、そこにつなぐと使える。
Futaba のヤツはめんどくさいらしく、無線ドングルのニーズが高いらしい。
無線ドングルは売られているものもあるし、古いFCを再利用(set usb_hid_cdc = on)とかがある。
かなりニッチな、ドローン用プロポ接続状況はそんな感じ。

プロポの受信機は SBUS という規格で接続されるのだが、こちらは 11bit 通信する。
しかしながら、一般的な無線ドングルからは 8bit に低分解能化されているらしい。
ということから、ほいほい堂さんで 11bit を再現するデバイスの作成記事がある。
■HOI-LINK高分解能化
http://www.hoihoido.com/blog/wp/?p=4118
さらに HOI-LINK HR として販売もされてる。
https://nonsaya.thebase.in/items/30961376
詳しく説明されているので一読。
ありがたいことに、ほいほい堂さんでは、ソースもHexも配布されています。
これを使って私も作ってみました。
販売とかされているものなので、作成ガイドはどうかなと思い、ほいほい堂さんに確認したところ、快諾いただいたので今回まとめてみました。
アチコチの加工とか、あれやこれや悩むことを考えたら、買ったほうがよさげです。
でも作ると楽しいですし、理解も進むし、改造とかもできるし、受信機を選べるなどのメリットがあるので作ってみてはどうでしょう。
おもしろいぜ。

部品構成については大きく分けて3つ。
1.PIC
PIC焼くのなんてプレステのレッドハンド以来っすよ。(おっさんホイホイ)
こちらは、ほいほい堂さんでも開発に使われたコチラを使います。
■AE-PIC18F14K50
http://akizukidenshi.com/catalog/g/gK-05499/
これのいいところは、USB周りとオシレータ周りが実装されているというところで、自作組はラクでいいです。
これにファームを焼き付けるのですが、「PICKit3」というのを使います。
純正は5000円するみたいですが、アマゾンでパチが2000円ぐらいで売られています。
Microchip というメーカのものなのですが、回路図も公開してて海賊版上等な姿勢らしいです。よく知らんですが。
動かないこともあるかもしれないので、そのあたりは自己判断で。
とりあえず私はガンガン動いています。

2.SBUS 反転回路
SBUSは100MHzの反転信号(Inverted)で通信する。
マイコンとかラズパイとかに入れるときは、UnInverted(反転しない←ややこし)にする必要がある。
反転回路は、ほいほい堂さんにあるとおり、2SC1815と、51KΩ、5.1kΩ の3つあればできます。
受信機が UnInverted SBUS を出力できれば、この回路は必要ないです。
NewBeeDrone の BeeCieverV2 とかできますね。
あれは D16 と SFHSS も使えるし小型なので余ってればよいかも。
それ以外も基板からチョクに信号をとることも可能です。
https://oscarliang.com/uninverted-sbus-smart-port-frsky-receivers/

3.受信機
SBUS のものなら、なんのプロトコルでもいけると思います。
とりあえず手持ちにあった XM+ で構成してみました。
Frsky の近距離で切れちゃう問題にあたったので、なんか工夫がいるかも。

では早速作ってみましょう。
1.PICの焼付
PICKit3 を利用します。
こちらから該当の MPLAB X IDE をダウンロードしてインストールしましょう。
https://www.microchip.com/mplab/mplab-x-ide
コンパイラあるとソースからビルドできますが、Hex焼くだけなら IDE だけでOK。
Hex はほいほい堂さんで配布されている 6/15版を使います。
http://www.hoihoido.com/blog/wp/?p=4118
ソースも公開されていますし、ビルドして焼くのが正当派ですが、まあまずは Hex を焼いてみっか。

AE-PIC18F14K50 と PICKit3 と PC を接続。
コネクタは左詰めで右端が1本余ります。
焼くためのポイントは電源供給。
AE-PIC18F14K50 の MiniUSB をつないで 5v くれてやればよさそうですが、これでは焼けない。
VDDとGNDにチョクで電源を入れてやりましょう。
手持ちにあったブレッドボード向けの 5v 供給 MicroUSB をつかってみた。
みんな持ってる 5v BEC とかでもいいと思う。

焼付作業です。
MPLAB X IDE で、File → Import → Hex で Hexファイルを指定。
その後、こちらのように対象 PIC の種類と焼くツールを指定。

こちらのボタンを押すとサックリ焼いてくれます。

右下にログが出ますが、赤字が出てると焼付失敗です。
基盤構成してからつながらないとヘコむので、がんばって焼き切りましょう。

こんな感じになると焼けているハズです。

2.反転回路の作成
焼けたなら配線ですね。配線は主に反転回路です。ココが一番手間。
Uninverted なレシーバーならこのあたりは必要なく、PICにそのままつないで終わり・・だと思います。(試してない)
PIC側の配線は VDDとGNDとSBUS(UnInverted)の3ヶ所です。

反転回路に必要なのは、トランジスタ 2SC1815 と、抵抗51kΩ、抵抗5.1kΩ の3つです。
http://akizukidenshi.com/catalog/g/gI-06475/
http://akizukidenshi.com/catalog/g/gR-16513/
http://akizukidenshi.com/catalog/g/gR-16512/
fritzingでいい感じに書けなかったですが、トランジスタの E(GND)を一列横にずらして、端子を4列に並べると使い勝手がよいかもしれんです。
私も実際のはそうしています。

3.動作確認
ブレッドボードの試作回路を作りました。
数作るときには PIC の確認するとかにも使えます。
動いたらハンダしてフリスクにまとめました。
この手の電子工作はフリスクに入れ込むのがよくあります。
基盤はフリスクサイズのが秋月電子で売られています。
http://akizukidenshi.com/catalog/g/gP-12188/
60円のと70円のがあって、60円はタダのハンダ穴が並んでて、70円はブレッドボード的な接続になっています。
これ店頭でも横に並んでて、間違えて混在購入とかして、チョイチョイ間違えて悩んだりあります。
よくチェックしましょう。

上が試験用。フリスクは高さがギリで要工夫。

色々悩んだ結果、後日のファームアップデートに対応できるように、基盤を二分割した。

8/6追記:フリスク基板側の反転回路の説明図作ったんで貼っときます。

上の写真とセットで判断してみて。

あとは PC に接続して、デバイスに「HOI-LINK」が出ていることを確認しましょう。
受信機のバインドを忘れないでやって、あとはシミュレータで再設定すればOKです。

で、実際使ってどうか。
私は一緒に充電できるのもあって、有線USB接続でずっと使ってきた。
これは 11bit なのか、はたまた 8bit なのかわからないのですが、まあ変わらない操作感でした。
7/29 の夜にあった WTWONLINE はコレでやっていたのですが、タイムに貢献できていないのは参加者の皆様が知っている。
複数作って周囲のドローンシミュ廃人に配布して確認してみようと思っています。

繰り返しになりますが、素晴らしい情報を公開いただいた、ほいほい堂さんに感謝いたします。
改良版にも大いに期待しております!

追加作成中。慣れると簡単に作れます。反転回路とケース加工以外は。

8/2追記。
ほいほい堂さんから情報いただきました。
上記の記事は最短で動かす方法をいろいろ試した結果で説明していますが、正しくはブートローダーを焼いて、その後ファームを焼くのが正道とのことです。
ほいほい堂さんで説明されています。
http://www.hoihoido.com/blog/wp/?p=1764
ブートローダーを焼くと、USBからファームの焼き込みができたりします。
一発目のブートローダー焼き込みにはPICKit3等の焼き込みツールが必要なので、必要な道具はおなじです。
時間できたらブートローダー版もやってみます。(続・HOI-LINK HR を作ろうぜ、にまとめました)

続・M5StickCでGoProリモコン

前回はコチラ。
https://papalagi.org/blog/archives/1477

反応がよかったので、気を良くして続編登場。
剥きプロは脆弱なので、多頭飼育はあたりまえ。
まあウチの界隈も片手では足りないぐらいある。
沼の中にあるさらに深い沼なのだ。
リモコンが複数対応したいのは、あるよなーとは思う。

最初は ArduinoIDE 使って ATOM Lite あたりのシンプルなの作ろうと考えていた。
「WiFiMulti.h」というクラスがあって、複数リストから電波強度強いのをつなげるみたいなの。
「あれ使えるじゃん!」でピーンとなってゴソゴソ始めた。
WiFiつながるところまで進めて、コマンドを作り込むあたりまで進んだ。
そんな時に、コザックさん(いつもお世話になっております)から、APP.List でスクリプト増やせばいいんじゃね?というアイデアが出た。
それが一番簡単じゃないか。なぜ気づかなかった。

UIFlowはハタからはわからないが、「/flash」の下に Python(厳密にはMicroPython)に拡張子pyスクリプトが並んでおり、そこにスクリプトを置けば「APP.List」に並ぶ。
至極簡単な話なんだけど、標準のツールにそのあたりをどうこうする機能が「ない」。
Linux だと pip から ampy 引っ張ってサクっといけるが、あんま一般的でないかんじ。
なんかもっとないかなーとおもったら VSCode でやる方法が比較的簡単?っぽいのでまとめてみた。

■Microsoft Visual Studio Code
https://azure.microsoft.com/ja-jp/products/visual-studio-code/
マイクロソフトだー。
いろんなところに対応しているので、自分の環境にあわせてインストール。
続いて「Extentions」から「M5Stack」(M5Stickではないので注意)を検索すると、連携する拡張が出てくる。

これをインストールして、割り当てられたCOMポートを指定してつなぐ。
ただし。
つなぐ前に M5StickC 側におまじないがいる。
通常は Internet 経由の接続になっていますが、これを USB に変更。
そういえばさりげなく7/24に更新されて V1.6.1 になってます。

M5ボタンを押しながら起動。
Switch mode
USB
戻って Reboot
USBモードでたちあがる

その後、VSCode に戻って、エクスプローラから COM をリロードすると、ファイルの中身が見えるようになると思う。

「apps」の中にお好みの「スクリプト名.py」を「+」で追加。スクリプト名は日本語ダメよ。
そして例のスクリプトをコピペ。SSIDとPASSは各GoProに変更しよう。
ココからも実行できるので、GoPro に接続するのを確認しても良いと思う。

これで APP.List から選ぶことで切り替えることができます。やれやれっすね。

初心者に簡単な機能ブロックな UIFlow。
凝ったことをするにはめんどくさいという、人生において何度も経験したヤツ再び。
まあでも機能的には困らなくなった。
解像度とFPSのメニュー作るぐらいか?
電池残量は電池の管理チップ撤去してるから動かないんでないかな。
あと教えてもらった GoPro API を見る限りでは、WiFi のオフとかなかった。
https://github.com/KonradIT/gopro-py-api
ステータスもざっくりjsonで吐き出されるので、なんかそういうの得意な人にまかせたい。

ロクにテストしてない上に急いで作ったので、うまくいかなかったら連絡ください。
一緒に頑張るぐらいはやってみますよ。

7/28追記。
GoPro6 Black のWiFiコマンド一覧あった。
https://github.com/KonradIT/goprowifihack/blob/master/HERO6/HERO6-Commands.md

Turn WiFi OFF: http://10.5.5.9/gp/gpControl/setting/63/0

WiFiオフある!と思って試してみたけど、Bad Request で通過せず。残念。
あとスクリプトの最後にコレを追加すると、自動でWiFiに接続して動画メニューに遷移します。

buttonB_pressFor()
buttonB_wasPressed()
buttonB_wasPressed()

8/13追記。
https://twitter.com/papalagiorg/status/1289861400374865920
8/3ぐらいにやって追記忘れてた。
剥きプロは電源切ると初期化されて、細かい設定したいとなるとスマホ使うしかない。
M5StickCのリモコンでも同様の設定を流し込むことで実現可能。
こ汚いサンプルも上記リンク先に置いておきました。
各コマンドはコチラにまとまっている。
https://github.com/KonradIT/goprowifihack/blob/master/HERO6/HERO6-Commands.md

あとSDカードに「gpauto」というテキストファイルを置くことで、アレコレを自動実行してくれる。
WiFiオフとか、SSID変更とか、自動録画開始とかできる模様。
https://github.com/konradit/gpauto
1台ずつの運用ならSSIDとPASSを共通にしちゃうのもありですね。
元ネタはさすがのoscarliangから。
https://oscarliang.com/naked-gopro/

M5Camera WiFi ストリーミングをやってみた

FPVドローンをやるようになってから、なんとか 5.8GHz 使わずに無免許でできる方法はないかを考えてきた。
5.8GHz はそこそこ安いし、簡単だし、まあ便利なんだけど、免許とか業務利用とか同時利用3機までとか心底めんどう。
低遅延で、5.8GHz VTX システムと同じように、複数の環境で受信できるのが望ましい。

そうなるとまあ WiFi ベースなんですね。
なんかねえかと探した先に見つかったのが WebRTC。
■WebRTC Native Client Momo がスゲエ
https://papalagi.org/blog/archives/635
Momoスゴイ。解像度高く低遅延でオープンソース。
ラズパイのGPUを使って H264 をエンコして転送する。
ドローンの FPV カメラとして利用するには、H264 はあまり適さず、VP8 か VP9 が必要な感じ。(ハードウェアエンコ効かなくなってしまう)
そこそこの解像度欲しいとなると、Jetson nano を積みたくなり、それだとちっこいドローンには難しい。
たしかに DokeyCar のたぐいはみんな Jetson nano とかですね。
85mmクラスのドローンでラズパイゼロが載せられる限界。
搭載してみた。

愛すべき雑な仕事。
そういえばカッコイイマウンタも作ったような…

遅延は200msぐらいで、解像度も720pぐらいだが、まあなんとか実用というレベルにはなった。
しかしラズパイは Linux なんでブートの時間長い。電源ブチ切りもちょっと気になる。
なお余談ですが、ラズパイゼロに 1S Lipo から電源供給する時は、電子工作とドローン界隈逆なので注意。
https://papalagi.org/blog/archives/740

もっと軽い WiFi カメラないものか。
で、今回 M5camera(わずか5g)を活用する方法が盛り上がっていたので試したみた。
M5camera は ESP32 に OV2640 という2万画素のカメラモジュールをつけたもの。
解像度はそこそこ、MotionJpeg になっちゃうが、パッケージがシンプルだし、軽いし、安い。(2000円弱)

果たしてやり方とは。ズバリこちら!
■LovyanGFXとJpgLoopAnimeでM5StackとM5Cameraの全画面WiFi動画ストリーミング実験
https://www.mgo-tec.com/blog-entry-lgfx-jpgloopanime-m5stack-m5camera01.html
mgo-tecさんは M5 を始めとするマイコンを使って様々な作例を作られる方で、いつも参考にさせてもらっている。
M5camera が出てからストリーミングができないか、いろいろやられていた。
LovyanGFXはらびやんさん作成の M5 向けグラフィックライブラリで、界隈ではスゴイスゴイと繰り返し聞いていた。
この両名が悪魔合体して、M5camera のストリーミングをいっきに実用レベルに引き上げた形だ。

さあやってみよう。
M5cameraがストリームサーバになって、M5Stackが表示します。
M5Stackで素早く描画するために LavyamGFX が活躍するという構成です。
リンク先はあらためてコチラで補足することはないぐらい丁寧に書かれているので、上記リンクを熟読して作成してください。
jpgWriteRow は 1.0.6 だと 203行ですかね。(動きました)
あと先日のライブラリアップデートで 「WiFi.h」が 2つになってどっちやねん!エラーがあるので、ESP32用でないのは消すなりするといいです。(雑)

早速動かしてみました。想像以上によく動く。
M5Stackの画面にグリグリ動くとちょっと感動しますね。
だいたい遅延は100msぐらいでしょうか。この手のモノとしては少ない遅延です。
やはり動き速くなると時折コマ落ちが発生するようです。
なおストリームの出力先はPCのブラウザでもいけます。
ドローンに載せてどんな感じか後日検証してみましょう。

ブラウザはM5cameraのIPアドレス叩けば出ます。

M5StickCでGoProリモコン

https://twitter.com/jesuslg123/status/1280909172264099842
UIFlowで作ってる人を見かけた。コードはコチラ。
https://github.com/jesuslg123/gopro-remote-stickC
M5StickC は EPS32 ベースで、ArduinoとかUIFlowとかいろいろ使える。
UIFlowは機能ブロックを並べるタイプの初心者向けっぽい言語。
今回使ってみたら、よかったので導入方法も含めて紹介。
リモコンですが、先に断っておくとGoPro純正のヤツとは比較にならない面倒さ。
ただ機能的には十分で、改造もアリアリですし、今後の機能追加も検討されているそうで、加えて楽しい!ということで試す価値アリです。

なんでGoProリモコンが欲しいのか。
BetaFPVの GoProLite BEC基板の問題。
あの BEC基板は設計的に問題があって、表面実装のコネクタ3個所を、別の基板で立体につなぐというのになってる。
基板の精度が違うので、歪んだりとか衝撃があると外れやすい。
特に電源ボタンと録画ボタンがBEC基板上にあり、強く押すとコネクタに負担がかかる構造で気持ち悪い。
そのあたりを理解してポチっとしないといけない。
まあでもスマートにまとまって便利なんで。なんとか他に対策できないかと考えた。
まずは電源ケーブルは標準のJSH3端子は細すぎるし、ポロっと抜けそうなので、2Sでもいけるぜって BT2.0 に変更した。

CineWhoopTokyoさんオマージュな構成。

電源は BEC基板上の MODE と GND をショートしてオートスタートに改造。
RECボタンは FC のポートから取るのが BetaFPV推奨だけど、複数機体に使い回すときに不便。
それでスマホからという運用になった。
でもスマホ持ってる人がそこにいないとできないので、なんか方法ないのか。
ついでに録画をしてるしてないが確認できないのか。
GoPro純正のリモコンとかもあるのだけど、そのためだけになー。
ということで今回のコチラで解決だ。さあやってみよう。

UIFlowの導入についてはココの説明がすばらしいです。
https://lang-ship.com/blog/work/m5stickc-uiflow-l01/
内容についてはよーく読んでもらうとして、オススメのやり方としては以下の流れです。

1.M5StickCに UIFlow のファームを焼く
https://m5stack.com/pages/download
M5Burnerというので焼きます。
後ほどコードを転送するIDEとバージョンがあってないとダメです。
とりあえず最新の1.6.0を焼いてみよう。
焼く際にはデバイスのCOMポートを指定。
ドライバとか必要ですが、ドローン野郎にはおなじみの CP2104 と VCP なので、そのままでもつながるかも。
あと自宅WiFiのSSIDとパスワードも忘れずに。
Obniz みたいにクラウドにつながってやるタイプなんですね。

2.ブラウザ版のUIFlowIDEからコード焼く
http://flow.m5stack.com/
今回は1.6.0なので、Betaの方を使います。
M5StickCの画面に出るAPIコードを使って接続しましょう。
githubからダウンロードした「ESPRemote.m5f」を読み込むわけですが、なんかバグなのかうまく読み込みません。
しゃーないのでデスクトップ版をダウンロード。
https://m5stack.com/pages/download
こっちは読み込めました。
でもデスクトップ版は1.4.5なんですよ。
さっき焼いたファームとバージョンあわない。
ファームを1.4.5.1にするのもありですが、今後もこういうのありそうなので乗り切る方法。
デスクトップ版の python メニューに移動し、そのコードをコピーして、ブラウザ版に貼り付け。

手間ですが、これでブラウザ版にコードを流し込めます。
pythonの場合、最後のあたりに SSID とパスワードを設定する所あると思います。

機能ブロックの場合はこのあたり。

これにつなぎたいGoProの SSIDとパスワードを入力しましょう。
GoPro側で「接続」→「新デバイスの接続」→「GoPro アプリ」です。
あとは右上にある再生ボタンを押せばコードが M5StickC に転送されて完了。

おお動くぞ。

M5StickCの基本的な使い方簡単に説明。
左横下(A)、上部M5ボタン(B)、右横上(C)の3つあります。
Aで電源オン。長押しで電源オフです。短く押すとリセットです。
Bボタンをおしながら電源オンすると、UIFlowメニューになります。
この状態でCボタンを押すとメニューが変わります。
APPListで今回のコードを指定しましょう。(temp.py)
これでリモコンが立ち上がる。

つづいてアプリの使い方です。
Cボタンを長押しでGoProのWiFiにつなぎます。今のは自動接続でないので注意。
つながったあとはCボタンのクリックとロングクリックで移動。
Bボタンでスタート/ストップ。
Bボタンをダブルクリックでモード変更です。
命令が通ると「200」が帰ってきます。

さてシカケを確認してみましょう。
GoPro内にhttpdがあって、そこにコマンド送ることで切り替えるようですね。
「http://10.5.5.9/gp/gpControl/command/mode?p=0」で、動画モード。
「http://10.5.5.9/gp/gpControl/command/mode?p=1」で、写真モード。
「http://10.5.5.9/gp/gpControl/command/shutter?p=0」で、ストップ。
「http://10.5.5.9/gp/gpControl/command/shutter?p=1」で、スタート。
おもったより簡単なシカケ。
https://android.benigumo.com/20180116/gopro-hero6-wifi/
なんかこういうことみたい。ffmpegでストリームデータも引っ張れる模様。
内容を理解すれば他に転用も可能だ。ブラウザとかな。
他のコマンドも調べると出てくるでしょう。

その他、そのスジのみなさまが気になるポイントはコチラにまとまっています。
https://qiita.com/nagase/items/96e87b3c91a0c820e002

そういえば、初代THETA出た時、ESP8266 で似たようなの作ったっけな。時代は繰り返す。
作者の方は ToDo にて機能追加を検討されているようなので今後に期待だ。
複数カメラを一個でやりたいとかの改造もしたいね。
機能を絞って ATOM Matrix に移植してもよいかもな。
マイコンいじりも楽しいのでこの機会にやってみるのもよいかと。
なお M5StickC は 2000円しないぐらいの値段で売られています。

ATOM Matrix よいかんじ

M5Stackシリーズに新しいのが出た。
むっちゃ小型の ATOM Matrix。
https://www.switch-science.com/catalog/6260/
今年の頭ぐらいに出ていたが、技適の関係で最近で回るようになった。
5x5LED はいつもの Neopixel ベースで、パネルがボタンになっている。
SoC は ESP32 のデュアルで 240MHz。よって WiFi も Bluetooth も使える。
ジャイロとして MPU6686 がついてて、地味に赤外線LED(発信)もついている。
で、千石電商で1500円だった。やっすい!
ジャイロ使った倒立振子とかの作例もおもしろい。
モータードライバあったら、もう構造としてはドローンもできるつうことか。
5x5LEDとジャイロを省いた ATOM Lite というのもあって、こちらは1000円。
https://www.switch-science.com/catalog/6262/
電池の類はついていないので、USB-C を挿して使う。

電源は USB はもちろん、GPIO とか Grove の 5v に Lipo の 3.7v 入れても動くらしい。
いっぽう省電力は苦手で、ディープスリープにしても 20mAh ぐらいは必要とのこと。
SPIFFSで内蔵フラッシュも利用可能。おもったよりいろいろできる。

いつものArduinoIDEとかで使う。ライブラリもボード情報も出ている。
サンプルスケッチは Typo とか、バグとかチラホラある雑さ加減。
こちらのCOCOAカウンターの作例がよかったので、こちらを試してみた。
https://qiita.com/coppercele/items/fef9eacee05b752ed982
「FastLED」と「BLEDevice」と「M5Atom」のライブラリを入れる。
追加ボードマネージャに「https://dl.espressif.com/dl/package_esp32_index.json」を追加。
ボードの設定は画像の通り。「ESP32 Pico Kit」にしてシリアル速度を「115200」にする。

すっかりおなじみの ArduinoIDE。

あとは記事のとおり焼き付ければできあがる。

電源が入っていると、Bluetoothを使って周囲にCOCOAが何個あるのかをカウントする。
アチコチで電源入れて、どれぐらいユーザがいるのか確認してみたい。体感したい。
COCOAの利用状況が芳しくないってニュースが連日流れてる。
こんなおもしろネタ、参加するしかなかろうと思うけど、世間はそうでもないらしい。
個人的には悪くないと思うんだけどなー。まあ人生こういうギャップはちょいちょい感じる。
ここから怒涛の大逆転でみんな使うようになるのか、それともこのまま収束なのか。

M5Stackファミリーもなんだかんだで集まってきた。
初代のヤツは一通りついて多機能だけど、ボタンとか華奢でポロっと壊れる。
それからいくと、最近の小型版は割り切りよくて逆にいい感じだ。
これから始めるのなら、ATOM Matrix がいいと思う。
画面使いたいなら M5StickC(オレンジ)のやつがよいかも。

ラズパイ4BにElastic Stackを組む

ものすごいボロな x86鯖で Elasticsearch + kibana + Fluentd + Mosquitto な IoTデータ収集をやってる。
いつ壊れるんだろうなーという状態になって4年ぐらい経過した気がする。
実験用でクリティカルでないし放置気味。
先日ちょっと刺さって、じゃ終わりにしますか!としたら「データをサルベージしてくれ!」とかになって。
つぶれから気づく、ごんぎつねの存在。
なんとか復帰して今回はことなきを得たのだが、懲りずに使い続ける。
これまで何度こういうことを繰り返しただろうか。

もうこの手のヤツをシングルノードでゴリゴリやるのとかもう流行らない。
さりとて x86 をいっぱい揃えるとお金もさることながら場所リソース確保が悩ましい。
ということで「貧者の味方ラズパイ」で動かんかなーとなるのだけど、3B+ ぐらいまではメモリ1GBしかなくてちと足りんかった。
ところがココに至って、ラズパイ4B登場。
2GB/4GBが販売されてて、さらに8GBが登場するという。
これはイケるやん!と調べたらガッチリやってる人がいた。

■Raspbian buster でElastic Stack 7.5.1 を動かす
https://qiita.com/Y-Shikase/items/7e6025855454c443f620
OpenJDKとNodejsのバージョンがキモとのこと。
Elastic 6.xの頃に 3B+ に組んだ頃も、同梱されている OpenJDK が x86バイナリで、入れ替えとかやったような記憶がある。
最近は ARM 運用も視野に入ったのか、そのあたりが整理されつつあるとのこと。
OpenJDKは11を使う。
Logstashが OpenJDKの8シバリで、かつてはインストール時には8を使いましょうとか言われていたが、今は同梱されて配布されるようになってるらしい。
Machine Learning のところに x86バイナリあるので、そこは false。
これだけでいいらしい。single-node 設定も入っているので単体で動く。
kibana の方は Nodejs のx86バイナリが同梱されてくるので、それを ARM と差し替えればよい、とのこと。

さっそく手元にあったラズパイ4B(2GB版)に、Raspbian 最新版(5/27版)に入れてみた。
32bit版だけど、そのうち64bit版も出るだろう。なんならubuntuって選択もある。
本番運用は64bitで構成したほうが先が長くていいかもな。
上記記事との違いは、Elasticは最新の 7.8.0 をインストールした。
あと Nodejs のバージョンにこだわりなかったので、ツルシで入った v10.21.0 を使った。
この違いでも問題なく動いた。やったー。

またUI変わったね。

1回目起動してほっとしたが、再起動で動かず。
kibanaのフォルダにヘンなコントロールコードのファイルができるってのは、コチラでも再現した。

なんだこれ?

リンク先の記事あるとおり、コントロールコードのファイルを消すスクリプトを追加する。
この情報ありがたい。これ気づかないと思う。
これなかったらおそらく「動かんなあ」とくじけていたこと間違いない。

Fluentdは手で組み上げすれば動く。
td-agentが更新とかも手軽だけどx86版しか配布してない。
先日どこかで 3.8.0 のARM版みたいのも見かけた気がするんだけどな。

まあ今のボロ鯖の代替ができるようにはなった。
バージョン依存とかあって、たくさんのラズパイに組み上げるなら、Docker イメージにした方がいいよね。
とおもったら、同じ人がやっていた。すごい!
■Raspberry Pi 4Bのdocker上でElastic Stack 7.6.0/7.7.x/7.8.0 を動かす
https://qiita.com/Y-Shikase/items/d162805aebb3a1a8447f
公式からも AArch64(ARM64bit)の Dockerイメージ配布はじまっとる。
https://www.elastic.co/jp/blog/elasticsearch-on-arm
64bitなので、今の Raspbian だとダメだし、kibana は配布されていないらしい。
だがこれは確実に ARM版配布の流れだな。

Dockerまで行ったならば、Kubernetes で組み上げたいよね。
とおもったら、そちらも実現したとのこと。
いやー在宅の暇つぶしにすごいいいネタのような気もする。
問題はx86に比べれば安いといえ、たくさんのラズパイ買ってくれるかなー。

8/20追記。
7.9 の Elastic Stack で、ARM64bit(AARCH64)に対応。
https://www.elastic.co/jp/downloads/elasticsearch
これで導入もラクチンになりましたね。
なおkibanaはARM版ないです。
コントロールコードのワケわからんファイルの処理があるんで、こっちも公式パッケージほしいですね。
Fluentd の ARM 向けパッケージはココにありました。
https://td-agent-package-browser.herokuapp.com/3/ubuntu/bionic/pool/contrib/t/td-agent
よーくみると、arm64 があります。(3.8.0)
ubuntu Bionic 向けのパッケージですが、試して見るとインストーラがちゃんと読み替えてくれて Buster にも入りました。(キケン)
ご参考まで。

11 bit studios のゲームが国の推薦図書に

先月末にthatgamecampany「風ノ旅ビト(英語名Journey)」が Steam に出て、ヒマを見つけては周回しているのですが、あらためてゲームスゲエなー。
体験を通して独特の感動を与えてくれる。今回年齢によって感じ方も変わることも気づいた。
こんな感じでハードな追体験をさせてくれる作品をつくるゲームメーカーに 11 bit studios がある。
この度、その作品が国の推薦図書になってしまったようだ。

戦時下生活サバイバル『This War of Mine』がポーランド教育省の学生向け推薦図書リスト入り。
https://automaton-media.com/articles/newsjp/20200619-128126/

ポーランドのゲーム会社 11 bit studios の「This War of Mine」。
戦争に巻き込まれる市民に視点をあてたゲームで、ゲームをすすめる上で厳しい選択を迫る。
このゲームは戦争を題材にしているのでやむなく18禁だが、それを含めての推薦図書。
DCL追加シナリオのどれも重い。うわーそこくるかーってお腹にくるヘヴィさ。
戦争ゲームってドンパチやるのが人気で主流ですが、逆側の視点は珍しいのではないか。
このゲームは5年ぐらい追加シナリオなどあったが、昨年末ファイナルカットへ至った。

この重厚なタッチ。

で、今の 11 bit studios は、なにをやっているかというと新タイトルの「Frostpunk」ってのをやっている。
これも期待を裏切らない重厚な作品。
スチームパンクな時代設定で、原因不明の氷河期がやってくる。
そんな環境で生き残りをかけて市長になってシムシティ。
容赦なく(ホント容赦ない)訪れる自然の脅威に、法律制定や宗教、技術開発でもって抗う。
相変わらず厳しい選択を要求する。
コロナ禍の現代いろいろ思い知らされる、まさに今やるべきテーマではないか。
常に寒い感じなのも季節にあってるぞ。

とても寒そう。

タイムリーなことに Steam のサマーセールになってるんですよね。
「This War of Mine」は495円。
https://store.steampowered.com/app/282070/This_War_of_Mine/
バンドル全部つけても932円。
https://store.steampowered.com/bundle/9717/This_War_of_Mine_Complete_Edition/
「Frostpunk」は1236円。
https://store.steampowered.com/app/323190/Frostpunk/
Steamのサマーセールは7/10まで。

Betaflight4.2のRPMフィルタをあらためて

知ってる人は知ってたんだろうけど。
STM32F411とSTM32F405って動作クロック違うのか。

Betaflight4.2になって、いよいよRPMフィルタもいよいよ普通に使える感じになった。
なにが普通になったかというと、搭載されているマイコンによって PID Loop が自動で設定されるようになったりした。
4.1までは STM32F4系は、演算性能が足りない(通常時負荷が50%超過)のもあり、Dshot300/Gyro4k/PIDloop4k で設定するべしとされていた。
STM32F7系は迷わず DShot600/8k/8k でイケと。
なお4.2では改善が行われ、Gyroは全種8k決め打ち。
PID Loop は搭載チップによって安全なところが選ばれるようになった。
よって新しいデフォルトは、STM32F4系だと、Dshot300/Gyro8k/PIDloop4k。
STM32F7系は同じく DShot600/8k/8k でよいということらしい。

ところで、この DShot300 はホントに適正なのだろうか。
という考えるだけでめんどくさい分析を D-Mania さんで行われている。ありがたい。

オシロスコープ持ち込んでの3回シリーズの最終が上記動画。
たいへん勉強になるので全部見ておいたほうがよい。
この長大なシリーズで、最終的には DShot600 にしておかないと PID Loop が入り切らないのではないか、ということだった。
でも我らがSTM32F4系は Dshot600 回しきらないじゃないか。
ということで、オーバークロックの検討することにしたのだが、そこで肝心なことを見落としていたことに気づいた。

ここでウダウダと STM32マイコンの簡単な説明。
ドローンのFCに使われるマイコンはSTマイクロエレクトロニクスってところの STM32 っていうシリーズ。
32bitで Arm Cortex-M4 ベース。8bitベースの STM8 は VTX の制御とかに使われている。
いくつかランクがあって、STM32F103とかは 3Dプリンタの制御基板とか、プロポとかマルチモジュールとかで使われている。
US65ぐらいまで使われていたのは STM32F3 ってヤツで、Betaflight4系に移行した時にサポート対象から外れた。
用途を絞り込んでメモリを空け、クロックアップし延命をする人もいる。
そういう経緯もあって、現在の主流は STM32F4系とSTM32F7系になる。

Tinyクラスでよくみるのが、STM32F411。おなじF4系にも STM32F405 もよく使われる。
よーくしらべると、このシリーズは動作クロックが違う。
STM32F411は100MHz。
https://www.st.com/ja/microcontrollers-microprocessors/stm32f411.html
STM32F405は168MHz。
https://www.st.com/ja/microcontrollers-microprocessors/stm32f405-415.html
なおSTM32F7系は216MHzだ。
STM32F405系だと Dshot300/Gyro8k/PIDloop8k でも負荷が低く十分使えることを確認した。
STM32F411をオーバークロック(set cpu_overclock = 108MHZ)できるが、標準状態ですでにオーバークロックされていることも多い。
ドローンのFCに限定しなければ、STM32F411を250MHzぐらいまで上げてる例もあるようだけど、まあそこは後日検証してみる。

ということでRPMフィルタを使う時の設定はこちら。
 STM32F411は、Dshot300/Gyro8k/PIDloop4k。
 STM32F405は、Dshot600/Gyro8k/PIDloop8k。
 STM32F7系は、Dshot600/Gyro8k/PIDloop8k。
F4系とひとくくりにせず、ちゃんと細かいところ見ろってことですね。
今後はパフォーマンスを得たい場合はSTM32F405以上を買うのがよいようだ。

おまけでESC側の対応もまとめたみた。
BLHELI_32 は基本的にRPMフィルタに対応しているので、そのままで利用可能。
安いのとか小さいのによく使われるおなじみの BLHeli_S は JESC の有料ファームを使うのが推奨とされている。
https://jflight.net/
都度カネ払うのもなー。そこまでやる気はないというか。
なお「L」のヤツは無償でもよいとのこと。どれが「L」?
という向きのために、無償版の開発が進められている。
それが jazzmaverik。
https://github.com/JazzMaverick/BLHeli/tree/JazzMaverick-patch-1/BLHeli_S%20SiLabs
どうやって使うかというと、BLHeli_S を立ち上げた時に、ESCのファーム番号を確認。

その型番(画像の場合は「O-H-5」)の Hex を上記 Git から Raw でファイルに保存。(名前をつけてリンク先を保存)

BLHeli_S から「FlASH FIRMWARE」各ESCに個別に焼き込む。
各バージョンに加え「48」とか「96」とか入っているのは、通信周波数を示すもので数字が高いほど性能がよくなったりするが安全性も減る。
とりあえず現状は 16.73 にしときなされ、とある。
https://github.com/betaflight/betaflight/wiki/Bidirectional-DSHOT-and-RPM-Filter
16.73 は「48」とか「96」とかはないので悩まないでよし。
あとはこのページあるとおり、Dynamic Notch Fiter とかを絞りこむ。
双方向通信をオンにし、磁石の数を適正化(5インチクラスだと14、小さいのは12が多い)し、モータータブで動いているか確認する。

Meteor65の場合はこんな感じ。

電源投入時の「ピポパプーペー」の「プーペー」の音が高くなる。
飛ばすとなにか芯が揃ったようなモーター音になり大変良い感じ。
レシプロエンジンでいうと、ピストン重量のバランス取りされた感じだ。
電池の持ちもよくなるので、これからはデフォルトだろう。(イマサラかよ)