Guide

🔄 首振り

MG996Rサーボを使った首振り機能。コントローラー・ランダム・画像処理による首振り制御を実装します。

ロードマップ#

本ページは、以下ロードマップ「首振り」のガイドページです。

また、本ページは「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

    alt text


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

    alt text


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

    alt text


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

    alt text

組み立て手順#

以下動画のように、必要パーツを組み立てます。

※ 動画には、前回までに印刷したパーツも含まれます

組み立ての際のポイント

組み立て動画では、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」を有効化

します。

alt text

コントローラー制御#

コントローラー制御の手順を説明します。

「Config」タブの「Modes/servos」にて、head_panの

  • 「mode」を「manual」

に設定してください。

alt text


「Servo」タブで各サーボの角度を変更すると、それに合わせてsmaboが左右に動作します。

ランダム制御#

ランダム制御の手順を説明します。

「Config」タブの「Modes/servos」にて、head_panの

  • 「mode」を「random」
  • 「group」を「neck」

に設定してください。

alt text

random_group

同じrandom_groupに設定されたサーボモーターは、同じタイミングでランダムに動作します。


なお、新規のrandom_groupは「Add random Group」をクリックすると、追加できます。

alt text


しばらく待つと、ランダムなタイミングでsmaboが左右に動作することが確認できます。

画像処理による制御#

画像処理による制御の手順を説明します。

「Config」タブの「Modes/servos」にて、head_panの

  • 「mode」を「manual」

に設定してください。

alt text


「Vision」タブの「Detection」にて、

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

します。

alt text


次に、「Behaviors」の

  • 「Servo follow」を有効化し、
  • 「Pan joint」を「head_pan」
  • 「Pan Direction」を「reversed(-1)」

に設定します。

alt text


設定完了後、スマホカメラの前に認識対象の物体を近づけると、物体に追従するようにsmaboが首振りすることが確認できます。

次回#

本ページはロードマップ上の終着点のひとつです。

他の機能も実装する場合は、ロードマップから次のページへ進んでください。