最近、友人とお台場を歩いていたら、バ●キングって番組で街頭インタビューを受けて映ってしまったmoshiroboです
平日お昼の番組ですし一瞬なので多分知人は気付いてないです(笑)
さて、前回の続きです!
(前回のブログ)「Nexus robot [15001B]サンプル機体完成!」
http://lets-robot.com/modules/weblog/details.php?blog_id=3655
こちらが前回のブログで紹介した、
「3WD48mmオムニホイールロボットプラットフォーム(エンコーダ付) 黒 (15001B)」(以下15001B)
に、「Freaduino UNO Rev2.2(Arduino互換のマイコンボード)」とモータドライバを搭載して製作したサンプル機体です。
・・・
・・・
ところで、なぜこの機体を作ったのかと言いますと・・・
15001の使い方が分からないという方が意外と多い!
からです。
↓15001Bはこんなやつです。
3WD48mmオムニホイールロボットプラットフォーム(エンコーダ付) 黒 (15001B)
要するに、
簡単に使えるお得なセットなので、ぜひ買って試してみてね!
という意図でございます。
前回は使用部品や配線箇所、動画を載せただけなのですが、今回は「配線図」と「オムニホイール3輪で全方位へ動かす原理」を紹介します。
まず、配線図は下の画像の通りです。(雑ですみません)
注意1:2000mAh,3.7Vと記載のバッテリーは仮配置で、実際は「Nexusロボット用バッテリー(Ni-MH 12V1800mAh)」を使用しています。
注意2:FreaduinoUNOの電源とバッテリーの接続はソフト上で配線できなかったので、手描きで書いています
モータの配線図は下の画像の通りです。
①:モータの+12V
②:モータのGND
③:エンコーダの+5V
④:エンコーダのGND
⑤:エンコーダのA相
⑥:エンコーダのB相
※詳しく知りたい方は、GitHubにアップした「Untitled Sketch 2.fzz」というファイルをFritzingというソフトでご確認ください)
・GitHub
https://github.com/toshimori/15001.git
また、Fritzingで使ったデータは下記のデータをお借りしました。
(モータドライバ)https://github.com/yohendry/arduino_L298N
(FreaduinoUNO)https://github.com/ComputacaoNaEscola/Fritzing/blob/master/Freaduino%201.8.fzpz
(モータ)http://forum.fritzing.org/t/dc-motor-with-two-phase-encoder/3776
では次に「オムニホイール3輪で全方位へ動かす原理」の紹介です。
まずはモータとロボットの、速度とベクトルの関係から。
ここから計算していきます。
・・・ところで、行列の計算って覚えてますか?
私は自信が無かったので、現役工業大学生のアルバイトさんに聞いて確認しました(笑)
こんな感じになります。
V1 = 1×Vx + 0×Vy + r×Vθ
= Vx + rVθ
V2 = -1/2×Vx + √3/2×Vy + r×Vθ
= -Vx/2 + Vy√3/2 + rVθ
V3 = -1/2×Vx – √3/2×Vy + r×Vθ
= -Vx/2 – Vy√3/2 + rVθ
ここから、各方向に動かすための計算をしていきます。
ただし、全ての計算式を書いていくと長くなるので「前方向」のみ計算式を書いて、他は最終的な値だけ記載します。
・前(Vx=0, Vy=1, r=0)
V1 = Vx + rVθ
= 0
V2 = -Vx/2 + Vy√3/2 + rVθ
= √3/2
≒ 0.87
V3 = -Vx/2 – Vy√3/2 + rVθ
= -√3/2
≒ -0.87
・後ろ(Vx=0, Vy=-1, r=0)
V1 = 0
V2 ≒ -0.87
V3 ≒ 0.87
・左方向へ進む(Vx=-1, Vy=0, r=0)
V1 = -1
V2 = 0.5
V3 = 0.5
・右方向へ進む(Vx=1, Vy=0, r=0)
V1 = 1
V2 = -0.5
V3 = -0.5
・左斜め前方向へ進む(Vx=-1, Vy=1, r=0)
V1 = -1
V2 ≒ 0.37
V3 ≒ -1.37
・右斜め前方向へ進む(Vx=1, Vy=1, r=0)
V1 = 1
V2 ≒ -1.37
V3 ≒ -0.37
・左斜め後ろ方向へ進む(Vx=-1, Vy=-1, r=0)
V1 = -1
V2 ≒ -0.37
V3 ≒ 1.37
・右斜め後ろ方向へ進む(Vx=1, Vy=-1, r=0)
V1 = 1
V2 ≒ -1.37
V3 ≒ 0.37
・左回転
V1 = 1
V2 = 1
V3 = 1
・右回転
V1 = -1
V2 = -1
V3 = -1
・・・合ってるんでしょうか?自信なくなりそうです。。。
間違ってたらご連絡ください!(笑)
とりあえず、この関係性からモータを動かすことで全方位動かすことができるというわけです。
ただしモータには個体差があるので、エンコーダを使った全モータの回転数を統一するための制御が必要なのですが、残念ながら私にはプログラムが作れませんでした…(´;ω;`)
…誰か作ってくれないかなー( ゜- ゜)←
ちなみにピン割り込みはポートが足りないので、タイマー割込みの制御が必要なため、結構難しいです。
GitHubには前回紹介したソースコードや今回の資料などがまとめて入っていますのでご参考ください。
ちなみに、
GitHubにアップしたファイルにつきまして、
弊社では一切サポートしておりませんのでご注意ください!!
ロボットセンター秋葉原店に来ていただければ、店長が気まぐれで答えるかもしれません!(?)
それではまた!