ロードマップ#
本ページは、以下ロードマップ「首振り」のガイドページです。
また、本ページは「smabo-esp32」のガイドを実施している前提で話を進めます。
概要#
本ページでは「首振り機能」について解説します。
具体的には、以下の内容を実施します。
- 首振りのコントローラー制御
- 首振りのランダム制御
- 画像認識による首振り制御
必要パーツ#
本機能の実装に必要なパーツを以下に記載します。
| 部品名 | 商品URL | 備考 |
|---|---|---|
| ESP32-DevKitC | link | 互換品でも可 |
| ブレッドボード(SAD101) |
link | 一般的なブレッドボードは5穴ですが、こちらは6穴になっています。 6穴でないとESP32のサイズ的に横幅が足りないので注意してください |
| ジャンプワイヤー | link | - |
| 電池ボックス(単3×4本、電池スナップ対応) | link | 電池スナップ対応の方が、取り回しが良いのでお勧めです。 |
| 電池スナップ(電池ボックス用) | link | コネクタピン付きの方が、ブレッドボードに差しやすくて、抜けにくいのでお勧めです。 |
| 充電式単三電池 × 4 | link | 充電式の方がおすすめです。 |
| 電池充電器 | link | - |
| サーボモータドライバ PCA9685 | link | 互換品でも可 |
| MG996R | link | 互換品でも良いですが、ホーンのサイズが純正と異なる場合は、パーツにうまくはまりません。 そのため、ホーンを削るか、3Dモデルの修正が発生する可能性があります。 |
パーツの印刷#
今回、新たに追加されるパーツを3Dプリンタで印刷します。
3Dプリンタは機種によって「印刷する際に使用するソフト」が異なるため、ここでは具体的な設定手順ではなく、ポイントのみを記載します。
以下のパーツを図の向きに設定して、印刷してください。
印刷の際の注意点
- パーツのつけ外しの際に、根本から折れにくくするため、凸部は横向きにして印刷
- サポート材は必ずONにした状態で印刷
-
smabo-hardware/stl/pan/mg996r/pan_adapter.stl

-
smabo-hardware/stl/pan/mg996r/pan_plate_top.stl

-
smabo-hardware/stl/pan/mg996r/pan_stand_left.stl

-
smabo-hardware/stl/pan/mg996r/pan_stand_right.stl

組み立て手順#
以下動画のように、必要パーツを組み立てます。
※ 動画には、前回までに印刷したパーツも含まれます
組み立ての際のポイント
組み立て動画では、MG996Rの取り付け手順は分からないため、以下に記載します。
最初に、下図のように「pan_stand_left」と「pan_stand_right」でsg90を固定します。
そして、pan_plate_topを上から被せてホーンをはめ込みます(工具不要でも組み立て可能ですが、MG996Rに付属のネジでホーンとサーボを固定してもOKです)。
配線#
下記表の内容に従って、配線します。
※ 下記表において、「接続先1」と「接続先2」は、両者が回路的に直接繋がっていることを指します。
| 接続先1 | 接続先2 | 補足 |
|---|---|---|
| 乾電池バッテリーボックスの+極 | ブレッドボードの+極の右側 | 以降、右側を6V電圧として扱うため注意 |
| 乾電池バッテリーボックスの-極 | ブレッドボードの-極 | - |
| ESP32の5V電源 | ブレッドボードの+極の左側 | 以降、左側を5V電圧として扱うため注意 |
| ESP32のGND | ブレッドボードの-極 | - |
| PCA9685のV++ | ブレッドボードの+極の右側 | - |
| PCA9685のVCC | ブレッドボードの+極の左側 | - |
| PCA9685のSDA | config.jsonのi2c/sdaに設定されているピン |
- |
| PCA9685のSCL | config.jsonのi2c/sclに設定されているピン |
- |
| PCA9685のGND | ブレッドボードの-極 | - |
ESP32-DevKitCの場合の配線図は、以下になります。
※ デフォルト設定の場合、首のサーボをchannel=2に接続してください。

完成系#
今回作成したロボットの完成系は下図のようになります。

動作手順#
起動手順#
「こちらの起動手順」の内容を実行してください。
サーボ設定#
smabo-webの「Config」タブの「Modes/servos」にて、各サーボの設定を変更可能です。
ここでは、
- 「head_pan」を有効化
します。

コントローラー制御#
コントローラー制御の手順を説明します。
「Config」タブの「Modes/servos」にて、head_panの
- 「mode」を「manual」
に設定してください。

「Servo」タブで各サーボの角度を変更すると、それに合わせてsmaboが左右に動作します。
ランダム制御#
ランダム制御の手順を説明します。
「Config」タブの「Modes/servos」にて、head_panの
- 「mode」を「random」
- 「group」を「neck」
に設定してください。

random_group
同じrandom_groupに設定されたサーボモーターは、同じタイミングでランダムに動作します。
なお、新規のrandom_groupは「Add random Group」をクリックすると、追加できます。
しばらく待つと、ランダムなタイミングでsmaboが左右に動作することが確認できます。
画像処理による制御#
画像処理による制御の手順を説明します。
「Config」タブの「Modes/servos」にて、head_panの
- 「mode」を「manual」
に設定してください。

「Vision」タブの「Detection」にて、
- 「Enabled」を有効化し、
- 任意の認識モードを設定(ここでは、colorモードで青色の物体を認識するように設定しています)
します。

次に、「Behaviors」の
- 「Servo follow」を有効化し、
- 「Pan joint」を「head_pan」
- 「Pan Direction」を「reversed(-1)」
に設定します。

設定完了後、スマホカメラの前に認識対象の物体を近づけると、物体に追従するようにsmaboが首振りすることが確認できます。
次回#
本ページはロードマップ上の終着点のひとつです。
他の機能も実装する場合は、ロードマップから次のページへ進んでください。


