このパッケージはros2_control をベースにした、CRANE-X7 のコントローラパッケージです。
crane_x7_control::CraneX7Hardware (crane_x7_hardware)
- 本パッケージがエクスポートするHardware Componentsです
- CRANE-X7実機と通信します
- crane_x7_descriptionから読み込まれます
- launch/crane_x7_control.launch.py
- Controller Managerとコントローラを起動するlaunchファイルです
- config/crane_x7_controllers.yaml
- Controller Managerのパラメータファイルです
crane_x7_hardware
がCRANE-X7実機と通信するために、
PCとCRANE-X7の設定が必要です。
crane_x7_hardware
はUSB通信ポート(/dev/ttyUSB*
)を経由してCRANE-X7と通信します。
次のコマンドでアクセス権限を変更します。
# /dev/ttyUSB0を使用する場合
$ sudo chmod 666 /dev/ttyUSB0
永続的なアクセス権限を付与する場合は次のコマンドを実行します。
$ sudo usermod -aG dialout $USER
$ reboot
CRANE-X7を200 Hz周期で制御するためには、 USB通信ポートとサーボモータの設定を変更します。
下記のコマンドを実行してUSB通信ポートのlatency_timer
を変更します。
参考資料:https://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_wizard2/#usb-latency-setting
# /dev/ttyUSB0を使用する場合
$ sudo chmod a+rw /sys/bus/usb-serial/devices/ttyUSB0/latency_timer
$ sudo echo 1 > /sys/bus/usb-serial/devices/ttyUSB0/latency_timer
CRANE-X7に搭載されているサーボモータDynamixel
にはReturn Delay Time
というパラメータがあります。
デフォルトは250がセットされており、
サーボモータがInstruction Packet
を受信してからStatus Packet
を送信するまでに500 usec
の遅れがあります。
Dynamixel Wizard 2
を使用してRetrun Delay Time
を小さくすると、制御周期が早くなります。
crane_x7_control.launch.py
を実行すると、Controller Manager
ノードが起動し、
以下のコントローラが読み込まれます。
- joint_state_controller (
joint_state_controller/JointStateController
) - crane_x7_arm_controller (
joint_trajectory_controller/JointTrajectoryController
) - crane_x7_gripper_controller (
position_controllers/GripperActionController
)
ノードが起動した後、
次のコマンドでジョイント角度情報(joint_states
)を表示できます
$ ros2 topic echo /joint_states
Controller Manager
のパラメータは
config/crane_x7_controllers.yaml
で設定しています。
controller_manager:
ros__parameters:
update_rate: 200 # Hz
crane_x7_arm_controller:
type: joint_trajectory_controller/JointTrajectoryController
crane_x7_gripper_controller:
type: position_controllers/GripperActionController
joint_state_controller:
type: joint_state_controller/JointStateController
update_rate
は制御周期を設定します。
CRANE-X7の腕の制御用にcrane_x7_arm_controller
を、
グリッパの制御用にcrane_x7_gripper_controller
を設定しています。
crane_x7_hardware
のパラメータは
crane_x7_description/urdf/crane_x7.urdf.xacro
で設定しています。
<xacro:arg name="port_name" default="/dev/ttyUSB0" />
<xacro:arg name="baudrate" default="3000000" />
<xacro:arg name="timeout_seconds" default="1.0" />
<xacro:arg name="manipulator_config_file_path" default="" />
<xacro:arg name="manipulator_links_file_path" default="" />
port_name
はCRANE-X7との通信に使用するUSB通信ポートを設定します。
baudrate
はCRANE-X7に搭載したDynamixelとの通信ボーレートを設定します。
デフォルト値には3000000
(3 Mbps)を設定しています。
timeout_seconds
は通信タイムアウト時間(秒)を設定します。
crane_x7_hardware
は、一定時間(デフォルト1秒間)通信に失敗し続けると、
read/write動作を停止します。
USBケーブルや電源ケーブルが抜けた場合等に有効です。
crane_x7_hardware
は、CRANE-X7と通信するために
RTマニピュレータC++ライブラリ
を使用しています。
manipulatcor_config_file_path
とmanipulator_links_file_path
には、
ライブラリが読み込むサーボ設定ファイルと
リンク情報ファイルへのパスを設定します。