HomeMadeGarbage Loading

SCS0009を用いた4脚ロボットの製法

ホーム
電子工作
Raspberry Pi
IOT
音楽
Home > 電子工作 > SCS0009を用いた4脚ロボットの製法
すき 3
うんこ 0

はじめに

これまでに各種サーボモータを使用して4脚ロボットを製作してきました。
以下の記事ではシリアルサーボの STS3032 と SCS0009 、そしてPWMマイクロサーボでの比較を実施しました。

4脚ロボットの検討

 

どの4脚ロボットが魅力的であるかアンケートを募ったところ以下のような結果となりました。

やはり安価で手軽に使用できるSG90級のPWMサーボで作りたいという意見が多かったです。

SG90によるロボットは既に良書があって今さら製法公開に魅力は感じませんし、私は電子工作界の栗原はるみを目指しておりますので次点の高額なSTS3032での作例レシピを書くことにも抵抗がありました。

私が製法公開する意義を見失っていた中で、 SCS0009 による4脚ロボットでバク転を実現することができました。

比較的安価で入手性も良いシリアルサーボ SCS0009 でバク転可能な4脚ロボットというのはなかなか面白いと思いますので、ここで製法を公開したいと思います。

何かございましたらコメントなどでご意見いただけますと幸いです。

構成

マイコンにはIMU内蔵のATOM Matrixを使用します。
2セルのLiPoバッテリを使用してマイコンへは5Vに降圧して供給しています。

 

 

ここでは筐体パーツは3Dプリント品で、コントローラは専用基板を製作し用いています。

回路図

以下が本4脚ロボットの回路図です。先の構成図の通り非常に単純です。

部品

ここで使用した部品は以下のとおりです。参考まで

 

ロボット組立てに使用したネジは以下のとおりです。

  • なべタッピングネジ 2×8mm:12本 (ボディとサーボ固定部接続用) 
  • M2×6mmネジ:9本 (サーボアームと筐体固定用、 ATOMと基板固定用)
  • なべタッピングネジ 2×10mm:16本 (足パーツ固定用) 
  • M3ネジもしくはスペーサー:4本 (基板固定用) 
  • M3×8mmネジとナット:2セット (スライドスイッチ固定用)

専用基板

以下で専用基板を販売しておりますので宜しければご購入のほどよろしくお願いいたします。
構成がシンプルであるためユニバーサル基板などでの自作も容易かと思います。

[電子工作キット] 4脚ロボット 専用基板

 

基板のサイズは以下のとおりで、筐体3Dモデルもこの基板サイズを元に製作しています。

3Dモデル

3Dモデルは以下よりダウンロードできます。zipファイルがダウンロードされます。
 4脚ロボット筐体用3Dモデル

 

ここではshoe.stlのみTPUフィラメントで出力し、残りはPLAフィラメントで出力しました。

改訂履歴

  • 2024年4月23日:公開(初版)
  • 2024年4月30日:ネジ穴 微調整
    base.stl:servoFix1固定ネジ穴調整
    servoFix1、servoFix2:サーボ固定ネジ穴縮小

筐体組み立てキット

3Dプリント品も販売しております。
よろしければご検討ください。

[電子工作キット] 4脚ロボット 筐体組み立てキット

ロボット製作

サーボモータ設定

SCS0009サーボは専用ソフトでIDを設定して以下のように配置しました。
ボーレートも1M bpsに変更します。

 

SCS0009は信号0~1023に対して0~300°回転します。専用ソフトで中点の信号511をした状態でサーボ付属のアームを以下のように水平になるようにはめ込みます。

片側アームが付属されていない場合はニッパーで切るなどで対応ください。
ここで完全にアームを水平に出来なくても後ほどオフセット調整しますので問題ありません。

アームには筐体固定用に中心穴から3番目の穴を2mm径で穴あけしておきます。

筐体組み立て

なべタッピングネジ 2×8mm (12か所)でbase.stlにservoFix1-1.stlとservoFix1-2.stlを2個づつネジ止めします。

 

サーボを前述のIDの通りに付属のネジでservoFix1に固定します。

 

サーボのアームにarm1.stlを固定します。arm1.stlは中心の穴をM2ネジ用のタッピングでネジ切りして、サーボのアームに開けた2mm穴にM2×6mmネジで固定します。

ネジ切りせずに長めのネジでナット固定でも構いません。

M2×8mmネジでアーム軸とも固定します。

 

大腿パーツservoFix2をservoFix1の丸突に通してarm1の先端の2か所となべタッピングネジ 2×10mmでネジ止めします。

 

servoFix2の先に膝となるサーボを前述のIDの通りに付属のネジで固定します。

 

膝サーボのアームはarm3との干渉を避けるために以下のようにニッパーで切り取ってください。
下肢パーツarm2とアームをarm1の時と同様に固定します。

 

arm2とarm3を2個の2×10mmでネジ止めします。

