移動ロボットを作成しようと思い、サーボモータの選定と動作確認を行った。
知人にオススメされて知ったDYNAMIXELのモータが非常に良さそうだったので使ってみた。
PCとモータで動作確認までを行ったので、少しつまづいたところを中心に記事残しておきたい。
DYNAMIXELのモータは便利
- ROS/ROS2に対応
- 配線が少ない
- モータへの配線が電源、GND合わせて3本でOK
- モータ同士を数珠つなぎにすることができる
モータ同士を数珠つなぎにする構成例
Besttechnology - Dynamixelシリーズ紹介
いろいろ他にも利点はあるようだが、今回はこの2点で採用した。
とくに配線が少なくて済むのはとてもありがたい。
準備
環境:Windows 10
使用モータ:DYNAMIXEL MX-12W
U2D2
DYNAMIXEL用PCインタフェース
12V外部電源を供給するためのもの
- 12V AC電源
- 12V AC電源のコネクタ
- ブレッドボード
DYNAMIXELモータは電源をUSBから供給できないため、外部電源を用意する必要がある。
「簡単に動かしたいからUSBで供給してくれ」と思ってしまったが、安全性を考えると外部電源のほうがよろしいかもしれない。
サーボの電源を切って接続しているCPU(PCやRaspberry Pi等)から電源供給されているとプログラムが暴走したときサーボが動いてしまう危険性がある。
あと、CPUから過剰に電源を供給しようとするとCPUが壊れる可能性もあるみたい。
DYNAMIXEL Wizard2.0
動作確認のための公式ソフト。
emanual.robotis.com
DYNAMIXEL SDK
DYNAMIXELのモータを動かすためのSDK。自作プログラムで利用する。
回路
接続順:PC - U2D2(TTL) - DYNAMIXEL MX-12W - 外部電源
PCからUSB-Cのコネクタで電源供給を試してみたが、電圧が足りなかった。やはり普通のAC電源を用意する必要がある。
電源とGNDの接続はMX-12Wの公式ページを参照した。
DYNAMIXEL Wizard2.0で動作確認
- DYNAMIXEL Wizard2.0を起動
- 左上のScanをクリック
- PCに接続されたMX-12Wが検出される
- 右上の「Torque」をクリックして有効化
- 「Torque」の左にあるモータの絵をドラッグするとモータが動作する
自作プログラムで動作
- DYNAMIXEL SDKをGitHubからダウンロード
- \c++\example\protocol1.0\read_write\win64\read_write.slnを起動
- MX-12Wはprotocol2.0には対応していないので、必ずprotocol1.0を利用すること
- read_write.cpp でCOMポートとボーレートを設定する
- DYNAMIXEL Wizard2.0でScanしたときにCOMポートとボーレートの設定が確認できるので、それを記載する
- 自分の環境ではボーレート1000000、COMポート3
- 自分の環境ではボーレート1000000、COMポート3
- DYNAMIXEL Wizard2.0でScanしたときにCOMポートとボーレートの設定が確認できるので、それを記載する
#define DXL_ID 1 // Dynamixel ID: 1 //#define BAUDRATE 57600 #define BAUDRATE 1000000 //#define DEVICENAME "/dev/ttyUSB0" // Check which port is being used on your controller // ex) Windows: "COM1" Linux: "/dev/ttyUSB0" Mac: "/dev/tty.usbserial-*" #define DEVICENAME "COM3"
- プログラム実行し、以下の表示が出ればOK
(read_write.cppは起動してもモータは動作しない)
これで動作確認は終了。
これでこのサンプルを元に任意のプログラムを作成できるようになった。
おわりに
外部電源を入れる、protocol1.0を利用する、適切なボーレートとCOMポートを設定する、あたりでつまづいたが、簡単に解決できてよかった。 次回はRaspberry PiとROSを使ってMX-12Wを動かす予定。