🤖

ロボット開発(第二回): DYNAMIXELモータをM5Stack Core2で動かす

に公開

はじめに

前回はarduino互換ボードとDYNAMIXEL Shieldを使ってDYNAMIXELモータを動かしました。
https://zenn.dev/tsukasajapan/articles/822546ea14eb4a
しかしながらこの構成だとDYNAMIXEL Wizardが使えないという問題が発覚。
今回はPC上でDYNAMIXEL Wizardを動かし、M5Stack Core2を経由してDYNAMIXELモータを動かすことを目標とします。これができればPCから任意のプログラムでモータを制御できるようになるはず!!

ハードウェア

PC

一般的なWindowsが入っているPCにUbuntu22.04を入れて使用。

モータ

  • DYNAMIXEL XL330-M288-T * 2
  • DYNAMIXEL XL330-M077-T * 2

基板、その他

セットアップ

M5Stack core2の開発環境のセットアップについてはネット上に多数記事があるため、そちらを参照ください。

ハードウェア

今回は以下のように配線を行いました。
配線図

動かす

前述した通り、今回はPC -> M5Stack core2 -> IF基板 -> モータという構成です。
PCからのコマンドをIF基板に伝えるためにはM5Stack Core2がPCからのコマンドをIF基板にそのまま受け流す(その逆も)ことが必要となります。

M5Stack core2のプログラム

M5Stack core2はハードウェアシリアルが複数使えます。今回はPCとM5Stack間の通信用、M5StackとIF基板の通信用に2つ用いました。また、groveコネクタを使って後者の通信を行うため、32/33番ピンを使うように設定しています。

#include <M5Unified.h>

// M5StackとIF基板間のシリアル通信用
HardwareSerial& serialToDevice = Serial1;

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);

 // PCとM5Stack間のシリアル通信のボーレートを設定
  Serial.begin(57600);

 // M5StackとIF基板間のシリアル通信のボーレートやピンを設定
  serialToDevice.begin(57600, SERIAL_8N1, 33, 32);
  Serial.println("Serial pass-through started.");
}

void loop() {
  // PCからM5Stackに入ってきたデータをIF基板に受け流す
  while (Serial.available()) {
    serialToDevice.write(Serial.read());
  }

  // IF基板からM5Stackに入ってきたデータをPCに受け流す
  while (serialToDevice.available()) {
    Serial.write(serialToDevice.read());
  }
}

まずはこれをM5Stackに書き込んでおきます。

DYNAMIXEL Wizardを動かす

DYNAMIXEL Wizardのインストール方法、使い方などについては公式ドキュメントを参照ください。
PCでDYNAMIXEL Wizardを起動し、スキャンしてみると、、、
scan結果
見れました!!!これは嬉しい!
各種ステータスが確認でき、GUIでトルクONしたり、実際にモータを回したりできます!
status画面

まとめ&教訓

ついにDYNAMIXEL Wizardを使うことができるようになりました!
これでOpenRB-150と同じことができるようになります(やっと、、、)。
次回はDYNAMIXEL Wizardを使わず、PCからプログラムでモータを制御してみたいと思います。

Discussion