足先にTPUフィラメントで出力したshoe.stlを履かせて筐体は完成です。

コントローラ

前述の回路と部品で制御基板を構築します。
ATOM Matrixと基板はピンヘッダで接続して、基板間にM2×6mmネジでspacer.stlを通して固定します。

 

基板はbase.stlにM3ネジ用タッピングでネジ切りして4か所でねじ固定します。
ここではロボット反転時にATOM Matrixが地面などにぶつからないように17mm程度の高さになるネジタイプのスペーサで固定しました。

 

サーボを基板コネクタに接続 (信号線はパラレルに接続されているので接続位置はどこでもOK)し、バッテリを両面テープで固定します。

電源周り

コントロール基板の電源入力にバッテリ(7.4V)を接続します。ここではバッテリコネクタ間にスライドスイッチを挿入しております。
スイッチはswitch.stlをbodyに接着してM3×8mmネジとナットで固定しています。

 

組み立て動画

以下はサーボの設定から筐体組み立てまでの様子を配信したアーカイブ動画です。
宜しければ参考にしてください。

 

サーボオフセット調整

サーボにアームを差し込んだ際にメカ的誤差で水平がとれていない状況ですので調整します。

サーボ角度指定信号にオフセット値を与えて水平にして、ロボットのサーボ角度0°指定の際の姿勢を以下のようにビターっとまっすぐにします。

調整の様子

後述するアプリをATOM Matrixに書き込み、ATOMをアクセスポイントとしてWiFiを介してスマホ(もしくはPC)と接続しオフセット調整します。

以下が実際に調整している様子です。

 

調整用アプリ Arduinoコード

 

使用ライブラリ

ボードマネージャ
 ESP32 バージョン 2.0.15
 M5Stack バージョン 2.1.1

ライブラリマネージャ
 M5ATOM バージョン 0.1.2

サーボ通信用ライブラリ
 ESP32のGPIOを用いてFeetechのシリアルサーボを簡単に駆動できるライブラリです。
 サーボからの受信はできませんがUART信号変換基板を使用せずに直接信号送信が可能です。
 https://qiita.com/Ninagawa123/items/7b79c5f5117dd1470ac9

 

コード説明

L. 8~12  WiFi APモード用設定。SSIDやパスワード、IPを指定 (それぞれ任意)。

L. 18 Preferencesライブラリを使用して調整値をフラッシュに記憶して電源OFF後も保持します。

L. 26~253ブラウザアプリ表示設定
 APモード接続時の各サーボのオフセット値設定用の表示を記述しています。
 オフセット調整は±2 分解能で実施できるようにしています。

L. 257~306 setup関数
 UART1:送信ピンGPIO19、ボーレート1Mbpsに設定 (L. 260)

 アプリで設定した各オフセット値はPreferences機能でフラッシュに記録します。
 電源起動時にフラッシュに記録されたオフセット値を読み出します (L. 267~274)

 WiFiとブラウザアプリ用のハンドラを設定 (L. 277~305)

L. 309~322 loop関数
 servo_write() 関数でオフセット値を加味して各サーボの角度を0°指定

L. 326~353 サーボ駆動用 scs_moveToPos()関数
 参考:Feetechのサーボをマイコンから直接動かす

L. 356~359  servo_write() 関数
 サーボIDと角度を指定する。scs_moveToPos()関数を用いてオフセット値を加算して信号設定。

調整用アプリ画面

  • 調整用アプリをATOM Matrixに書き込んで、スマホもしくはPCのWiFi接続設定でSSID ”servoOffset”に接続
    パスワード:password
     
  • ブラウザで”192.168.55.28”にアクセス

“-“、”+”をクリックしてサーボが水平になるようにオフセット値を増減させます。

最終値を控えて、本動作コードにオフセット値として書き込みます。

調整アプリ制作動画

以下はサーボオフセット調整アプリの制作から実際に調整するところまでの様子を配信したアーカイブ動画です。
宜しければ参考にしてください。

Arduinoコード

4脚ロボット動作コードです。

使用ライブラリ

ボードマネージャ
 ESP32 バージョン 2.0.15
 M5Stack バージョン 2.1.1

ライブラリマネージャ
 M5ATOM バージョン 0.1.2

Kalman Filter Library  バージョン1.0.2
 https://github.com/TKJElectronics/KalmanFilter

サーボ通信用ライブラリ
 ESP32のGPIOを用いてFeetechのシリアルサーボを簡単に駆動できるライブラリです。
 サーボからの受信はできませんがUART信号変換基板を使用せずに直接信号送信が可能です。
 https://qiita.com/Ninagawa123/items/7b79c5f5117dd1470ac9

コード説明

L. 8~12  WiFi APモード用設定。SSIDやパスワード、IPを指定 (それぞれ任意)。

L. 17 Preferencesライブラリを使用して調整値をフラッシュに記憶して電源OFF後も保持します。

L. 19 サーボオフセット調整アプリで導出したオフセット値をoffset[]配列に入力してください。

