最近、友人とお台場を歩いていたら、バ●キングって番組で街頭インタビューを受けて映ってしまった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にアップしたファイルにつきまして、

弊社では一切サポートしておりませんのでご注意ください!!

ロボットセンター秋葉原店に来ていただければ、店長が気まぐれで答えるかもしれません!(?)

それではまた!