from launch import LaunchDescription from launch.actions import RegisterEventHandler from launch.substitutions import Command, FindExecutable, LaunchConfiguration, PathJoinSubstitution from launch.event_handlers import OnProcessExit from launch_ros.actions import Node from launch_ros.substitutions import FindPackageShare from moveit_configs_utils import MoveItConfigsBuilder def generate_launch_description(): moveit_config = ( MoveItConfigsBuilder("hexapod_robot", package_name = "hexapod_robot") .planning_scene_monitor( publish_robot_description=True, publish_robot_description_semantic=True ) .planning_pipelines(pipelines = ["ompl"]) .to_moveit_configs() ) move_group_node = Node( package = "moveit_ros_move_group", executable = "move_group", output = "screen", parameters = [moveit_config.to_dict()] ) ros2_controllers = PathJoinSubstitution([FindPackageShare("hexapod_robot"), "config", "ros2_controllers.yaml"]) robot_state_publisher_node = Node( package = "robot_state_publisher", executable = "robot_state_publisher", parameters = [moveit_config.robot_description], output = "both" ) ros2_control_node = Node( package = "controller_manager", executable = "ros2_control_node", parameters = [moveit_config.robot_description, ros2_controllers], output="both" ) joint_state_broadcaster_spawner = Node ( package = "controller_manager", executable = "spawner", arguments = ["joint_state_broadcaster", "--controller-manager", "/controller_manager"] ) joint_trajectory_controller_spawner = Node( package = "controller_manager", executable = "spawner", arguments = ["e1_group_controller", "e2_group_controller", "e3_group_controller", "e4_group_controller", "e5_group_controller", "e6_group_controller", "--controller-manager", "/controller_manager"] ) delay_rviz_after_joint_state_broadcaster_spawner = RegisterEventHandler( event_handler = OnProcessExit( target_action = joint_state_broadcaster_spawner, on_exit = [rviz_node] ) ) delay_joint_trajectory_controller_spawner_after_joint_state_broadcaster_spawner = RegisterEventHandler( event_handler = OnProcessExit( target_action = joint_state_broadcaster_spawner, on_exit = [joint_trajectory_controller_spawner] ) ) nodes = [ robot_state_publisher_node, move_group_node, ros2_control_node, joint_state_broadcaster_spawner, delay_joint_trajectory_controller_spawner_after_joint_state_broadcaster_spawner ] return LaunchDescription(nodes)