L. 23 本ロボットの足の長さです。逆運動学算出時に使用
 大腿長さL1=50mm、下腿長さL2=65mm

L. 65~67 ロボット動作パラメータ初期値。アプリで可変

L. 72~82 加速度センサから傾斜角を取得する関数
 ATOM Matrix内蔵のIMUセンサ(MPU6886)で検出した加速度からX軸とY軸の傾斜角を算出

 また、Z軸の加速度によってロボットの反転状態を検出しています(pos)。

L. 85~89 角速度取得関数
 IMUのX軸とY軸の角速度を使用

L. 93~515 ブラウザアプリ表示設定
 APモード接続時の動作モード選択ボタンや各パラメータ設定用の表示を記述しています。 

L. 519~608 core0動作
 ATOM Matrix デュアルコアのcore0でディスプレイ表示とブラウザ表示とハンドラ処理を実行します。

 機体のX軸とY軸の角度を以下の通りLEDインジケータ表示しています。
 インジケータは動作モード実行時は機能しません。
 ・±1°以下:中心で緑表示
 ・±20°以上:赤表示
 ・その他:青表示
 

L. 611~694 setup関数
 UART1:送信ピンGPIO19、ボーレート1Mbpsに設定 (L. 614)

 慣性センサMPU6886のフルスケールレンジは以下で指定 (L. 619, 620)
 ・加速度:16bit ±2 g
 ・ジャイロ(角速度):16bit ±250 deg/sec

 アプリで設定した各オフセット値はPreferences機能でフラッシュに記録します。
 電源起動時にフラッシュに記録されたオフセット値を読み出します (L. 630~641)

 WiFiとブラウザアプリ用のハンドラを設定 (L. 644~694)

L. 697~1044 loop関数
 カルマンフィルタライブラリの関数を用いてセンサの姿勢角と角速度を算出 (L. 698~713)

 バク転動作モード (L. 718~751)
  後述の各足の逆運動学関数で足先の座標を指定してバク転動作を実現しています。
  ATOM Matrixが上向きの姿勢の時のみ起動します。反転時は足移動の制約によりバク転できません。
  着地後に伏せの姿勢に戻るタイミングを機体角度(X軸)をトリガにしており、パラメータwakeUpAngle(初期値 -1.0°)で調整可能です。

 屈伸、足踏み、前後進、左右旋回動作モード (L. 753~995)
  逆運動学関数で足先の座標を指定して各動作を実現しています。
  足の上下、左右の移動にはそれぞれ正弦波形で緩やかに動かしています。
  以下のパラメータで動作を調整可能です。
  ・period:動作の周期時間を指定
  ・x:各足先の前後位置指定
  ・height:各足先の付け根からの高さ位置指定
  ・upHeight:足上げ動作時の上げ量を指定
  ・stride:歩行時の歩幅指定

 反転動作モード (L. 996~1021)
  起上って反転動作します。

 IMU動作モード (L. 1022~1037)
  機体の傾きと角速度を検知して足の高さを制御し機体の水平を保ちます。
  それぞれの足の高さをセンサのX軸、Y軸の角度と角速度に応じていわゆるPD制御しています。

  応答はパラメータKp、Kdで調整できます。

 初期姿勢 (L. 1038~1042)
  動作モード以外は全足がパラメータx, heightで指定した位置で固定されます。

L. 1048~1075 サーボ駆動用 scs_moveToPos()関数
 参考:Feetechのサーボをマイコンから直接動かす

L. 1078~1082 servo_write() 関数
 サーボIDと角度を指定する。scs_moveToPos()関数を用いてオフセット値を加算して信号設定。

L. 1089~1175 逆運動学
 関数 fRIK()、fLIK()、rRIK()、rLIK()でそれぞれの足先座標を指定して、サーボの角度を算出して駆動しています。

 各足の付け根を原点として、高さと前後の座標を指定して以下の式で運動させます。

 機体の反転時もサーボ指定角度の符号変えるだけで同じ座標指定シーケンスでの動作制御が可能となってます。
 各サーボ角度は他のパーツなどに干渉しないようにconstrain関数で動作範囲角度を制限しております。

アプリ画面

  • 調整用アプリをATOM Matrixに書き込んで、スマホもしくはPCのWiFi接続設定でSSID ”robot0009”に接続
     パスワード:password

  • ブラウザで”192.168.55.27”にアクセス

動作モードはボタンクリックでONし、再度クリックでOFFします。

パラメータは “-“、”+”をクリックして値を増減させます。
値は電源OFF後も保持されます。

動作

動作の様子を以下の動画にまとめました。

おわりに

ここではシリアルサーボ SCS0009による4脚ロボットの製法を記載しました。

シンプルなシステム構成で豊富な動作表現を実現できたと考えておりますので、是非参考にしていただければ幸いです。

 

何かございましたらコメントいただけますと幸いです。

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください