今までロボットシミュレータでROSの使い方を習得してきましたが、そろそろ実際のロボットをROSで動かしてみたいと思います。
実際のロボットを入手しROSで動かすには、「ロボットを作る」必要があります。モーターとRaspberry PiやArduinoなどを使うことで自作することが可能です。
本記事では、比較的安価にロボットを作ることを目標にしつつも、電子回路やオムニホイールの制御を学びつつROSによるロボット制御の学習を進めていきたいと思います。
他にもロボットを入手し学習するには、「ロボットを買ってくる」という選択肢もあります。
ROSのサイトではROSに対応した数多くのロボットが紹介されていますが、なかなか一般には入手しづらいと思います。学習用の定番のロボットしてはKobuki、Turtlebot2などがありますが、Turtlebot2は15万前後と高額で、しかも現在では国内で扱っているところはないと思います。
ただし、先月(2016年10月)Turtlebot3が発表されました。現在開発中との事です。新しいTurtlebotはTurtlebot2よりも小さく、またより低価格(現在伝えられているところではベース車体がで$500、センサー類を入れたバージョンで$1000程度)で提供される見込みだそうです。これからロボット開発を始める方はこちらを購入するのも良いと思います。
それでは今回作成する移動ロボットの構成を説明していきましょう。
オムニホイールとは
今回作成するのは「全方位移動可能ロボット」ですが、これを実現しているのがオムニホイールになります。オムニホイールとは、回転方向へと進む以外にも、円周上に配置された樽型のローラーにより横方向への動きが得られるタイヤです。
これにより車軸の方向を変えることなく、好きな方向へと進行することが可能なため、しばしばロボットの駆動輪として用いられています。
写真は今回使用したオムニホイールです。赤い矢印で示したように軸を中心に回転するほかに、8個のローラーにより青い矢印の方向にも自由に回転します。
オムニホイールロボットによる移動の仕組み
オムニホイールを利用したロボットの動きは次の図のようになります。
緑色がホイールが回転して進もうとしている方向を示しています。青色がロボットが進む方向です。4つすべてのモータを回転すると前後に移動します(図の左から1、2番目)。また、対称位置にあるモーターを回転することで、斜めに移動することが可能です(図の左から3、4番目)。
このようにオムニホイールを使ったロボットでは、ある方向を向いたままの姿勢で、360°自由な方向に移動することが可能です。
モータードライバ「TA7291A」
「TA7291A」はマブチモーター等の直流ブラシ付きモーターを正転・逆転することが可能な定番モータードライバICです。電子回路の入門書等で頻繁に紹介されているので知っている方も多いことでしょう。このICには電源の極性を反転するHブリッジ回路が組み込まれています。もちろん、実際のロボット作成ではモータドライバ基板等を利用するのが常道です。本記事ではモータードライバICで回路を作成しモーター制御の基礎について説明したいと思います。
シャーシ
ホームセンターで気軽に入手し加工が容易なためアクリル板で作成することにしました。3mm厚のアクリル板を切り出し、八角形にします。モータ、バッテリーなどもすべてこのアクリル板の上に載せていきます。
ここで重要な点を1つ。オムニホイールのロボットは、いわばホイールを滑らせている感じで全方向移動を実現しています。このときに、各ホイールにかかる荷重が異なると各ホイールの滑る量が異なってしまい思った方向に移動してくれません。摩擦力は荷重に比例するわけです。
そのため、モーターやバッテリーやRaspberry Piの配置はうまく重心がロボットの中心になるように配置しなければなりません。今回は写真のようなガイド紙を印刷し、モーターの位置が正しく均等な位置にくるように位置合わせを行いました。透明アクリル板の便利な点ですね。
三端子レギュレータ
モーターへの電源供給には単3形電池を使用します。充電して何度も利用可能なエネループを使用したいと思います。しかし充電が間に合わないなど、緊急時にはアルカリ電池でも動作させたいこともあるでしょう。実はエネループの電圧は1.2V、アルカリ乾電池は1.5Vと異なります。直列に接続した場合の電圧には大きな差となって現れます。どちらの電池を使った場合も安定して電源供給できるようにしたいので、電圧を降圧させ希望の電圧を得る為に三端子レギュレータを使用します。動作中はかなり発熱しますので、ヒートシンクは必須となります。
CPU
今回はRaspberry Piを使用します。Raspberry PiにUbuntuをインストールし、その上にROSをインストールします。これによりロボット単体での自律動作も可能になるわけです。ただし、PCで動くパッケージすべてがRaspberry Piで動作するわけではありません。またCPUの速度もPCに比べ劣るためRVizなどの動作は重くなってしまいます。
他にもArduinoとrosserialでロボットを作成するという方法もあります。この場合はROSをインストールしたPCを用意し、ArduinoとPCをシリアル通信で制御します。
モータードライバ基盤の作成
4つのマブチモーターを制御するため、モータドライバICは4必要になります。回路図は次の図ようになります。バッテリーとの接続やGPIOからの制御信号の配線は取り外し可能なようにコネクタを使用しました。基板上の配線の都合によりモータ配線のみ直結になっています。
また、各モータードライバでは電圧降下が生じます。今回使用したマブチモーターの適正電圧は3V、1つのモータードライバにつき1〜1.2V程度の電圧降下がありますので、電源は7〜7.8V程度が必要です。
TA7291Aの端子は次のようになっています。
A | B | C |
---|---|---|
なお、3番と9番はNC端子なので使用しません。
OUT1とOUT2はモーターに接続します。
Vccにはラズパイから電源を供給します。これはICが動作するための電源です。モータに供給する電源はVsに接続します。
IN1とIN2に加える電圧により、モーターの回転を制御します。このピンをRaspberry PiのGPIOに接続し、ON、OFFすることでモーターの停止、正転、逆転、ブレーキを制御します。
A | B | C |
---|---|---|
Vrefにかける電圧を変化させることで、モーターへの電源を調整することができます。
この端子に、Raspberry PiからPWM制御することでモーターの回転速度をコントロールすることができます。
次の画像はブレッドボード上でのテストの様子です。モータードライバIC4個分なので配線が多く、ケーブルでドライバIDが見えないほどです。
電源回路の作成
今回使用した三端子レギュレータはLT3080という製品です。データシートを見ながら最も基本的な回路例の通り実装していきます。INとVcontrolに電源を接続します。電源とGNDの間には1μFのコンデンサをいれます。
SETとGNDの間に入れる抵抗により、OUT電圧を調整します。図の通り通常はボリューム抵抗を入れ汎用的に使用できますが、今回は必要な電圧が決まっており、また基盤が小さいこともありカーボン抵抗を入ることにしました。またOUTとGNDの間には2.2μFのコンデンサをいれます。Rsetの抵抗値だけで可変電圧が得られます。
今回は簡単な電源回路を作成して搭載しましたが、電源電圧が一定の想定であれば電源回路はなくて構いません。
なるため、このノイズ対策が重要になってくるわけです。
ノイズ対策には、モーターにセラミックコンデンサを取り付けます。このコンデンサが発生するスパークを吸収し、ノイズを抑制する効果があります。
これで、ロボットの基本部分とモーター制御の準備は整いました。
次回より、Raspberry PiをセットアップしてROSをインストールしていきます。
ROSで始めるロボティクス(10) ー オムニホイールで全方向移動可能ロボットを作る 1
ROSで始めるロボティクス(11) ー オムニホイールで全方向移動可能ロボットを作る 2
回路のハンダ付け
モータードライバと電源回路をユニバーサル基板上にハンダ付けしていきます。なかなか大変ですが、回路図を見ながら確実にハンダ付けしていきます。モーターノイズ対策
DCモーターは回転時に内部のコイルに流れる電流の方向を切り替えることで回り続ける仕組みです。このDCモータの欠点としては整流子とブラシという機械式接点があることです。これは、転流時のスパークとなります。スパークは「ノイズ」となり誤動作の一因となるため、このノイズ対策が重要になってくるわけです。
ノイズ対策には、モーターにセラミックコンデンサを取り付けます。このコンデンサが発生するスパークを吸収し、ノイズを抑制する効果があります。
これで、ロボットの基本部分とモーター制御の準備は整いました。
次回より、Raspberry PiをセットアップしてROSをインストールしていきます。
ROSで始めるロボティクス(6) ー ROSでデプスカメラPMD CamBoard pico flexxを使う
ROSで始めるロボティクス(7) ー ロボットのための二次元mapを作る
ROSで始めるロボティクス(8) ー ロボットのナビゲーションを行う
ROSで始めるロボティクス(9) ー ROSを使ったステレオカメラキャリブレーションROSで始めるロボティクス(7) ー ロボットのための二次元mapを作る
ROSで始めるロボティクス(8) ー ロボットのナビゲーションを行う
ROSで始めるロボティクス(10) ー オムニホイールで全方向移動可能ロボットを作る 1
ROSで始めるロボティクス(11) ー オムニホイールで全方向移動可能ロボットを作る 2
参考文献:
詳解 OpenCV
詳解 OpenCV
記載されている会社名、および商品名等は、各社の商標または登録商標です。
0 コメント:
コメントを投稿