にわかプラス

にわかが玄人になることを夢見るサイトです。社会や国際のトレンド、プログラミングや電子工作のことについて勉強していきたいです。

DYNAMIXELサーボモータ MX-12Wの導入と動作確認

sponsor

移動ロボットを作成しようと思い、サーボモータの選定動作確認を行った。
知人にオススメされて知ったDYNAMIXELのモータが非常に良さそうだったので使ってみた。 PCとモータで動作確認までを行ったので、少しつまづいたところを中心に記事残しておきたい。

DYNAMIXELのモータは便利

  • ROS/ROS2に対応
  • 配線が少ない
    • モータへの配線が電源、GND合わせて3本でOK
    • モータ同士を数珠つなぎにすることができる

モータ同士を数珠つなぎにする構成例
f:id:hiddenvally333:20200823153904p:plain Besttechnology - Dynamixelシリーズ紹介

いろいろ他にも利点はあるようだが、今回はこの2点で採用した。
とくに配線が少なくて済むのはとてもありがたい。

準備

環境:Windows 10
使用モータ:DYNAMIXEL MX-12W

emanual.robotis.com

U2D2

DYNAMIXEL用PCインタフェース

robotisproshop.cart.fc2.com

f:id:hiddenvally333:20200823154208j:plain

12V外部電源を供給するためのもの

  • 12V AC電源
  • 12V AC電源のコネクタ
  • ブレッドボード

DYNAMIXELモータは電源をUSBから供給できないため、外部電源を用意する必要がある。 「簡単に動かしたいからUSBで供給してくれ」と思ってしまったが、安全性を考えると外部電源のほうがよろしいかもしれない。
サーボの電源を切って接続しているCPU(PCやRaspberry Pi等)から電源供給されているとプログラムが暴走したときサーボが動いてしまう危険性がある。
あと、CPUから過剰に電源を供給しようとするとCPUが壊れる可能性もあるみたい。

DYNAMIXEL Wizard2.0

動作確認のための公式ソフト。
emanual.robotis.com

DYNAMIXEL SDK

DYNAMIXELのモータを動かすためのSDK。自作プログラムで利用する。

github.com

回路

接続順:PC - U2D2(TTL) - DYNAMIXEL MX-12W - 外部電源
PCからUSB-Cのコネクタで電源供給を試してみたが、電圧が足りなかった。やはり普通のAC電源を用意する必要がある。

f:id:hiddenvally333:20200823153912j:plain

電源とGNDの接続はMX-12Wの公式ページを参照した。 f:id:hiddenvally333:20200823155654p:plain

DYNAMIXEL Wizard2.0で動作確認

  • DYNAMIXEL Wizard2.0を起動
  • 左上のScanをクリック
    • PCに接続されたMX-12Wが検出される
  • 右上の「Torque」をクリックして有効化
  • Torque」の左にあるモータの絵をドラッグするとモータが動作する

f:id:hiddenvally333:20200823153907p:plain

自作プログラムで動作

  • DYNAMIXEL SDKをGitHubからダウンロード
  • \c++\example\protocol1.0\read_write\win64\read_write.slnを起動
    • MX-12Wはprotocol2.0には対応していないので、必ずprotocol1.0を利用すること
  • read_write.cppCOMポートボーレートを設定する
    • DYNAMIXEL Wizard2.0でScanしたときにCOMポートとボーレートの設定が確認できるので、それを記載する
      • 自分の環境ではボーレート1000000、COMポート3 f:id:hiddenvally333:20200823155131p:plain
#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は起動してもモータは動作しない)
    f:id:hiddenvally333:20200823155937p:plain

これで動作確認は終了
これでこのサンプルを元に任意のプログラムを作成できるようになった。

おわりに

外部電源を入れる、protocol1.0を利用する、適切なボーレートとCOMポートを設定する、あたりでつまづいたが、簡単に解決できてよかった。 次回はRaspberry PiとROSを使ってMX-12Wを動かす予定。