OpenRB-150でDYMAMIXEL XM430を動かす
海洋ロボコンをやってた人です。
今回は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
と互換性あるようなので
とかで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以上の場合は、以下のセットアップ手順を参照してください。
ここでは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 SAMD
とOpenRB
をインストール
Sketch > Include Library > Manage LibrariesよりDYNAMIXEL2Arduino
をインストール
Tools
よりBoardとPortを設定
Board | Port |
---|---|
OpenRB | /dev/ttyACM0 |
chmod(change mode) でユーザー権限を与えておきます。
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します。
少しプログラムを見てみると
56行目でDYNAMIXEL IDを1へ指定しており
80行目で制御モードを位置制御へ指定しています。
87行目のvoid loopでは、位置制御をwhileループで回していることが確認できますね。
なのでこの部分を変更してあげれば、自由に位置制御できますね。
2.2: velocity_mode: 速度制御
速度制御を試してみましょう。
basic > velocity_mode
を選択し、 →
からOpenRB-150へプログラムをUploadします。
位置制御と異なり79行目で制御モードを速度制御と指定していることが確認できます。
またvoid loop()
ではRAW、RPM単位で速度制御の関数が呼び出されていることが確認できます。
2.3: current_mode: 電流制御
電流制御を試してみましょう。
basic > current_mode
を選択し、 →
からOpenRB-150へプログラムをUploadします。
上記同様に、79行目で制御モードを電流制御と指定していることが確認できます。
また、void loop()
ではRAW、mA 単位で電流制御を行っていることが確認できます。
2.4: current_position_mode: 電流位置制御
電流位置制御を試してみましょう。
basic > current_position_mode
を選択し、 →
からOpenRB-150へプログラムをUploadします。
上記同様に、83行目で制御モードを電流位置制御と指定していることが確認できます。
また、void loop()
の90行目、101行目では、目標電流値、目標位置を指定することで電流位置制御の行っていることが確認できます。
2.5: 実機確認
位置、速度、電流制御の動作を確認すると以下のように動くはずです。
電流位置制御では、外力を加えると、元の位置に戻るような動きも確認できると思います。
以上、OpenRB-150でDYANMIXELを動かす備忘録でした、皆さんのお力添えになれば幸いです。
この記事へのLikeをいただけると大変励みになりますので、よろしくお願いいたします。
Reference
dynamixel_gripper_controllerのリポジトリを見つけたので、やってみたい。
Discussion