import os from launch.launch_description import LaunchDescription from launch.actions import DeclareLaunchArgument from launch.conditions import UnlessCondition from launch.substitutions import PathJoinSubstitution, LaunchConfiguration from launch_ros.actions import Node from launch_ros.substitutions import FindPackageShare from ament_index_python.packages import get_package_share_directory from launch.actions import ExecuteProcess def generate_launch_description(): # Launch arguments launch_args = [] launch_args.append( DeclareLaunchArgument( name="robot_description", description="Robot description XML file." ) ) launch_args.append( DeclareLaunchArgument( name="controller", default_value="rasms_arm_controller", description="Robot controller." ) ) # Configure robot_description robot_description = {"robot_description": LaunchConfiguration("robot_description")} # Load controllers from YAML configuration file ros2_controllers_path = os.path.join( get_package_share_directory("rasms_moveit_config"), "config", "rasms_controllers.yml", ) # Prepare controller manager and other required nodes controller_manager = Node( package="controller_manager", executable="ros2_control_node", parameters=[robot_description, ros2_controllers_path], output={ "stdout": "screen", "stderr": "screen" }, ) robot_state_publisher = Node( package="robot_state_publisher", executable="robot_state_publisher", output="screen", parameters=[robot_description] ) static_tf = Node( package="tf2_ros", executable="static_transform_publisher", name="static_transform_publisher", output="log", arguments=["0.0", "0.0", "0.0", "0.0", "0.0", "0.0", "world", "base"], ) joint_state_broadcaster = Node( package="controller_manager", executable="spawner.py", arguments=["joint_state_broadcaster", "--controller-manager", "/controller_manager"], ) joint_state_publisher = Node( package="joint_state_publisher", executable="joint_state_publisher", name="joint_state_publisher", output="screen", ) rasms_arm_controller = Node( package="controller_manager", executable="spawner.py", arguments=["rasms_arm_controller", "--controller-manager", "/controller_manager"], ) load_controllers = [] for controller in [ "rasms_arm_controller", "joint_state_broadcaster", ]: load_controllers += [ ExecuteProcess( cmd=["ros2 run controller_manager spawner.py {}".format(controller)], shell=True, output="screen", ) ] return LaunchDescription( launch_args + load_controllers + [ controller_manager, robot_state_publisher, static_tf, joint_state_broadcaster, rasms_arm_controller, joint_state_publisher ] )