Refactor URDF and launch files for iiwa robot

- Updated gripper macros in gripper_macros.xacro to simplify parameters and add Gazebo support.
- Removed unused mesh property in gripper_meshes.xacro.
- Enhanced iiwa7 digital and FRI URDF files with simulation arguments and improved controller setup.
- Added new launch files for Gazebo simulation and universal launch configuration.
- Implemented YAML parameter wrapping for ROS2 in converter.py.
- Introduced a new gz_bridge.yaml configuration for Gazebo to ROS2 topic mapping.
- Cleaned up setting_loader.py and added necessary imports.
This commit is contained in:
Даниил Грабарь
2026-04-08 13:21:18 +10:00
parent 9fb3477466
commit e182f5b7bd
17 changed files with 775 additions and 357 deletions
@@ -0,0 +1,117 @@
from launch import LaunchDescription
from launch.actions import OpaqueFunction
from launch.substitutions import LaunchConfiguration
from launch.event_handlers import OnProcessExit
from launch.actions import RegisterEventHandler
from launch_ros.actions import Node
from iiwa_utils import converter
def _setup_controllers(context, *args, **kwargs):
robot_name = LaunchConfiguration("robot_name").perform(context)
description = LaunchConfiguration("description").perform(context)
initial_positions_file = LaunchConfiguration("initial_positions_file").perform(context)
controller_path = LaunchConfiguration("controller_path").perform(context)
simulate = LaunchConfiguration("simulate").perform(context).lower() in ("true", "1", "yes")
robot_description = converter.load_robot_description(
model_path=description,
robot_name=robot_name,
xacro_args={"initial_positions_file": initial_positions_file},
)
# СИМУЛЯЦИЯ (Gazebo)
if simulate:
jsb = Node(
package="controller_manager",
executable="spawner",
output="screen",
arguments=[
"joint_state_broadcaster",
"--controller-manager", "/controller_manager",
"--controller-manager-timeout", "30",
],
parameters=[{"use_sim_time": True}],
)
jtc = Node(
package="controller_manager",
executable="spawner",
output="screen",
arguments=[
"iiwa_arm_controller",
"--controller-manager", "/controller_manager",
"--controller-manager-timeout", "30",
],
parameters=[{"use_sim_time": True}],
)
jtc_after_jsb = RegisterEventHandler(
OnProcessExit(
target_action=jsb,
on_exit=[jtc],
)
)
return [jsb, jtc_after_jsb]
# РЕАЛЬНЫЙ РОБОТ (FRI)
else:
ros2_control_node = Node(
package="controller_manager",
executable="ros2_control_node",
output="screen",
parameters=[
{"robot_description": robot_description},
controller_path,
],
)
jsb = Node(
package="controller_manager",
executable="spawner",
output="screen",
arguments=[
"joint_state_broadcaster",
"--controller-manager", "/controller_manager",
],
)
jtc = Node(
package="controller_manager",
executable="spawner",
output="screen",
arguments=[
"iiwa_arm_controller",
"--controller-manager", "/controller_manager",
],
)
torque_controller = Node(
package="controller_manager",
executable="spawner",
output="screen",
arguments=[
"forward_torque_controller",
"--controller-manager", "/controller_manager",
"--inactive",
],
)
jtc_after_jsb = RegisterEventHandler(
OnProcessExit(
target_action=jsb,
on_exit=[jtc, torque_controller],
)
)
return [
ros2_control_node,
jsb,
jtc_after_jsb,
]
def generate_launch_description():
return LaunchDescription([OpaqueFunction(function=_setup_controllers)])