runtime/rasms_moveit_config/launch/rasms_moveit_interface.launch.py

195 lines
6.4 KiB
Python
Raw Normal View History

import os
import yaml
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, OpaqueFunction
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
from ament_index_python import get_package_share_directory
def load_yaml(package_name: str, file_path: str):
package_path = get_package_share_directory(package_name)
absolute_file_path = os.path.join(package_path, file_path)
try:
with open(absolute_file_path, "r") as f:
return yaml.safe_load(f)
except EnvironmentError:
return None
def load_file(package_name: str, file_path: str) -> str:
package_path = get_package_share_directory(package_name)
absolut_file_path = os.path.join(package_path, file_path)
try:
with open(absolut_file_path, "r") as f:
return f.read()
except EnvironmentError:
return None
def generate_launch_description():
#=============
#================================================================= Start initialize launch args ==========================================================
#=============
# Launch arguments
launch_args = []
launch_args.append(
DeclareLaunchArgument(
name="robot_description",
description="Robot description XML file."
)
)
launch_args.append(DeclareLaunchArgument(
name="sim",
default_value="true",
description="Launch robot in simulation or on real setup."
))
#=============
#================================================================= Start launching nodes ==========================================================
#=============
# Configure robot_description
robot_description = {"robot_description": LaunchConfiguration("robot_description")}
# Robot semantics SRDF
robot_description_semantic = {
"robot_description_semantic": load_file("rasms_moveit_config", "srdf/rasms_description.srdf")
}
# Kinematics
2021-10-19 23:26:26 +04:00
kinematics_yaml = load_yaml("rasms_moveit_config", "config/kinematics.yml")
# Update group name
kinematics_yaml["rasms_description_arm"] = kinematics_yaml["group_name"]
del kinematics_yaml["group_name"]
# Joint limits
robot_description_planning = {
"robot_description_planning": PathJoinSubstitution(
[
2021-10-19 23:26:26 +04:00
FindPackageShare("rasms_moveit_config"),
"config/joint_limits.yml"
]
)
}
# Planning
2021-11-03 15:18:12 +04:00
#ompl_yaml = load_yaml("rasms_moveit_config", "config/ompl_planning.yml")
planning = {
"move_group": {
"planning_plugin": "ompl_interface/OMPLPlanner",
"request_adapters": "default_planner_request_adapters/AddTimeParameterization default_planner_request_adapters/FixWorkspaceBounds default_planner_request_adapters/FixStartStateBounds default_planner_request_adapters/FixStartStateCollision default_planner_request_adapters/FixStartStatePathConstraints",
"start_state_max_bounds_error": 0.1
}
}
# Trajectory execution
trajectory_execution = {"allow_trajectory_execution": True,
"moveit_manage_controllers": True}
# Controllers
2021-11-03 15:18:12 +04:00
moveit_simple_controller_yml = load_yaml(
"rasms_moveit_config",
"config/rasms_moveit_controllers.yml"
)
2021-11-03 15:18:12 +04:00
moveit_controllers = {"moveit_simple_controller_manager": moveit_simple_controller_yml,
"moveit_controller_manager": "moveit_simple_controller_manager/MoveItSimpleControllerManager"}
2021-11-03 15:18:12 +04:00
ompl_planning_pipeline_config = {
"ompl": {
"planning_plugin": "ompl_interface/OMPLPlanner",
"request_adapters": """default_planner_request_adapters/AddTimeOptimalParameterization default_planner_request_adapters/FixWorkspaceBounds default_planner_request_adapters/FixStartStateBounds default_planner_request_adapters/FixStartStateCollision default_planner_request_adapters/FixStartStatePathConstraints""",
"start_state_max_bounds_error": 0.1,
}
}
ompl_planning_yml = load_yaml(
"rasms_moveit_config", "config/ompl_planning.yml"
)
ompl_planning_pipeline_config["ompl"].update(ompl_planning_yml)
# Planning scene
planning_scene_monitor_parameters = {"publish_planning_scene": True,
"publish_geometry_updates": True,
"publish_state_updates": True,
"publish_transforms_updates": True}
2021-11-03 15:18:12 +04:00
moveit_cpp_yaml_file_name = (
get_package_share_directory("rasms_moveit_config") + "/config/moveit_cpp.yml"
)
# Time configuration
use_sim_time = {"use_sime_time": LaunchConfiguration("sim")}
# Simple move_group interface
2021-11-07 16:02:53 +04:00
move_group_node = Node(
package="moveit_ros_move_group",
executable="move_group",
output="screen",
arguments=["--ros-args"],
parameters=[
robot_description,
robot_description_semantic,
kinematics_yaml,
robot_description_planning,
ompl_planning_pipeline_config,
planning,
trajectory_execution,
moveit_controllers,
planning_scene_monitor_parameters,
use_sim_time
]
)
# Node for test moveit_cpp interface
moveit_cpp_node = Node(
2021-11-03 15:18:12 +04:00
name="moveit_cpp_actions",
package="rasms_moveit_actions",
executable="rasms_moveit",
output="screen",
parameters=[
2021-11-03 15:18:12 +04:00
moveit_cpp_yaml_file_name,
robot_description,
robot_description_semantic,
kinematics_yaml,
2021-11-03 15:18:12 +04:00
ompl_planning_pipeline_config,
moveit_controllers,
2021-11-03 15:18:12 +04:00
],
)
# RViz
2021-11-03 15:18:12 +04:00
rviz_config = PathJoinSubstitution([FindPackageShare("rasms_moveit_config"), "config/rasms.rviz"])
rviz = Node(
package="rviz2",
executable="rviz2",
parameters=[
robot_description,
robot_description_semantic,
2021-11-07 16:02:53 +04:00
use_sim_time,
kinematics_yaml
],
arguments=[
2021-11-07 18:59:07 +04:00
'-d', rviz_config
]
)
launch_nodes = []
launch_nodes.append(rviz)
#launch_nodes.append(move_group_node)
launch_nodes.append(moveit_cpp_node)
return LaunchDescription(
launch_args +
launch_nodes
)