DYNAMIXEL
Workbenchの評価
Onomichi Hirokazu
2019.08.25 瀬戸内ROS勉強会LT
ビーズセッターロボットのための
Onomichi Hirokazu
みっちー = Micchy
@Dream_Drive
• 本業は医療機器の会社
医療ソフトウェア=画像診断関連etc…
• メイカー系イベントやロボコンをうろうろ
• 社会人ロボコニスト
• ROSCon JP2018からボチボチROSを使い始める
• Dynamixelユーザー 14年 (2005年~)
自己紹介
本会の課題の確認
瀬戸内ROS勉強会共通課題:
スカラロボットでビーズセッターを再現する
今回はそのスカラロボットで使う
アクチュエーターのことについて
考えました。
ROS対応の
ロボット用アクチュエータといえば…
rosserial + Arduino + PWMサーボ?
いやいやいや!?
ROS対応の
ロボット用アクチュエータといえば…
DYNAMIXL
・高速なシリアル通信で直接指示
・デイジーチェーン可能
・PIDゲイン等プログラム可能
・燃えない(比較的)
・結合するための多数のねじ穴があって便利
・メーカーとしてROSへの対応が熱心!
通信によるDynamixelの分類
• Dynamixel 3線式と4線式がある
• TTLかRS485かの違いで、どちらも半二重
RS485の方がノイズに強く、長距離の信号伝送に向いているよ。
(説明図はツイストペアっぽいけど、DYNAMIXELのケーブルはツイストされてないよw)
・XM540-W150-T ← TTL方式
・XM540-W150-R ← RS-485方式
型番の最後の文字で判断できる。
BTE061D USBシリアル変換ケーブル
1つで、RS232C、半二重TTL、
RS485に対応、3Mbpsまで出
せるスグレモノ
USB
TTL
12V
GND
リサイクルACアダプタ
DYNAMIXELを動かす回路 (簡略)
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
Dynamixelを動かす通信
• コマンドパケットとシーケンス図
これだけ分かればベタで自分でプログラムすることも可能
DYNAMIXEL Workbench
• DYNAMIXEL Workbench とは、Dynamixelを動かすための
ライブラリ群
• ROS版・Linux/Mac版・OpenCM/CR版(Arduino互換ボード)の
3種類がある。ROS版はLinux版を内包している。
DYNAMIXEL Workbench
Dynamixel SDK
Dynamixel Driver
“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の場合
今日は・・・
「ros-melodic-dynamixel-workbench-controllers」
にフォーカスを当てて説明します。
ちなみにcontrollerもjointとwheelの使い方があって
今回は、jointをメインにお話います。
本家のチュートリアルも
こんな感じ
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使用時のパラメータ
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ノード
/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
直接メモリ内容を書き換える命令(サービス)
/joint_states
DYNAMIXEL Workbench Controller
DYNAMIXEL Workbench
Dynamixel SDK
Dynamixel Driver
dynamixel_workbench_msgs
自作ROS ノード
dynamixel_reader
/joint_states
YAML
(joint 定義ファイル)
ジョイントの状態を取得する
/joint_trajectory
DYNAMIXEL Workbench Controller
DYNAMIXEL Workbench
Dynamixel SDK
Dynamixel Driver
dynamixel_workbench_msgs
自作ROS ノード
dynamixel_writer
/joint_trajectory
YAML
(joint 定義ファイル)
ジョイントの状態をモーターに反映する
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 ファイル)
joint_trajectoryとは
• JointTrajectoryPoint
• 1関節分の位置指令(角度)、速度指令(角速度)、加速度指令(角加速度)、力指
令(トルク)とスタートからの実行時間がセットになったもの
• JointTrajectory
• JointTrajectoryPointを複数関節分まとめたもの、かつその関節の名前の定義
・ジョイント名[]
・JointTrajectryPoint []
・位置[]
・速度[]
・加速度[]
・力指令[]
・スタートからの時間[]
Dynamixel2dynamixelの製作
DYNAMIXEL Workbench Controller
DYNAMIXEL Workbench
Dynamixel SDK
Dynamixel Driver
dynamixel_workbench_msgs
自作ROS ノード
dynamixel2dynamixel
/joint_states /joint_trajectory
YAML
(joint 定義ファイル)
マスター・スレーブ動作の確認
Dynamixel2dynamixelを拡張してみよう
ROBOTISさんから発売予定の
2XL-430-W250-T
の、βテストの話をいただいて”上半身ロボット”製作しました。
2XL-430-W250-Tは、名前の通り
XL-430-W250-TがニコイチになったDynamixelです。
プログラムもそのまま使えて、軽くて、小さくて、
便利な直交サーボです。
上半身ロボット3号機
Dynamixel2dynamixel
拡張時に経験した謎の制約
• Joint_trajectryの実行時間(time_from_start)を0.02secに設定
(何故か、それ以下だと動かない)
• [0] の1ポーズのみを40Hzでpublishし続ける
(何故か、それ以上の周期だと動かない)
ナンジャコリャ・・・。
> それは仕様です。
• /joint_trajectoryの実装上の仕様
• 実行中は新しいpublishは受け付けません
Dynamixelへの読み書きの周期/publishの周期を変更しても改善せず・・・
100Hzでsubcribeして、40Hzでpublishしているが、実際の制御周期は40Hz以下・・・
何故なのか実験してみました。
このタイミングでは受け付けず・・・
このタイミングでは受け付けず・・・
受付
受付
• /Joint_stateの実装上の仕様
• 確かにlaunchファイルの設定の通り
100Hzでpublishされているが・・・
内容が更新されていないorz
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より遅い
評価 (まとめ)
• DYNAMIXEL Workbench Controllerは、ティーチング・プレイバッ
クなどのモーション再生動作には向いている。Move ITにも対応!
• DYNAMIXEL Workbench Controllerは、たぶんリアルタイムの制御
には向いていない。
• リアルタイムで制御したい場合は、自作のROSノード、もしくはマ
イコンでDynamixelを制御したほうがいいかも。
• DYNAMIXEL Workbench Controllerを二足歩行ロボットに使いたい
と思わないが、勉強会の課題のロボットアームには最適と思う。
(おまけ)
Wheel opratorの紹介
タイヤの回転角と移動距離のパラメータに埋め込めます。
結果として、
/cmd_vel
のメッセージで移動速度をm/sで指定できるのです。
オリジナルの足回りもm/sで速度制御できます。
これは便利!
チュートリアルに出てくる、WheelOpratorですが、
こちらはスカラロボットには関係しませんが、
これも面白いノードです。

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