🔧

OpenRB-150でDYMAMIXEL XM430を動かす

2023/11/02に公開

海洋ロボコンをやってた人です。

今回はOpenRB-150を使用してDYNAMIXELを動かしてみたので、その備忘録として使い方を記載していきます。

この記事のゴールは、OpenRB-150でDYNAMIXEL動かすことです。

動作環境と使用リストは以下になります。

動作環境

  • OS: Ubuntu 22.04
  • Arduino IDE 2.2.1

使用リスト

Item Detail:EN 詳細:JP
OpenRB-150 embedded controller 組込コントローラー
XM430-W210-T Smart Actuator アクチュエータ
12V 5A SMPS Power Supply 電源供給

上記 Switched-Mode Power Supply : SMPSはXM430-W210-Tの動作電圧が12Vなので使用しており、Terminal VINへ接続できるようにします。

また、ROBOTIS OpenSource TeamよりOpenRB-150—Arduino Compatible DYNAMIXEL controllerという丁寧なチュートリアル動画があるので、まずはこちらを見て進めるのも良いと思います。


本記事に対するコメントも積極的に募集しますので、よろしくお願いいたします。

1: OpenRB-150の仕様と準備

はじめに、OpenRB-150の仕様を確認し、必要な動作環境を準備していきます。

1.1: Pinout

3.1 Pinout を参考に、どのようなPinoutがあるかを確認しましょう。

Pinoutを確認すると、UART、SPI、I2C、PWM、ANALOG IN/OUTなど汎用ピンはもちろん、 X Series, MX Series, AX Series, P Seriesをサポート可能でTTL Portが4ピンついていることが最大の魅力となっていますね。


さらに、カスタムモデルのArduino MKR Shieldsと互換性あるようなので

Arduino MKR CAN Shields

Arduino MKR ETH Shields

とかでCAN、ETH通信とかもできそうです。

1.2: 電源供給方法

電源供給は5.4. Connection Examplesに記載があるように

  • 5V TTL DYNAMIXEL
  • 12V TTL DYNAMIXEL (DC 12VをTerminal VINへ)
  • 12V RS-485 DYNAMIXEL (DC 12VをTerminal VIN かつ RS485⇔TTL変換必)

の3つあります。

また、

する必要があります。

USB C Type CableやVIN(5V)を使用する場合は5.2. VINのように+5V側へジャンパピンを接続します。

Terminal VINより3.7〜12.6Vを入力する場合は5.3. Terminal VINのようにVIN(OXL)側へジャンパピンを接続します。

DYNAMIXEL RS485系統をOpenRB-150で使用する場合は5.4.3. When running 12V RS-485 DYNAMIXELを参考に、DYANMIXEL Communication Bridgeにて接続してください。

1.3: 環境準備

環境構築として、Arduino IDEの準備を6.2. Install the Arduino IDEより行います。

レガシー版Arduino IDEと最新のArduino IDE 2.xでは上記マニュアルと差分が発生しているため、使用するIDEのバージョンが2.x以上の場合は、以下のセットアップ手順を参照してください。

https://forum.robotis.com/t/openrb-150-dynamixel-shield-mkr-arduino-ide-2-0/4725

ここではArduino IDE 2.2.1のときに環境構築した手順を記載します。


File > PreferencesよりAdditional Boards Manager URLsを追加

https://raw.githubusercontent.com/ROBOTIS-GIT/OpenRB-150/master/package_openrb_index.json

Tools > Board > Boards ManagerよりArduino SAMDOpenRBをインストール

Sketch > Include Library > Manage LibrariesよりDYNAMIXEL2Arduinoをインストール

ToolsよりBoardとPortを設定

Board Port
OpenRB /dev/ttyACM0

chmod(change mode) でユーザー権限を与えておきます。

terminal
sudo usermod -aG dialout ubuntu
# sudo usermod -a -G dialout $USER  
sudo chmod a+rw /dev/ttyACM0

ここまで準備ができたらOKです。


Ubuntu 22.04 でArduino IDE 2.x.xを使用したい場合はInstall Arduino IDE 2.x.x on Linux (Ubuntu)などを参照してインストールを行いました。

2: OpenRB-150でDYANMIXEL XM430系を動かす

OpenRB-150でDYNAMIXELを動かしてみましょう。

OpenRB-150はDYNAMIXEL2Arduinoで用意されているサンプルコードで動かしていくので、Arduino IDE を開いたら、File > Examples > DYNAMIXEL2Arduino > basic > xxx_modeを開きます。

