Dynamixel Workbenchを触ってみた #01
瀬戸内ROS勉強会のテーマである、ROS搭載のビーズセッターでは、ROBOTISのDynamixel XL430-W250-Tを使用する予定です。
それならROBOTISのDynamixel Workbenchは押さえておかないといけないよね!…ということで、いろいろ触ってみました。
aptで配信されていて、ROS melodicでインストール可能なdynamixel関連のパッケージ一覧
まず、dynamixel関連の公式パッケージって何?って話なのですが…。
aptコマンドを叩いてみますと…。
$ sudo apt install ros-melodic-dynamixel-[TAB][TAB]
ros-melodic-dynamixel-sdk
ros-melodic-dynamixel-sdk-dbgsym
ros-melodic-dynamixel-workbench
ros-melodic-dynamixel-workbench-controllers
ros-melodic-dynamixel-workbench-controllers-dbgsym
ros-melodic-dynamixel-workbench-msgs
ros-melodic-dynamixel-workbench-operators
ros-melodic-dynamixel-workbench-operators-dbgsym
ros-melodic-dynamixel-workbench-single-manager
ros-melodic-dynamixel-workbench-single-manager-dbgsym
ros-melodic-dynamixel-workbench-single-manager-gui
ros-melodic-dynamixel-workbench-single-manager-gui-dbgsym
ros-melodic-dynamixel-workbench-toolbox
ros-melodic-dynamixel-workbench-toolbox-dbgsym
たくさんありますね。
rosrunで実行可能(??)なパッケージ一覧
githubに上がっているもの、aptからインストール可能なもの、全部インストールしてみました。
Github : workbench、SDK、workbench-msgs
その上で、何が実行出来るのかなーと、rosrunコマンドを見てみます。
$ rosrun dynamixel_[TAB][TAB]
dynamixel_sdk
dynamixel_workbench_controllers
dynamixel_workbench_msgs
dynamixel_workbench_operators
dynamixel_workbench_single_manager
dynamixel_workbench_single_manager_gui
dynamixel_workbench_toolbox
インストール可能な”-dbgsym”ってのはなんだったんだろう…。
デバッグ用のナニカって感じはするんだけど…。
それでも、たくさんありますね。
それでは、1つずつパッケージの中身(ノード)を覗いてみます。
dynamixel_sdkで実行可能なノード(!?)
$ rosrun dynamixel_sdk [TAB][TAB]
group_bulk_read.py
port_handler.py
group_bulk_write.py
protocol1_packet_handler.py
group_sync_read.py
protocol2_packet_handler.cpp
group_sync_write.py
protocol2_packet_handler.py
packet_handler.py
robotis_def.py
cppって直接実行出来ないよね(^^;A
というより、どれもrosrun実行出来ませんでした。
どうやら、メインはDynamixelを扱うのに必要なヘッダファイルのパッケージのようで、cppやpyは、タイトルから想像するにサンプルコードじゃないかと。
dynamixel_workbench_controllersで、実行可能なノードおよびlaunchファイル
$ rosrun dynamixel_workbench_controllers [TAB][TAB]
dynamixel_workbench_controllers
find_dynamixel
$ roslaunch dynamixel_workbench_controllers [TAB][TAB]
dynamixel_controllers.launch
find_dynamixelの使い方は、e-Manualのチュートリアルに記載があり、さっそく試してみました。
文字通り、接続されているDynamixelを見つけて教えてくれます。
また、 dynamixel_workbench_controllers およびdynamixel_controller.launchについても、同じくe-Manualのチュートリアルに記載があるようです。(これから試す予定です!次回#02にて)
dynamixel_workbench_msgsで実行可能なノード
$ rosrun dynamixel_workbench_msgs [TAB][TAB]
(実行可能なノードなし)
・・・なし?
こちらに関しては、各シリーズのサーボに対応したmsgファイルとsrvファイルがインストールされたので、そういう目的のものと勝手に理解。
dynamixel_workbench_operatorsで、実行可能なノードおよびlaunchファイル
$ rosrun dynamixel_workbench_operators [TAB][TAB]
joint_operator
wheel_operator
$ roslaunch dynamixel_workbench_operators [TAB][TAB]
joint_operator.launch
wheel_operator.launch
joint_operator、wheel_operator、それぞれ、e-Manualに記載あり。(これから試します! 次回#02にて )
dynamixel_workbench_single_managerで、実行可能なノードおよびlaunchファイル
$ rosrun dynamixel_workbench_single_manager [TAB][TAB]
single_dynamixel_controller
single_dynamixel_monitor
$ roslaunch dynamixel_workbench_single_manager [TAB][TAB]
single_manager.launch
single_monitor.launch
まず、single_manager.launchは、XMLパラメータのボーレート、サーボID、デバイス名を書き換えて実行したら起動しました。こちらを実行すると、 single_dynamixel_controllerノード と single_dynamixel_monitorノード が起動します。
ターミナル上でCUIで、接続された1つのDynamixelをコントロール出来ます。Arduino版のworkbenchのmonitorによく似ていますね。
つまり、single_manager は、Dynamicelを CUIで制御する、単品のアプリケーションのようです。
dynamixel_workbench_single_manager_guiで実行可能なノード
$ rosrun dynamixel_workbench_single_manager_gui [TAB][TAB]
dynamixel_workbench_single_manager_gui
こちらは、単独で起動するとコアダンプを吐いてすぐに終了します。
使い方としては、事前にdynamixel_workbench_single_managerのsingle_monitor.launchを起動しておき、その後に dynamixel_workbench_single_manager_gui を起動するとGUIが起動します。
single_dynamixel_controller ノードのGUI版という感じで、GUIでDynamixelをコントロールすることが出来ます。GUIの雰囲気から、なんとなくDynamixel WizardのROS版って感じがしますね。
ちなみに、rqt_graphの様子は、下記のとおり。
XLというのが今回使用しているDynamixelのシリーズ名なのですが、シリーズごとにtopic名が変わるみたいな雰囲気ですね。
dynamixel_workbench_toolboxで実行可能なノード
$ rosrun dynamixel_workbench_toolbox [TAB][TAB]
(実行可能なノードなし)
dynamixel_workbench_msgsと同じで、単独で起動可能なノードはないです。
中身は、 重用そうなヘッダファイル と、Githubのソースコードのexamplesフォルダの中には、それらを使用するサンプルコードがたくさん入っていて、流用できそうな感じでした。
aptで配信されているROSのパッケージについてはgithubの内容からサンプルコードを抜いて、ヘッダ、msgファイル、srvだけを配信しているような感じです。
てっきりaptで配信されるROSパッケージは実行可能なものだけだと思いこんでたものの、インストール可能なパッケージ=実行可能という訳でもなくて、ライブラリ的なものも配信されている感じですね。
次は、マニュアルに従って、 dynamixel_controller およびOperatorsを試してみて、SDKやtoolboxの実体についても後々、深堀してみたいと思います…。
e-manualを参考にしたのですがdynamixelをpcにu2d2を用いて繋げ、find_dynamixelを実行しても接続されたdynamixelを見つけることが出来ません。心当たりがあったら教えてください。ちなみに使っているdynamixelはax-12aで電源供給は赤いランプが光っているので問題ないと思います。
コメントありがとうございます。
ちなみに、DYNAMIXEL Wizard 2.0では、動作していますでしょうか?
http://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_wizard2/
AX-12Aですと、プロトコル1.0で9600bps~1.0Mbpsにチェックを入れてスキャンすると、find_dynamixelと似たような動きをします。
find_dynamixelに関しては、エラーメッセージは出ていませんか?
うっかりミスとしては、Ubuntu上のでu2d2のデバイス名が、e-manual通り”/dev/ttyUSB0″になっていないケースや、”/dev/ttyUSB0″のパーミッション等は大丈夫でしょうか?
あと、赤いランプですが、光りっぱなしはエラーです。
起動時に0.5秒光ってそのあとは消えているのが正しい動作ですが、いかがでしょうか。
こんにちは初めまして.ROSを勉強中の大学生でDYNAMIXEL ax12を用いてマニピュレータの試作を試みようと考えています.このサイトに埋め込まれたツイートに”PCにDynamixel直結”と記載されていたのですが,どちらのUSBコネクタを使用しているのか教えてもらえますでしょうか?
よろしくお願いします.
コメントありがとうございます。
TTLレベル変換付きのUSBシリアルは何パターンか持っていますが、最近は、ROBOTIS純正の「U2D2」を使っています。
https://www.besttechnology.co.jp/modules/onlineshop/index.php?fct=photo&p=208
ものによっては、460kbpsまでとか、1Mbpsまでとかですが、純正のこちらは説明によると12Mbpsまで対応しているそうなのですごいですね。
パワーラインは、3線ケーブルを二股にしたものを自作して、12VのACアダプタから給電しています。
貴重なアドバイスありがとうございます.
早速購入検討してみます.
今後のサイト更新楽しみにしています.どうもありがとうございました
みっちーさんのブログを拝見してDynamixelのモータを動かすことができました.ありがとうございます.
第4回目のスタースレーブ回のように2つのモータを同時に動作を試みたのですが,2つ目のモータのIDが認識されませんでした.Yamlファイルで異なるID番号を登録して動かしたのでしょうか.
お忙しいところ恐縮ですがよろしくお願いします.
コメントありがとうございます。
そうですね。モーターが増えるとyamlに追記する必要があります。
こちらの内容を使用して作ったパッケージがこちらになります。
5軸の上半身ロボットです。
https://github.com/dreamdrive/upperbody3
複数サーボの場合(5個の場合のyamlは下記のとおりです。)
https://github.com/dreamdrive/upperbody3/blob/master/upperbody3_description/config/upperbody3.yaml
ほとんどコメントアウトしているので、joint名とIDを列挙しただけの簡単な内容です。
こんにちは.みっちーさんのブログを拝見して無事にDynamixelのモータを動作させることができました.
第4回目のように2つ目のモータを動作させようと試みたのですが,2つ目のモータのIDが認識されませんでした.
あらかじめパッケージ内でIDを設定する必要があるのでしょうか?
ちなみにU2D2とDynamixel ax-12aの接続を試みています.
お忙しいところ恐縮ですがよよろしくお願いします
すいません.同じコメントを残してしまいました.返事ありがとうございます.ID番号が1~5と登録されていないのは,何か理由があるのでしょうか?
よろしくお願いします.
1~5でも良いです。IDは何でも構いません。
ただ、個人的には1と2は新品サーボにあらかじめ設定されているデフォルトIDなので、実際のロボットを作る際には避けておいた方が便利だなと思っています。
(2XL系のサーボは、1と2が使われています。)
例えば、サーボが壊れたとき、交換する際に、買ってきたばかりのサーボを繋いで、ID:1をロボットに使っているとID:1が2個被ってしまいます。
使っていなければ、繋いですぐにID変更して使えるため、便利だったりします。
本来は、ID変更の時は、1対1で通信して変更するのが基本です。
ただ、ロボコンの現場など、時間のない中で、試合中にサーボ交換となると、こういった小ワザが効いてきます。
…といった話なので、ROSの学習の目的からはちょっとズレた理由です。
こんにちは.以前助言を頂いてID番号を変更して,複数のDynamixelモータの動作を試みたのですがうまくいきませんでした.
モータは ax-12a, USBコネクタはU2D2を使用し,2つのモータは数珠つなぎで接続していますが,モータがうまく認識されませんでした.このエラーについて何かご協力をお願いできればと思います.
お忙しいところ恐縮ですがよろしくお願いします
返信が漏れてしまっていて、大変申し訳ないです。
2か月経過してしまったので、もう解決済みでしょうか。
とりあえずROSではなく、まずはROBOTISのツール(RoboPlus Manager 2.0等)で、数珠繋ぎが正しく動作するのかどうか気になりました。
https://emanual.robotis.com/docs/en/software/rplus2/manager/