研究室内のアドベントカレンダー用の記事になります(今日は12/5!)

去年のアドベントカレンダーで「DDProでM5BugC2を動かしてみた」DDProの出力データの一部を解析し、M5BugC2をWi-Fi+UDPで操作しました。

本記事はその続きになります。


目次

前回の課題

M5BugC2が想定通りの挙動にならない!

→ おそらくゴム足が問題

この問題を解決するのは難しそうだし、本来の目的であるラジコン操作にシフトした方が良さそう

今回の目標

ラジコンをDDProで操作できるようにする!

<aside> 💡

本記事の到達点

展望

忙しい人向け

構成

ラジコン構成図.jpg

逆接続でラズパイを壊した話

IMG_4028.jpg

ラジコンは元々ニカド電池で動作していたが、使用できないため、余っていたエアガンのバッテリーを使用することにした。

コネクタはタミヤミニコネクタのため、気にせず接続したところ降圧モジュールが煙を立てて破損+ラズパイも文鎮化することに…

どうやらエアガンのバッテリは±が逆になっているものがあるらしい。実際画像のように、赤いビニールのようなものがコネクタからはみ出ている….

後輪を制御してみる

安定化電源を使用して、後輪が想定通りの動作をするかを確認した

ソフトウェアシリアルを使い、ラズパイのGPIO23/24をモータードライバーのin1/2に接続してpwmを適当に流してみた

問題なく動作しており、回路や接続に問題がないことも確認できた

前輪は次の「ステアリングの可動範囲をMCP3008で取得する」で可動範囲の実装を行った後に確認する

ステアリングの可動範囲をMCP3008で取得する

ギアボックスから出ている4本の信号線をMCP3008に接続することでラズパイからステアリングの状態を確認する

実際に取得できたデータは以下

ステアリング:中央

CH0(raw) CH0(V) CH1(raw) CH1(v) CH2(raw) CH2(v) CH3(raw) CH3(v)
0 0.000 0 0.000 0 0.000 0 0.000
63 0.203 0 0.000 39 0.126 0 0.000
130 0.419 0 0.000 82 0.265 0 0.000
0 0.000 0 0.000 0 0.000 0 0.000
134 0.432 0 0.000 90 0.290 0 0.000

ステアリング:右

CH0(raw) CH0(V) CH1(raw) CH1(v) CH2(raw) CH2(v) CH3(raw) CH3(v)
0 0.000 87 0.281 79 0.255 0 0.000
0 0.000 0 0.000 0 0.000 0 0.000
0 0.000 71 0.229 66 0.213 0 0.000
0 0.000 0 0.000 0 0.000 0 0.000
0 0.000 66 0.213 61 0.197 0 0.000

ステアリング:左

CH0(raw) CH0(V) CH1(raw) CH1(v) CH2(raw) CH2(v) CH3(raw) CH3(v)
0 0.000 0 0.000 0 0.000 0 0.000
0 0.000 0 0.000 0 0.000 64 0.206
0 0.000 0 0.000 0 0.000 0 0.000
0 0.000 0 0.000 0 0.000 43 0.139
0 0.000 0 0.000 0 0.000 20 0.065

この結果から、CH2とCH3が左右の判断材料になりそう。また、CH0が可動範囲内かどうかを識別するのに使えそう。

CH1は何に使われているのか現在もわかっていない。

値は安定しておらず、左右に傾いているのに0となったりしている。

前輪と後輪を同時に制御してみる

「ステアリングの可動範囲をMCP3008で取得する」でわかったことから、前輪の制御コードを軽く実装して、前輪と後輪の動作確認を行った

MCP3008で取得した値が安定していないため、値を元にしたステアリングの舵角調整は難しそう。

そこで、時間ベースの舵角推定を実装した

時間ベース舵角推定

目標位置 (DDPRO入力)
    ↓
誤差計算 (target - current)
    ↓
比例制御でモーター駆動
    ↓
経過時間から位置を推定・更新

舵角推定の計算式

position += direction × rate × dt

rate = (LIMIT / full_swing_time) × (speed / 100)

DDProの操作を操作に反映しつつカメラ映像をmjpegで配信

前章までの結果と前回の記事を元にDDProの入力値でラジコンを動かしつつ、ラズパイに搭載したカメラ映像をブラウザで確認する

操作のアルゴリズムは前回の記事と異なるが、DDProの値の受け渡しは同様のため、説明をカット

カメラ映像配信システム

概要

Raspberry Pi Camera Module v3 Wideで撮影した映像を、MJPEG(Motion JPEG)形式でブラウザにストリーミング配信する。

映像パイプライン

[Camera Module v3] --CSI--> [rpicam-vid] --pipe--> [ffmpeg] --MJPEG--> [Flask] --HTTP--> [ブラウザ]

| --- | --- | --- |

ラジコン操作ではリアルタイム性が重要なため、低遅延なMJPEGを採用したが、

ラズパイにはH.264のハードウェアエンコードがあるため、GStreamerなどで配信する方が低遅延かもしれない。

作成したブラウザの画面