Skip to content

Automation-Research-Team/dynamixel_workbench_controllers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dynamixel_workbench_controllers

概要

本パッケージは,DynamixelサーボモーターをROSから駆動するためのコントローラであるオリジナルのdynamixel_workbench_controllersを,ROS2に対応するよう修正したものです.

背景

ROS1では,ROBOTIS社からdynamixel_workbenchパッケージが提供されており,この中にdynamixel_workbench_controllersが含まれていました.これは,dynamixel_workbench_msgsに定義されたサービスやメッセージを介して,ROSからDynamixelサーボモーターを制御するためのものです.

ところが,ROS2ではdynamixel_workbench_msgsは引き続き提供されているものの,dynamixel_workbench_controllersは終息してしまいました.そこで,その代替として,本パッケージは同様の機能を持つROS2ノードを提供します.

なお,ros2_controlに準拠したDynamixel制御パッケージとしてdynamixel_hardwareがROS2公式リポジトリから配布されています.ハードウェアの制御をros2_control対応にしておけば既存のros2_control準拠の様々なコントローラを利用できるようになりますので,移動台車や多関節アームを制御する場合はこちらを検討する方が良いかもしれません.

インストール

本パッケージは,Jazzy distributionで動作確認しています.

予め,次の2つの依存パッケージをインストールしておいてください.

$ sudo apt install ros-jazzy-dynamixel-workbench-toolbox ros-jazzy-dynamixel-workbench-msgs

そして,githubからdynamixel_workbench_controllersを入手し,devel-aistブランチを取り出します.

$ cd ros2_ws/src
$ git clone https://github.com/Automation-Research-Team/dynamixel_workbench_controllers
$ cd dynamixel_workbench_controllers
$ git checkout devel-aist

最後に,ワークスペース全体をコンパイルしてください.

$ cd ros2_ws
$ colcon build

dynamixel_workbench_controllersノード

ノードの機能

dynamixel_workbench_controllersノードは,USB=シリアル変換インタフェースU2D2のコントローラであり,それに接続されている1台以上のDynamixelサーボモーターを制御します.主に,次の3つの機能があります.

  • ~/dynamixel_command サービス(dynamixel_workbench_msgs/DynamixelCommand型)を介してクライアントからのリクエストを受信し,制御命令を指定されたモーターに伝えてハードウェアを動かす
  • ~/joint_trajectory トピック(trajectory_msgs/JointTrajectory型)から関節角空間における軌道を受信し,それをモーターに転送してハードウェアを動かす.多関節アームやパン=チルト雲台の制御を想定
  • ~/cmd_vel トピック(geometry_msgs/Twist型)から2次元平面上の直交座標空間における並進・回転速度を受信し,それを左右の車輪の回転速度に変換しモーターに転送してハードウェアを動かす.差動二輪型移動台車の制御を想定

また,サービス,トピック,パラメータ等の名前は,オリジナルのdynamixel_workbench_controllersのそれに一致させています.

なお,ROS1の公式サイトにもdynamixel_workbench_controllersに関する記述がありますが,この情報は古く,上記オリジナルバージョンにも整合していないので,本パッケージとは無関係です.

ROSサービス

コマンドのリクエストは,次の4フィールドから成ります.

  • command (type: string): 通常使われないので,空文字列でOK
  • id (type: uint8): コマンドの送り先となるモーターのID
  • address (type: string): コマンド名.Dynamixel機種一覧にある個々のモーターのControl TableData Nameの欄にある名前を記述
  • value (type: int32): コマンドで与える指令値

ROSトピック

  • ~/joint_trajectorytrajectory_msgs/JointTrajectory型):MoveIt等によって生成された関節角空間における軌道をsubscribe
  • ~/cmd_velgeometry_msgs/Twist型):JoyStick等によって生成された2次元直交座標空間における並進・回転速度をsubscribe
  • ~/dynamixel_statedynamixel_msgs/DynamixelStateList型):U2D2に接続されている全てのモーターの状態をpublish
  • joint_statessensor_msgs/JointState型):U2D2に接続されている全てのモーターの回転角,回転速度およびトルクをpublish

