import os
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.conditions import UnlessCondition
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.parameter_descriptions import ParameterValue
from launch.substitutions import Command
from ament_index_python.packages import get_package_share_directory
def generate_launch_description():
is_sim_arg = DeclareLaunchArgument(
"is_sim",
default_value="True"
)
is_sim = LaunchConfiguration("is_sim")
robot_description = ParameterValue(
Command(
[
"xacro ",
os.path.join(
get_package_share_directory("lerobot_description"),
"urdf",
"so101.urdf.xacro",
),
]
),
value_type=str,
)
robot_state_publisher_node = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
condition=UnlessCondition(is_sim),
parameters=[{"robot_description": robot_description}],
)
controller_manager = Node(
package="controller_manager",
executable="ros2_control_node",
parameters=[
{"robot_description": robot_description,
"use_sim_time": LaunchConfiguration("is_sim", default="true")},
os.path.join(
get_package_share_directory("lerobot_controller"),
"config",
"so101_controllers.yaml",
),
],
condition=UnlessCondition(is_sim),
)
joint_state_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=[
"joint_state_broadcaster",
"--controller-manager",
"/controller_manager",
],
)
arm_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["arm_controller", "--controller-manager", "/controller_manager"],
)
gripper_controller_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["gripper_controller", "--controller-manager", "/controller_manager"],
)
return LaunchDescription(
[
is_sim_arg,
robot_state_publisher_node,
controller_manager,
joint_state_broadcaster_spawner,
arm_controller_spawner,
gripper_controller_spawner,
]
)