Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価

559 views

Published on

ビーズセッターロボットのために
DYNAMIXEL Workbench (ROS版)を使ってみて、ハマったところやその感想など。
2019/08/25 瀬戸内ROS勉強会(第03回)LT資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

ビーズセッターロボットのためのDYNAMIXEL Workbenchの評価

  1. 1. DYNAMIXEL Workbenchの評価 Onomichi Hirokazu 2019.08.25 瀬戸内ROS勉強会LT ビーズセッターロボットのための
  2. 2. Onomichi Hirokazu みっちー = Micchy @Dream_Drive • 本業は医療機器の会社 医療ソフトウェア=画像診断関連etc… • メイカー系イベントやロボコンをうろうろ • 社会人ロボコニスト • ROSCon JP2018からボチボチROSを使い始める • Dynamixelユーザー 14年 (2005年~) 自己紹介
  3. 3. 本会の課題の確認 瀬戸内ROS勉強会共通課題: スカラロボットでビーズセッターを再現する 今回はそのスカラロボットで使う アクチュエーターのことについて 考えました。
  4. 4. ROS対応の ロボット用アクチュエータといえば… rosserial + Arduino + PWMサーボ? いやいやいや!?
  5. 5. ROS対応の ロボット用アクチュエータといえば… DYNAMIXL ・高速なシリアル通信で直接指示 ・デイジーチェーン可能 ・PIDゲイン等プログラム可能 ・燃えない(比較的) ・結合するための多数のねじ穴があって便利 ・メーカーとしてROSへの対応が熱心!
  6. 6. 通信によるDynamixelの分類 • Dynamixel 3線式と4線式がある • TTLかRS485かの違いで、どちらも半二重 RS485の方がノイズに強く、長距離の信号伝送に向いているよ。 (説明図はツイストペアっぽいけど、DYNAMIXELのケーブルはツイストされてないよw) ・XM540-W150-T ← TTL方式 ・XM540-W150-R ← RS-485方式 型番の最後の文字で判断できる。
  7. 7. BTE061D USBシリアル変換ケーブル 1つで、RS232C、半二重TTL、 RS485に対応、3Mbpsまで出 せるスグレモノ USB TTL 12V GND リサイクルACアダプタ DYNAMIXELを動かす回路 (簡略)
  8. 8. FTDIドライバのLatancyTimerについて $ sudo echo 1 > /sys/bus/usb-serial/devices/ttyUSB0/latency_timer windowsでもお馴染み(!?)ですが、FTDIのチップを使ったUSB-232Cの変換器は、 レイテンシタイマが16msecにデフォルトでセットされています。 このままでは制御周期が60Hzに張り付いてしまいます。 1msecに変更します。 1msec以下には縮まりません。半二重で1往復すると必ず2回の待ち(1msec×2)が入るので、 意外と速いようで、PCの場合はこれもボトルネックになったりします。 $ sudo adduser "user名" dialout ユーザーをdialoutグループに登録するのも忘れずに… /dev/ttyUSB0のパーミッションを変えるのはあまり奨められないようです。 といいつつ・・・ $ sudo chmod 777 /dev/ttyUSB0 とか、たまにやっちゃいます(^^;A
  9. 9. Dynamixelを動かす通信 • コマンドパケットとシーケンス図 これだけ分かればベタで自分でプログラムすることも可能
  10. 10. DYNAMIXEL Workbench • DYNAMIXEL Workbench とは、Dynamixelを動かすための ライブラリ群 • ROS版・Linux/Mac版・OpenCM/CR版(Arduino互換ボード)の 3種類がある。ROS版はLinux版を内包している。 DYNAMIXEL Workbench Dynamixel SDK Dynamixel Driver
  11. 11. “apt install”できる “dynamixel”の名の付くROSパッケージ • 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 多いわっ! ※ ROS melodicの場合
  12. 12. 今日は・・・ 「ros-melodic-dynamixel-workbench-controllers」 にフォーカスを当てて説明します。 ちなみにcontrollerもjointとwheelの使い方があって 今回は、jointをメインにお話います。 本家のチュートリアルも こんな感じ
  13. 13. dynamixel_controller.launch <launch> <arg name="usb_port" default="/dev/ttyUSB0"/> <arg name="dxl_baud_rate" default=“1000000"/> <arg name="namespace" default="dynamixel_workbench"/> <arg name="use_moveit" default="false"/> <arg name="use_joint_state" default="true"/> <arg name="use_cmd_vel" default="false"/> <param name="dynamixel_info" value="$(find dynamixel_workbench_controllers)/config/basic.yaml"/> <node name="$(arg namespace)" pkg="dynamixel_workbench_controllers" type="dynamixel_workbench_controllers" required="true" output="screen" args="$(arg usb_port) $(arg dxl_baud_rate)"> <param name="use_moveit" value="$(arg use_moveit)"/> <param name="use_joint_states_topic" value="$(arg use_joint_state)"/> <param name="use_cmd_vel_topic" value="$(arg use_cmd_vel)"/> <rosparam> publish_period: 0.010 dxl_read_period: 0.010 dxl_write_period: 0.010 mobile_robot_config: <!--this values will be set when 'use_cmd_vel' is true--> seperation_between_wheels: 0.160 <!--default value is set by reference of TB3--> radius_of_wheel: 0.033 <!--default value is set by reference of TB3--> </rosparam> </node> </launch> Joint_stateが100Hzでpublishされる YAML記法のコンフィグファイル joint/wheelの定義 どのtopicを使う? シリアルポートの設定 wheel使用時のパラメータ
  14. 14. DYNAMIXEL Workbench Controller (Joint) DYNAMIXEL Workbench Controller DYNAMIXEL Workbench Dynamixel SDK Dynamixel Driver dynamixel_workbench_msgs ROS ノード /dynamixel_state /joint_states /joint_trajectory /dynamixel_command YAML (joint 定義ファイル) /dynamixel_state Dynamixelの状態 (角度/角速度等はメモリ値) /joint_states Jointの状態 (角度/角速度等はradian) /joint_trajectory Jonitに対する命令 (角度/角速度等はradian、+時間軸の概念を持つ) /dynamixel_command Dynamixelに対する直接命令 (サービス) DYNAMIXEL WorkbenchをラップしたROSノード
  15. 15. /dynamixel_command DYNAMIXEL Workbench Controller DYNAMIXEL Workbench Dynamixel SDK Dynamixel Driver dynamixel_workbench_msgs とりまrqt_ServiceCaller /dynamixel_command (srv) YAML (joint 定義ファイル) DYNAMIXELに送る値を直接指定できる (1個ずつ!) EX) ID:8のサーボを 2048の角度に!…etc 直接メモリ内容を書き換える命令(サービス)
  16. 16. /joint_states DYNAMIXEL Workbench Controller DYNAMIXEL Workbench Dynamixel SDK Dynamixel Driver dynamixel_workbench_msgs 自作ROS ノード dynamixel_reader /joint_states YAML (joint 定義ファイル) ジョイントの状態を取得する
  17. 17. /joint_trajectory DYNAMIXEL Workbench Controller DYNAMIXEL Workbench Dynamixel SDK Dynamixel Driver dynamixel_workbench_msgs 自作ROS ノード dynamixel_writer /joint_trajectory YAML (joint 定義ファイル) ジョイントの状態をモーターに反映する
  18. 18. Joint Operatorsの紹介 DYNAMIXEL Workbench Controller DYNAMIXEL Workbench Dynamixel SDK Dynamixel Driver dynamixel_workbench_msgs ROS ノード Joint Operators /dynamixel_state /joint_states /joint_trajectory /dynamixel_command YAML (joint 定義ファイル) joint_trajectoryの内容をyaml形式のテキストファイル化から ロードして実行する公式ノード YAML (joint_trajectory ファイル)
  19. 19. joint_trajectoryとは • JointTrajectoryPoint • 1関節分の位置指令(角度)、速度指令(角速度)、加速度指令(角加速度)、力指 令(トルク)とスタートからの実行時間がセットになったもの • JointTrajectory • JointTrajectoryPointを複数関節分まとめたもの、かつその関節の名前の定義 ・ジョイント名[] ・JointTrajectryPoint [] ・位置[] ・速度[] ・加速度[] ・力指令[] ・スタートからの時間[]
  20. 20. Dynamixel2dynamixelの製作 DYNAMIXEL Workbench Controller DYNAMIXEL Workbench Dynamixel SDK Dynamixel Driver dynamixel_workbench_msgs 自作ROS ノード dynamixel2dynamixel /joint_states /joint_trajectory YAML (joint 定義ファイル) マスター・スレーブ動作の確認
  21. 21. Dynamixel2dynamixelを拡張してみよう ROBOTISさんから発売予定の 2XL-430-W250-T の、βテストの話をいただいて”上半身ロボット”製作しました。 2XL-430-W250-Tは、名前の通り XL-430-W250-TがニコイチになったDynamixelです。 プログラムもそのまま使えて、軽くて、小さくて、 便利な直交サーボです。 上半身ロボット3号機
  22. 22. Dynamixel2dynamixel 拡張時に経験した謎の制約 • Joint_trajectryの実行時間(time_from_start)を0.02secに設定 (何故か、それ以下だと動かない) • [0] の1ポーズのみを40Hzでpublishし続ける (何故か、それ以上の周期だと動かない) ナンジャコリャ・・・。
  23. 23. > それは仕様です。 • /joint_trajectoryの実装上の仕様 • 実行中は新しいpublishは受け付けません Dynamixelへの読み書きの周期/publishの周期を変更しても改善せず・・・ 100Hzでsubcribeして、40Hzでpublishしているが、実際の制御周期は40Hz以下・・・ 何故なのか実験してみました。 このタイミングでは受け付けず・・・ このタイミングでは受け付けず・・・ 受付 受付 • /Joint_stateの実装上の仕様 • 確かにlaunchファイルの設定の通り 100Hzでpublishされているが・・・ 内容が更新されていないorz
  24. 24. DYNAMIXEL Workbench Controllerのこまった DYNAMIXEL Workbench Controller DYNAMIXEL Workbench Dynamixel SDK Dynamixel Driver dynamixel_workbench_msgs ROS ノード /dynamixel_state /joint_states /joint_trajectory /dynamixel_command YAML (joint 定義ファイル) 時間の概念が逆に邪魔になる。 入力にもjoint_statesが欲しい!(切望) 解決方法をご存知の方いらっしゃったら 教えてください! 値の更新周期が publishより遅い
  25. 25. 評価 (まとめ) • DYNAMIXEL Workbench Controllerは、ティーチング・プレイバッ クなどのモーション再生動作には向いている。Move ITにも対応! • DYNAMIXEL Workbench Controllerは、たぶんリアルタイムの制御 には向いていない。 • リアルタイムで制御したい場合は、自作のROSノード、もしくはマ イコンでDynamixelを制御したほうがいいかも。 • DYNAMIXEL Workbench Controllerを二足歩行ロボットに使いたい と思わないが、勉強会の課題のロボットアームには最適と思う。
  26. 26. (おまけ) Wheel opratorの紹介 タイヤの回転角と移動距離のパラメータに埋め込めます。 結果として、 /cmd_vel のメッセージで移動速度をm/sで指定できるのです。 オリジナルの足回りもm/sで速度制御できます。 これは便利! チュートリアルに出てくる、WheelOpratorですが、 こちらはスカラロボットには関係しませんが、 これも面白いノードです。

×