ノードパラメータ

  • usb_port (type: string): U2D2を接続するPCのUSBポート名 (default: /dev/ttyUSB0)
  • dxl_baud_rate (type: int64): U2D2とモーターを接続するシリアルラインの通信速度 (default: 1000000 baud)
  • dxl_read_period (type: float): ~/dynamixel_stateトピックに出力されるモーターの状態を取得する時間間隔 (default: 0.01 sec)
  • dxl_write_period (type: float): ~/joint_trajectoryトピックから入力された関節角軌道をモーターに送信する時間間隔 (default: 0.01 sec)
  • use_joint_states_topic (type: bool): trueならばjoint_statesトピックをpublishする (default: false)
  • use_moveit (type: bool): trueならば~/joint_trajectoryトピックでsubscribeした関節角軌道上の通過点(waypoint)をそのままモータに送る.waypointはdxl_write_periodで指定された間隔で次々に送られるので,waypointが疎な場合,モーターは非常に高速に動くことになる.これに対し,falseならば,subscribeされた軌道のwaypoint間をさらに補間した上でモーターに送る (default: false)
  • mobile_robot_config.separation_between_wheels (type: float): 差動二輪型移動台車の車輪間隔.この値が0以下ならば~/cmd_velトピックはsubscribeされない (default: 0.0 meters)
  • mobile_robot_config.adius_of_wheel (type: float): 差動二輪型移動台車の車輪半径.この値が0以下ならば~/cmd_velトピックはsubscribeされない (default: 0.0 meters)
  • dynamixel_info (type: string): U2D2に接続される全Dynamixelサーボモーターの設定(モーターのID等)を記述するYAMLファイルへのパス.file:///xxx/yyy/zzz.yamlもしくはpackage://package_name/xxx/yyyy/zzz.yamlのいずれかの形式で指定する.前者は絶対パスで指定し,後者はROS2パッケージ下のファイルを参照する.省略不可

ノードの起動

注意

本ノードはrclcppのコンポーネントとして実装されており,コンポーネントコンテナにロードして使用します.このとき,launchファイルにあるように,必ずマルチスレッド対応のコンテナ(component_container_mt)にロードしてください.複数のコールバックグループを使用し,マルチスレッドで実行することを前提にしていますので,シングルスレッドコンテナ(component_container)にロードするとデッドロックに陥ってハングします.

設定ファイルの準備

次の2つの設定ファイルが必要です.

  • ノードパラメータ設定ファイル: 上述のノードパラメータを設定するYAMLファイル.サンプルはここ
  • モータパラメータ設定ファイル: モーターの設定YAMLファイル.ノードパラメータ設定ファイルのdynamixel_infoフィールドから参照される. 記述方法はDynamixelのマニュアルに従う.サンプルはここ

起動方法

次のコマンドを投入して起動します.

$ ros2 launch dynamixel_workbench_controllers launch.py [name:=<node_name>] [config_file:=<config_file>] [container:=<container_name>] [external_container:=true]
  • name: ノードに与える名前 (default: basic_driver)
  • config_file: ノードパラメータ設定ファイルへのパス (default: default.yaml)
  • container: ノードのロード先となるコンポーネントコンテナの名前 (default: dynamixel_workbench_container)
  • external_container: trueならば,containerに指定した名前で別途起動していた既存のコンテナにロード.falseならば,containerに指定した名前で新たにコンテナを起動し,それにロード (default: false)

dynamixel_workbench_controllersの使用例

本ノードが提供するサービス ~/dynamixel_command を利用して,Dynamixelモーターによって駆動される2指グリッパを制御するコントローラ precision_tool_controller がありますので.ご参照ください.

About

ROS2 replacement of dynaxmiel_work_bench_controllers by ROBOTIS(https://wiki.ros.org/dynamixel_workbench_controllers)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 15