Add iiwa_controller_v2: Implement hardware interface for KUKA iiwa7 via FRI

- Introduced iiwa_hardware_interface_plugin.xml to define the hardware interface.
- Created command_guard.hpp to enforce joint limits for position and torque commands.
- Developed fri_client.hpp and fri_client.cpp to manage FRI communication and state snapshots.
- Implemented system_interface.hpp and system_interface.cpp for lifecycle management and command handling.
- Added system_interface_type_values.hpp for extended state interface names.
- Defined package.xml for ROS2 integration with necessary dependencies.
This commit is contained in:
Даниил Грабарь
2026-05-15 13:10:00 +10:00
parent d6b4641d9b
commit 99215c0b20
16 changed files with 1198 additions and 20 deletions
@@ -8,6 +8,11 @@
<xacro:arg name="fri_port" default="30200"/>
<xacro:arg name="command_mode" default="position"/>
<xacro:arg name="joint_position_tau" default="0.04"/>
<!-- iiwa_controller_v2: новые параметры. Убери эти строки при откате на v1 -->
<xacro:arg name="open_loop" default="true"/>
<xacro:arg name="rt_prio" default="80"/>
<xacro:arg name="external_torque_safety_check" default="true"/>
<xacro:arg name="external_torque_limit" default="2.0"/>
<xacro:property name="initial_positions"
value="${xacro.load_yaml('$(arg initial_positions_file)')['initial_positions']}"/>
@@ -142,12 +147,33 @@
<ros2_control name="iiwaFRIControl" type="system">
<hardware>
<!-- ════════════════════════════════════════════════════════
АКТИВНЫЙ ПЛАГИН: iiwa_controller_v2
Чтобы вернуть v1 — раскомментируй блок v1 ниже
и закомментируй блок v2.
════════════════════════════════════════════════════════ -->
<!-- ── v2 (активен) ──────────────────────────────────────── -->
<plugin>iiwa_controller_v2/SystemInterface</plugin>
<param name="robot_ip">$(arg robot_ip)</param>
<param name="fri_port">$(arg fri_port)</param>
<param name="simulate">false</param>
<param name="command_mode">$(arg command_mode)</param>
<param name="joint_position_tau">$(arg joint_position_tau)</param>
<!-- новые параметры v2: -->
<param name="open_loop">$(arg open_loop)</param>
<param name="rt_prio">$(arg rt_prio)</param>
<param name="external_torque_safety_check">$(arg external_torque_safety_check)</param>
<param name="external_torque_limit">$(arg external_torque_limit)</param>
<!-- ── v1 (закомментировано) ─────────────────────────────
<plugin>iiwa_controller/IIWAHardwareInterface</plugin>
<param name="robot_ip">$(arg robot_ip)</param>
<param name="fri_port">$(arg fri_port)</param>
<param name="simulate">false</param>
<param name="command_mode">$(arg command_mode)</param>
<param name="joint_position_tau">$(arg joint_position_tau)</param>
─────────────────────────────────────────────────────────── -->
</hardware>
<joint name="joint1">