※ xxx_modeはposition_mode, velocity_mode, current_mode, current_position_modeへ置き換えてください。

また、書き込みエラーになる場合は、OpenRB-150のH/W RESETボタンを押す、USBを抜き差しする、sudo chmod a+rw /dev/ttyACM0で権限付与するなどして、再度書き込みをしてください。

2.1: position_mode: 位置制御

まずは位置制御を試してみましょう。

basic > position_modeを選択し、 → からOpenRB-150へプログラムをUploadします。

少しプログラムを見てみると

https://github.com/ROBOTIS-GIT/Dynamixel2Arduino/blob/84b29f1ba25d1dfae758a6bdc425443f2f3afc2c/examples/basic/position_mode/position_mode.ino#L56

56行目でDYNAMIXEL IDを1へ指定しており

https://github.com/ROBOTIS-GIT/Dynamixel2Arduino/blob/84b29f1ba25d1dfae758a6bdc425443f2f3afc2c/examples/basic/position_mode/position_mode.ino#L87

80行目で制御モードを位置制御へ指定しています。

https://github.com/ROBOTIS-GIT/Dynamixel2Arduino/blob/84b29f1ba25d1dfae758a6bdc425443f2f3afc2c/examples/basic/position_mode/position_mode.ino#L80

87行目のvoid loopでは、位置制御をwhileループで回していることが確認できますね。

なのでこの部分を変更してあげれば、自由に位置制御できますね。

2.2: velocity_mode: 速度制御

速度制御を試してみましょう。

basic > velocity_modeを選択し、 → からOpenRB-150へプログラムをUploadします。

位置制御と異なり79行目で制御モードを速度制御と指定していることが確認できます。

https://github.com/ROBOTIS-GIT/Dynamixel2Arduino/blob/84b29f1ba25d1dfae758a6bdc425443f2f3afc2c/examples/basic/velocity_mode/velocity_mode.ino#L79

またvoid loop()ではRAW、RPM単位で速度制御の関数が呼び出されていることが確認できます。

https://github.com/ROBOTIS-GIT/Dynamixel2Arduino/blob/84b29f1ba25d1dfae758a6bdc425443f2f3afc2c/examples/basic/velocity_mode/velocity_mode.ino#L96

2.3: current_mode: 電流制御

電流制御を試してみましょう。

basic > current_modeを選択し、 → からOpenRB-150へプログラムをUploadします。

上記同様に、79行目で制御モードを電流制御と指定していることが確認できます。

https://github.com/ROBOTIS-GIT/Dynamixel2Arduino/blob/84b29f1ba25d1dfae758a6bdc425443f2f3afc2c/examples/basic/current_mode/current_mode.ino#L79

また、void loop()ではRAW、mA 単位で電流制御を行っていることが確認できます。

https://github.com/ROBOTIS-GIT/Dynamixel2Arduino/blob/84b29f1ba25d1dfae758a6bdc425443f2f3afc2c/examples/basic/current_mode/current_mode.ino#L96

2.4: current_position_mode: 電流位置制御

電流位置制御を試してみましょう。

basic > current_position_modeを選択し、 → からOpenRB-150へプログラムをUploadします。

上記同様に、83行目で制御モードを電流位置制御と指定していることが確認できます。

https://github.com/ROBOTIS-GIT/Dynamixel2Arduino/blob/84b29f1ba25d1dfae758a6bdc425443f2f3afc2c/examples/basic/current_position_mode/current_position_mode.ino#L83

また、void loop()の90行目、101行目では、目標電流値、目標位置を指定することで電流位置制御の行っていることが確認できます。

https://github.com/ROBOTIS-GIT/Dynamixel2Arduino/blob/84b29f1ba25d1dfae758a6bdc425443f2f3afc2c/examples/basic/current_position_mode/current_position_mode.ino#L91

2.5: 実機確認

位置、速度、電流制御の動作を確認すると以下のように動くはずです。

https://twitter.com/tasada038/status/1718677612858577054

電流位置制御では、外力を加えると、元の位置に戻るような動きも確認できると思います。

https://twitter.com/tasada038/status/1718682531288252716


以上、OpenRB-150でDYANMIXELを動かす備忘録でした、皆さんのお力添えになれば幸いです。

この記事へのLikeをいただけると大変励みになりますので、よろしくお願いいたします。

Reference

dynamixel_gripper_controllerのリポジトリを見つけたので、やってみたい。

https://github.com/b-it-bots/youbot_dynamixel_gripper_controller

Discussion