北の国から

忘れたことを思い出す為の記録

OAK-D-WIFIに乗ってるESPでサーボを動かしたい

 あるもの

買わないといけないもの

PC側で用意するもの

  • ESP-IDF
    将来的にはArduinoIDEが対応するらしいけど、まだ対応していないしこっちのほうが深いところを触りやすいらしい(よく調べていない)

ESP-IDF

とりあえずhello world

f:id:r_u__r_u:20211030203634j:plain
OAK-D-WIFIを接続

f:id:r_u__r_u:20211030190955p:plain
monitorしたときの表示

できたね.良かったね

引っかかったとこ

手順通りにbuild通そうとしたらエラーが出た

f:id:r_u__r_u:20211030191444p:plain
エラー

mbed関係らしく、完全に解決策が出てるわけではなさそうなので雑にmenuconfigから関係してるとこを無効にする(ちゃんと理解していない)

f:id:r_u__r_u:20211030191615p:plain
無効にしたとこ

無効にしたらbuild通りました.やったね(よくない)

ESPとサーボの接続を考える

曰く、ESP32-GPIO2,4,12-15が上側のコネクタに出ててI/Oを使える、下側は予約があったり入力だけだったり使いにくそうなので一旦無視。

かのように見えたけど、上側のコネクタの方々は曰くすでにMyriadXのGPIOともつながっていて何なら曰くそもそも上側のコネクタにはサーボで必要なシリアルの機能を持ってるピンが存在しない(ソフトウェアシリアルは嫌なので)

ということなので下側のピンのGPIO-16,17さんたちを使うことにします。

MyriadX的にはUARTが出力もあるのでもしかしたらdepthai側から直接サーボ動かせそうですね 今度調べます。

GPIO-16,17たちはOAK-D-WIFI的にはESP32から出力が伸びてるだけなので多分問題なく使えます。やったね。

接続用回路を作る

一方的に動かすだけなら下図でいいです。

f:id:r_u__r_u:20211030202013j:plain
一方的な接続の図

サーボの状態読みたいときは、74HC126を使ってSerialを一本にまとめる必要があります(ユーザマニュアル参照)
私はめんどいしサーボくんは素直に動いてくれると信じているのでひとまず一方的につなぎます。
ただ将来的に「状態よみたいな〜」って日が来るので74HCを使った回路を作れるようにしときます。
現世にはハーフピッチユニバーサル基板という便利グッズがあるのでそれを使って脳内設計でやります

作ったら載せます

通信プロトコルの実装

ESP-IDFで適当に作ります。
MyriadXのSPIから指令値受け取ったらそれに向けて動かせるようにしとけば文句はないでしょう。

作ったら載せます

ROSノードの作成

deepthaiからESPにspi送れるので、せっかくだからROSノードにしたいですよね。
ESP自体をROSノードにできたら簡潔なんですけど、めんど大変そうなのとOAK用にカメラはつなぐのでESPをROSノードにして彼の少ないリソースを消費する理由はないです。

depthaiをROSで動かすのはできるのでspiの実装もできるでしょう

作ったらのせます。

できた!

できたらのせます。