二足歩行ロボットの脚を作っていましたが、思ったよりもバランスを取るのが難しく、もっとモーションの勉強が必要なのではないかと感じています。
そこで今回は、四足歩行でモーションの勉強をしていこうと思います。
サーボモータ
TowerPro の MG90S と MG996R について
出来るだけ軽量化したタイプと少し重量が重くなるが、パワーが向上するタイプの2種類を作成しようと思います。軽量化タイプは、TowerPro のマイクロサーボモータ MG90S を使用して、重量タイプは、同じくTowerPro のサーボモータ MG996R を使用します。
【仕様】
項目 | マイクロサーボモータ MG90S | サーボモータ MG996R |
---|---|---|
電源電圧 | 4.8 – 6.0V | 4.8 – 6.6V |
スピードMAX | 0.10秒/60°(4.8V) 0.08秒/60°(6.0V) | 0.18秒/60°(4.8V) 0.15秒/60°(6.0V) |
トルクMAX | 1.8kgf・cm(4.8V) 2.2kgf・cm(6.0V) | 9.4kgf・cm(4.8V) 11kgf・cm(6.0V) |
制御信号(*1) | PWM(50Hz) | PWM(50Hz) |
デッドバンド幅 | 1μ秒 | 1μ秒 |
動作温度範囲 | 0 – 55℃ | 0 – 55℃ |
サーボプラグ | 茶=GND、赤=電源[+]、橙=制御信号 [JRタイプ] | 茶=GND、赤=電源[+]、橙=制御信号 [JRタイプ] |
重量 | 13.4g | 55g |
寸法 | 22.8×12.2×28.5mm | 40.7×19.7×42.9mm |
MG90S と MG996R を比較すると 動作速度はMG90Sが速いですが、トルクはMG996Rが5倍程度大きな値になっています。その為、比較的重たいバッテリー等を搭載したロボットを動かすには、MG996Rの方が適しています。
しかし、その分、サーボモータ自体の重量と寸法が大きくなるのでロボットのサイズも大きくなってしまいます。
高額になってしまいますが、純正品を使いたい方は、秋月電子通商で購入することをお勧めします。
類似品だと思いますが、Amazonでの購入リンクも付けておきます。
PWM制御について
サーボモータは、PWMモータドライバを使って制御します。
以下は、MG90S のデータシートに載っているPWM制御仕様のページです。
PWMの周波数は、50Hz(20ms周期)となっています。基本的にほとんどのサーボモータは、この周波数による制御となっているようです。仕様に記載されているようにPWM制御とは、1周期(20ms)の間の信号がオンの時間の幅で制御する方法です。そのため制御時の角度の指示は、μs単位で行います。
データシートでの制御範囲は、1 – 2ms となっているので、中央値が 1500μs で 0°、最小値が 1000μs で -90°、最大値が 2000μs で +90° となっています。
しかし、実際に試してみると、1000μs~2000μs では、-90°~+90°までは動きません。-90°~+90°まで、動かすための制御指示は、 500μs~2500μs が適切なのではないかと思います。
実際に動作確認をしてみました。
ArduinoのデジタルピンからPWM信号を使って直接制御することも可能ですが、電圧は最大で5Vとなり、電流は20mA程度しか流すことが出来ません。マイクロサーボモータを2台程度であれば動かすことが出来ますが、MG996Rでは、無負荷動作時でも170mAを消費するので、別の外部電源から電力を供給する必要があります。
今回は、PCA9685 を使って、12台のサーボモータを制御しました。外部電源はバッテリーを繋いで、レギュレータにより6Vに電圧を調整しています。
脚の設計
脚の完成図は、以下のような形状になっています。
関節は3つあります。つま先を取り付けた第二関節、第二関節を取り付けた第一関節、脚の根本を左右に動かす関節の3つになります。
第一関節と第二関節は、下図のように足を延ばしたり曲げたりする動作に使います。
下図の位置は、中央位置(0°)にある状態です。
脚の根本の関節は、脚を左右に振る動作に使います。下図の状態は、中央位置(0°)にある状態です。
3Dプリンタで印刷して、下の写真のように組み立てました。
なお、つま先は、TPEというゴムに似たフィラメントで作りました。
下の記事で使ったフィラメントです。
胴体の設計
設計変更前
胴体の完成図は、下図のように八角形に肩を付けたような形状になっています。
まずは、以下のように胴体と脚を繋ぐための土台を設計します。
脚の数に合わせて、同じものを4つ作ります。
胴体と土台を繋ぎます。
下図のように、この止め方だと土台が安定しませんね。
柱を立てます。
バッテリーを固定する部品を取り付けます。
上段部分を取り付けます。
上段に電子部品を取り付けます。
一旦、設計は完了しました。
下段には、バッテリーと電圧降下モジュール、電源接続用のブレッドボードを取り付けます。
上段には、Arduino UNO R3 (互換品)と PCA9685 を配置してねじ止めします。
設計変更後
2点、明らかに設計変更が必要な個所がありましたので、その修正を行いました。
- 柱が細すぎて強度が弱いことと組み付けが非常に難しいため胴体に一体化
- 脚の土台部分が回転してしまうため、2ヵ所でネジ留め
上記の設計変更に加えて、使用するバッテリーを2S 7.4V から 3S 11.1Vに変更しました。理由は、レギュレーターは、一般的にアウトプット電圧よりも3V以上大きい電源電圧を入れる必要があるのですが、6Vの出力に対して7.4V(満充電であれば、8.4V)の入力では、低いためです。
また、開始、停止の毎にバッテリー端子をはめたり、外したりするのは面倒なのでスイッチも取り付けました。
- バッテリーの変更
2S 7.4V ⇒ 3S 11.1V - 柱を胴体に一体化
- ブレッドボードの持ち上げ
バッテリーが大きくなり回路が繋ぎにくくなったので、20ミリ程度持ち上げた
- 脚を接続する土台の変更
胴体と直接、二か所でネジ留め
- バッテリー固定ブラケットの変更
バッテリーの大きさに合わせてサイズを変更
- バッテリー用接続コネクタの固定部品追加
今回のバッテリーはT型コネクタになるので、空中でブラブラさせずに柱に固定するようにオプションで部品を追加。(無くても支障はない)
- 電源スイッチの固定部品追加
回路への電源をオン/オフできるようにスイッチを追加。
(無くても支障はないですが、コネクタの接続/接続を外す必要がある)
- サーボモータのケーブルを通す穴を変更
横幅を広くして、穴を3つに分割。
以下が設計変更後の四足歩行ロボットの完成図です。
四足歩行ロボットの組み立て
組み立ては、以下の動画を作成しました。
脚の組み立て
以下の部品を組み立てて脚を作っていきます。写真は脚1本分の部品。
マイクロサーボモータMG90Sと設計した脚の部品を3Dプリンタで印刷します。
なお、つま先は、TPEというゴムのような素材のフィラメントで印刷しました。
以下、使用しているフィラメントです。
※フィラメント種類は同じですが、リンク画像の色は異なっています。
つま先と第二関節の組み立て
まずは、第二関節を作ります。
つま先と第二関節をネジで止めて、サーボモーターを取り付けます。
ここまで組み立てた状態の写真
アームは、サーボモーター付属のサーボホーンを利用します。
サーボホーンの穴を、下の写真のように約2ミリの大きさに拡張します。
サーボホーンは、アームにはめ込んで、M2のネジで拡張したネジ穴に取り付けます。
アームをサーボモーターに取り付けて完了です。
第一関節の組み立てと第二関節との連結
第一関節にサーボモーターを取り付けます。
第二関節のサーボモータの駆動部分の反対側は、M4のベアリングをはめ込んでいます。
第一関節側には、M4のネジをあらかじめ締めています。
第一関節と第二関節を連結します。
第二関節同様にアームを取り付ける。
反対側にも同様に、ベアリングをはめ込む。
これで第一関節まで完成しました。
脚の根本部分の組み立てと第一関節との連結
脚の根本と第一関節を連結します。
先ほどと同様にアーム側は、M3x10mmのネジで固定します。
脚の根本にサーボモーターを取り付けて、キャップを被せて裏からネジで固定します。
脚の根本と脚をサーボギアーとサーボホーンで連結します。
以上で脚が完成しました。
胴体の組み立て
胴体の一階部分の組み立て
胴体の組み立てについては、工程ごとに写真を残していなかった為、ある程度完成した写真で説明します。
上の写真に記載の各部品は、以下のものを使っています。
柱の部分は、強度を補強するために裏からM3ネジを通してします。
胴体の二階部部の組み立て
2階部分は、8本の柱にネジ留めして固定します。
部品は、Arduino UNO R3 と PCA9685 PWMモータードライバを取り付けます。
こちらは、以下のものを使っています。
胴体に脚を取り付ける
脚のサーボモータ用ケーブルを二階部分の穴に通します。
ケーブルを通す穴が小さかったので、ピンセットを使って通しています。
四本の脚の全てのケーブルを通し終わったら、土台に脚を固定します。
サーボモーターのケーブルをPCA9685の端子に接続します。
上図の接続は、以下の表のように接続しています。
チャンネル | サーボモーターの位置 | 閉じる(MAX)μs | 開く(MAX)μs |
---|---|---|---|
0 | 左後脚の第二関節 | 2500 | 500 |
1 | 左後脚の第一関節 | 500 | 2500 |
2 | 左後脚の根本 | 2000 | 1000 |
3 | |||
4 | 左前脚の第二関節 | 2500 | 500 |
5 | 左前脚の第一関節 | 500 | 2500 |
6 | 左前脚の根本 | 1000 | 2000 |
7 | |||
8 | |||
9 | 右前脚の根本 | 2000 | 1000 |
10 | 右前脚の第一関節 | 500 | 2500 |
11 | 右前脚の第二関節 | 2500 | 500 |
12 | |||
13 | 右後脚の根本 | 1000 | 2000 |
14 | 右後脚の第一関節 | 500 | 2500 |
15 | 右後脚の第二関節 | 2500 | 500 |
電源供給部の電圧測定
サーボモーターやArduinoの動かす上で電圧制御は、慎重に行う必要があります。
電圧が低いと全く動きませんし、高すぎると負荷がかかり故障や発熱の原因にもなってしまいます。
まずは、サーボモーターへの電力供給部の電圧を測ってみます。
レギュレーターを経由しているので、6Vに電圧が下がっているはずです。
続いて、Arduino UNO R3 のDCジャックの電圧を測ってみます。
9 – 12V が適切な電圧になります。
両方、大丈夫のようです。では、色々と動かしてみたいと思います。
MG996R を使った四足歩行ロボットの制作
MG90Sの6V時の最大トルクは、2.2kgf・cmです。つまり1cm先の支点に対して2.2kgのものを動かせるというものです。支点の距離が遠ざかるほどトルクは弱くなります。
例えば、サーボモーターのギアの中心から次の支点までの距離が5cmであれば、0.44kg…つまり440g程度の力に抗える程度のものです。このトルクでは、安定した動きは難しいのではないかと思います。
そこでサイズは、かなり大きくなるものの6V時の最大トルクが11kgf・cmあるMG996Rを使ってもう一つ四足歩行ロボットを作ってみたいと思います。
MG996Rの脚の制作
基本的には、MG90S 時とほぼ同じ設計です。
ただ、サイズが大きくなっています。また、サーボモーターの重量は、4.1倍になります。
MG996Rには、付属品が結構付いています。
ネジ留めは4ヵ所でゴム栓とハトメで支えます。
MG996Rがピッタリとフィットするサイズで設計をしています。
アームを取り付けます。アームは、MG996Rのサーボホーンをはめ込んで、M2x4のネジで3ヵ所を固定しています。
同じ要領で脚を4本作ります。
胴体下段の制作
胴体は、バッテリーが変わると設計も大きく変わります。
今回は、4S 14.8V のバッテリーを使います。コネクタの形状は、XT60でした。
バッテリーに付属のバンドで固定しました。
バッテリーのコネクタは、XT60でした。
形状が一致するコネクタを購入し、電線にハンダ付けします。
ハンダ付けした箇所は、熱収縮チューブで絶縁します。
コネクタの固定部品とスイッチを取り付けます。
胴体上段の制作
胴体上段には、Arduino UNO R4 Wifi と PCA9685 PWMServoDriver モジュールを取り付けます。今回、Arduino は、付属のアクリルケースを使用しました。
自画自賛になってしまいますが、この設計データはシンデレラフィットでした。
PCA9685 PWMServoDriver モジュールは、M3ネジで固定すると少し基板の一部に被ります。
アクリルケースに Arduino UNO R4 Wifi を固定します。
寸法は、Arduino UNO R3 とほぼ同じです。
脚の取り付け
胴体下段に脚を取り付けます。やはり、大きいですね。
胴体上段に各種コードを通します。(固定する前にケーブルを通す必要があります。)
電源供給用の電線を接続します。
Arduinoへの供給は、DCジャックを使って行います。ここには14.8Vの電源が繋がります。
PCA9685への供給は、レギュレーターからのアウトプット電線、ここには6Vが繋がります。
電圧を一応、計測してみます。
胴体下段に8ヵ所のネジを絞めて上段を取り付けます。
回路の接続
まずは、Arduino UNO R4 と PCA9685 PWMServoDriver を繋ぎます。
ケーブル | Arduino | PCA9685 |
---|---|---|
赤 | 5V | VCC |
黒 | GND | GND |
オレンジ | A4 | SDA |
黄色 | A5 | SCL |
各サーボモーターからのケーブルを繋ぎます。
接続は、MG90S と同様にしています。
チャンネル | サーボモーターの位置 | 閉じる(MAX)μs | 開く(MAX)μs |
---|---|---|---|
0 | 左後脚の第二関節 | 2500 | 500 |
1 | 左後脚の第一関節 | 500 | 2500 |
2 | 左後脚の根本 | 2000 | 1000 |
3 | |||
4 | 左前脚の第二関節 | 2500 | 500 |
5 | 左前脚の第一関節 | 500 | 2500 |
6 | 左前脚の根本 | 1000 | 2000 |
7 | |||
8 | |||
9 | 右前脚の根本 | 2000 | 1000 |
10 | 右前脚の第一関節 | 500 | 2500 |
11 | 右前脚の第二関節 | 2500 | 500 |
12 | |||
13 | 右後脚の根本 | 1000 | 2000 |
14 | 右後脚の第一関節 | 500 | 2500 |
15 | 右後脚の第二関節 | 2500 | 500 |
以上でMG996R用の四足歩行ロボットが完成です。
四足歩行ロボットを動かしてみる
実際に試行錯誤しながらロボットを動かしてみました。
今後、歩行なども試してみたいですが、現段階では、立ち上がるところまでの試行です。
サーボモーターのトルクについて
そもそもトルクって何?ですよね。
自分は、ザックリとモーターを動かす力(パワー)という理解をしています。
トルクとは、「固定された回転軸に対して物体の回転時にはたらく力の大きさ、ねじりモーメント(回す力)」のことをいいます。トルクは、力に距離をかけた結果で定義されています。
力(F)×距離(L)=トルク(N)
トルクの単位は、標準的には「N・m(ニュートンメートル)」で表します。サーボモーターの仕様では、「kgf・cm(キログラムフォースセンチメートル)」で表現されてます。
回転軸と力の作用点までの距離が大きくなると同じ力(F)の大きさでもトルクは大きくなります。これは「てこの原理」と同じです。例えば、棒レンチを縦にして回すか、横にして回すかで締める力が違ってくると思います。(以下の写真)
棒レンチを横にして回すとネジの回転軸から遠い場所を持って回すことができるので、距離(L)が大きくなり同じ力(F)で回してもトルク(N)が大きくなります。逆に棒レンチを縦にして回すと距離(L)が小さくなるのでトルク(N)が小さくなります。
ところで、N(ニュートン)って何ってなりますよね。
\(1N=1kg・m/s^2\)
1ニュートンは、1キログラムの質量をもつ物体に1メートル毎秒毎秒(\(m/s~2\))の加速度を生じさせる力と定義されています。なので、自由落下時にかかる力は、重力なので単位換算の際には、質量に対して、重力加速度=9.8\(m/s^2\)をかける必要があります。
\(1kgf・m=9.8N・m\)
このような式になります。(って分かりにくい!)
MG90S と MG996R の6V時の最大トルク(N・m)は、以下の値にないります。
MG90S | \(2.2kgf・cm=0.2156N\) |
MG996R | \(11kgf・cm=1.078N\) |
ってトルクの話がN(ニュートン)の話に変わってきていますね。
分かりにくいので、これ以上、N(ニュートン)を使うのはやめておきますが、サーボモーターによっては、トルクをN・mで表示されることがあるので、逆換算は覚えておいた方が良さそうです。
例えば、双葉電子工業製のロボサーボだと最大トルクが33N・mとのことなので、換算すると以下のようなスペックになります。(産業用ロボットサーボなので購入できないですが…)
\(33N・m=336.7kgf・cm\)
今回作った四足歩行ロボットの必要トルクについては、動画にも載せていますが以下のようになります。まず、MG90Sだと第一関節にかかる荷重が1脚あたり最大で2.6kgf・cm、最小でも1.1kgf・cmになります。
MG996Rだと1脚あたり最大で11.34kgf・cm、最小で5.36kgf・cmになります。
ちなみに最小というのは、第二関節が地面に垂直に接しており作用点が第二関節のサーボギアの軸だった場合を指しています。
今後、サーボモーターを選定するときには、必要なトルクを先に計算するべきですね。
サーボモーターのアニマトロニクス制御
アニマトロニクスとは、生物を模倣することをいいます。
ここでのアニマトロニクスとは、サーボモーターの動きを生物の動きに似せてヌルっと動かすことを指しています。
今回は、MG996Rのみこのアニマトロニクス制御を入れています。
具体的には、初速が最高速で動き始めて、減衰率により速度を減衰させていく方法を行っています。
\(\displaystyle \sum_{k=1}^{n}(a^{k-1}・\mathrm{V}_1)=d\)
\(n :動作回数、 \mathrm{V}_1 :初速、 d :移動距離(μs)、 a :減衰率 \)
制御の方法は、2種類あります。
- 減衰率、動作回数を固定して初速で制御する方法
- 初速、動作回数を固定して減衰率で制御する方法
本当は、2の方がよりヌルっと動きそうですが、計算が難しいので1を採用しました。
\(\displaystyle \mathrm{V}_1 = \frac{1-a}{1-a^n}・d \)
項目 | 値 | 補足項目 | 値 |
---|---|---|---|
動作範囲(°) | -90° ~ +90° | 移動距離 | 180° |
動作範囲(μs) | 500μs ~ 2500μs | 移動距離 | 2000μs |
MAXスピード(s) | 0.18s / 60° | 移動距離 | 666.66μs |
制御間隔(ms) | 5ms | 移動距離 | 18.52μs |
制御回数(回) | 36回 | ||
減衰率 | 0.992 | ||
最高速度(μs/1回) | 18μs |
移動距離 | 回数 | 初速 | 最終速度 | 移動距離 | ||
---|---|---|---|---|---|---|
250 | μs | 25 | 10.99 | 8.99 | 125 | ms |
500 | μs | 50 | 12.09 | 8.09 | 250 | ms |
750 | μs | 75 | 13.26 | 7.25 | 375 | ms |
1000 | μs | 100 | 14.49 | 6.49 | 500 | ms |
1250 | μs | 125 | 15.78 | 5.78 | 625 | ms |
1500 | μs | 150 | 17.14 | 5.13 | 750 | ms |
1750 | μs | 175 | 18.54 | 4.55 | 875 | ms |
2000 | μs | 200 | 20.02 | 4.02 | 1000 | ms |
今回作ったロボットのデータ
素人の設計やプログラムなので自信を持って公開というものではないですが、一応、以下のサイトからダウンロードすることが出来ます。
今後の予定
さて、最終的な目的は、四足歩行ロボットを作ることではなく、ロボットのモーションをどうやって考えていくかということにあります。最終的なヒューマノイドロボットでは、圧力センサやジャイロセンサを使って、自律させる必要がありますが、現在は、マニュアルでの制御を行っている段階なので、どのようにArduinoにモーションを渡して、各サーボモータをどのように制御するか、モータ制御のプラットフォームを含めて考える必要があります。
まずは、MG996Rの四足歩行ロボットは、WiFiを使った無線制御で動かせるようにしたいと思います。
これでArduinoのコンパイル&アップロードでの決められた動きではなく、その時々で次の動きを無線から指示できるようになれば、ロボットのモーション指示が柔軟になりかなり進化させることが出来ます。進展があれば、また別の記事にしたいと思います。
以上です。
コメント