HOILog・・無人航空機飛行日誌を自動化 その2

先日報告したHOILogですが、飛行練習会で使ってみると幾つか問題点が見えてきました。

WTW熊本の練習会で試している風景。
(Tinyなので本来ログはいらないですが)

一番問題なのはGoogleドライブにアップロードする時にリトライが発生した場合。自宅の無線環境だとリトライする事はほぼありませんが、スマホのテザリング経由だと(電波状況にもよると思うけど)頻繁にリトライが発生し、リトライしていてもGoogleドライブには届いている事も多く、複数回のログがアップロードされてしまいます。
Googleドライブ側はこちらの仕組みを使っていますが仕組み的にリトライが発生するとそのまま全部が残ってしまいます。リトライになること自体はネットの都合なので対応が厳しく、きちんと対策するにはGoogleドライブ上のスクリプトを変更していく必要があると思います。

一方SDカードには安定してログが残るので、当面はこっちを主に使いたいと思います。。。が、これまでSDカードには時刻ぐらいしか記録していなかったので、今回機体名や場所を残す様に変更しました。

SDカードに残すログのフォーマット:
右から時刻、飛行場所、機体名、離陸か着陸か、アップロードしたか、その場合のリトライ回数 を示します。

例:

2023-03-19 22:34:15,KUMAMOTO,Mobula6,TakeOff,Upload success,1
2023-03-19 22:34:25,KUMAMOTO,Mobula6,Landing,Upload success,1
2023-03-19 22:34:36,KUMAMOTO,Mobula6,TakeOff,Upload success,1
2023-03-19 22:34:45,KUMAMOTO,Mobula6,Landing,Upload success,1

あとコンフィグファイルのデータ中にスペース文字があった場合にスペースを消してしまっていたのを修正しました。
試しに飛行場所にスペースを1文字入れ「KUMA MOTO」にしてみたのが以下の結果です。。。

2023-03-21 23:58:14,KUMA MOTO,Mobula6,TakeOff,Upload success,1
2023-03-21 23:58:23,KUMA MOTO,Mobula6,Landing,Upload success,1

ついでに飛行場所に日本語を使うとどうなるか実験しました。
飛行場所を日本語(文字コード:UTF-8)で書いたところ、液晶画面には正常に表示できませんがSDカードとGoogleドライブ、どちらのログにも正しく記録されています。

2023-03-19 22:38:15,熊本県合志市,Mobula6,TakeOff,Upload success,1
2023-03-19 22:38:30,熊本県合志市,Mobula6,Landing,Upload success,1

なおM5Stackには液晶画面に日本語を表示させる方法もある様なので、そのうち試そうと思います。

以上を修正したスケッチをここに載せました。
http://www.hoihoido.com/data/HOILog20230323.zip

自動金ノコ

気がついたら前の投稿から3か月が過ぎていました。
この間も色々とやってはいたのですが、更新をサボってしまったんですよね。
で、最近作ったのはこれ。自動金ノコ。

鉄を切るなら高速切断機が早いですがアルミを切る場合や外で作業できない時、いままで金ノコを使って人力で切っていました。でも時間はかかるし疲れるんですよね。

そこでみら太さんのブログに以前書かれていたのを参考に作ってみました。

ほぼ手持ちのガラクタから作りましたがギヤードモーターだけAliexpressで購入しました。12V167rpm、ブラケット付きで¥1,103-。

早速動作中の動画です・・・まだセンサーもスイッチも付ける前の画像。

その後、切り終わった事を判別するリミットスイッチと・・・

ノコ刃が引っかかってロックした場合を検出するフォトインタラプタを取り付けました。3秒以上変化がないとモーターへの通電を止めます。

センサーの信号をこの箱の中のArduinoで読み、パワーMOSでモーターをコントロールします。ボタンはスタートとストップ。

電源入力はXT60コネクタなのでドローン用3セルリポでも動くかも。
(野外で使う事はないですけど)。

使わない時、こんな感じで立てておくと邪魔になりません(多少)。

ARマーカーでドローン制御

ドローンを自動制御してみたくなりました。
いきさつを言うと、とある大学でドローン競技があり、その中に人が操作せず空中に5秒間ホバーリングさせるという種目があるのを知りました。私が競技に出場する訳ではないのですがこれをやってみたくなりました。

まず空中に静止させるには考えられる方法が色々あります。GPSで座標を取得してフィードバックするというのが一番ありそうですが、世の中に既にあるし屋外で実験するのも中々大変です。できればコアレスモーターの軽いやつを使って室内で試したいのです。そこでARToolkitなるものを使ってみようと思います。

前に作った「どどーん」を使いたい。

ARToolkitはARマーカーという図形を印刷しておき、これをカメラで映すと画像に3Dの物体が合成されて現れるアレです。詳細はこちらを参照ください。
ARToolkit本家→ http://www.hitl.washington.edu/artoolkit/
工学ナビさんの説明→ http://kougaku-navi.net/ARToolKit/

そしてマーカーはこんな感じの図形です。

ARToolkitについてきたサンプルマーカーをそのまま使用

ARToolkit自体はCのライブラリなのでVisualC++から呼び出します。
ARToolkitに画像を渡しマーカーを認識しすると、マーカー座標からカメラ座標への変換行列が得られます。 ARtoolkitの一般的な使い方ではこれを元に図形を描画するのですが、この行列にはマーカーの位置が3次元的にどっちにあるか、またどの方向に傾いているかという情報が含まれるので、今回はこれを元にドローンを制御し、常に同じ位置にマーカーが見える様にしてやればホバーリングできるはず・・・という目論みです。

最初はこんな感じでやろうと思っていました。

ARマーカーは壁等に貼っておきます。

そしてコントローラーはこれ。Arduionoでサーボを制御して送信機のスティックを動かすという無理やりな構造。

やはりこのコントローラーは無理がありました。最初は手動でホバーリングさせてから自動に切り替えたいのですが、この切替がうまくできません。また縦軸を動かすと横軸が微妙に動くという問題もあります。 制御パラメーターの微調整が必要になる筈ですが、不安定なコントローラーでは訳が分からなくなりそうなので、まずはPCが考える値を確実にドローン側のフライトコントローラーに伝えるため、以前作ったTWE-Liteを使った送受信機を使う事にします。

またドローンに搭載したVTXから送られてくる画像では画質が今イチな上に振動の影響なのかARマーカーの認識が不安定でした。そこでARマーカーをドローンにぶら下げ、三脚に固定したカメラで検出する方法に変更しました。これでもマーカーが揺れますがカメラが固定なのでこっちの方がマシなのです。

カメラは固定に変更。ドローン側にARマーカーをぶら下げます。
こんな感じで糸でぶら下げました。

固定カメラで見たマーカーの位置を元に制御量を決め、FT232RL→TWE-Liteを経由してドローンのフライトコントローラーに伝えます。
また最初に手動で浮かせてから自動に切り替えるのでRC送信機→受信機→HOI-Link→PCの経路で送信機の操作量をそのままドローンにスルーすることもできます。HOI-Linkはこれまた先日作成したS-BUS→HIDコンバーターで、ラジコン受信機が出すS-BUS信号をPCからジョイスティックに見える信号に変換してPCに入力します。
なお手動と自動は送信機のスイッチで切り替える様にしました。

こんな感じで何枚もペラを折ってしまいながら調整を繰り返しました。
スロットルの制御が一番難しいです。まあ自分が操縦しても高度を維持するのが結構難しいので自動制御でも同じなのでしょう。特にロール、ピッチ、ヨーの制御だったらニュートラル位置がだいたい決まっているのでそこを中心に上下してやればよいのですがスロットルだけはこの値にすれば上下しない位置というのが決まっていないしバッテリーの残量によっても変わってくるので飛びながら調整していく必要があります。

そんな感じで何とかホバーリングが10秒以上は 持続するようになったのが次の動画です。まだ上下動が大きいのでもう少しパラメーターを調節したいところ。またバッテリーが消耗してくると何故かYaw軸が右に回ってきて制御で打ち消せなくなってきます

追記・・・

その後パラメータをイジってかなり安定になりました。
またYaw軸が回ってしまうのは機体の特性っぽいですが、これを制御で抑えられない原因が判りました。ドローンが右に回った時、回転行列から取ってくる角度が本来ならマイナスの値になる筈なのにプラスの値になる場合があります。この時自分の目で見てもマーカーは左に回っている様に見えるのです。この原因はARマーカーを印刷した紙が風で曲がっている為だと思います。ARToolkitはマーカーの四隅の頂点位置から角度を算出しますが、マーカーの角が曲がると正しい角度を割り出せないんですね。そこでマーカーの曲がり易そうな箇所を裏からスチレンペーパーで補強したところ、イイ感じになっています。
これでバッテリーが無くなるまでホバーリングを続ける様になりました。
安定化後の動画 ↓