ROS_Workspace/src/iisy_config/launch/lbr_move_group.launch.py
Bastian Hofmann 2d2bc89a6b i should be learning
yet i am refactoring
this is not a poem
pain.
2022-03-27 01:05:50 +01:00

184 lines
5.3 KiB
Python

import os
import yaml
import traceback
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, OpaqueFunction, TimerAction
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 as error:
print("Error loading yaml "+package_name+" | "+file_path)
traceback.print_exc()
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:
print("Error loading file "+package_name+" | "+file_path)
traceback.print_exc()
return None
def launch_setup(context, *args, **kwargs):
# Configure robot_description
robot_description = {"robot_description": LaunchConfiguration("robot_description")}
# Robot semantics SRDF
robot_description_semantic = {
"robot_description_semantic": load_file("iisy_config", "srdf/iisy.srdf")
}
# Kinematics
kinematics_yaml = load_yaml("iisy_config", "config/kinematics.yml")
# Update group name
#kinematics_yaml["{}_arm".format(model)] = kinematics_yaml["group_name"]
#del kinematics_yaml["group_name"]
# Joint limits
robot_description_planning = {
"robot_description_planning": PathJoinSubstitution(
[
FindPackageShare("iisy_config"),
"config/joint_limits.yml"
]
)
}
# Planning
ompl_yaml = load_yaml("iisy_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
controllers_yaml = load_yaml(
"iisy_config",
"config/iisy_moveit_controllers.yml"
)
moveit_controllers = {"moveit_simple_controller_manager": controllers_yaml,
"moveit_controller_manager": "moveit_simple_controller_manager/MoveItSimpleControllerManager"}
# Planning scene
planning_scene_monitor_parameters = {"publish_planning_scene": True,
"publish_geometry_updates": True,
"publish_state_updates": True,
"publish_transforms_updates": True}
# Time configuration
use_sim_time = {"use_sim_time": True}
perception_pipeline = load_yaml("iisy_config","config/sensors_3d.yml")
# Prepare move group node
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_yaml,
planning,
trajectory_execution,
moveit_controllers,
planning_scene_monitor_parameters,
use_sim_time,
perception_pipeline
]
)
# RViz
rviz_config = PathJoinSubstitution([FindPackageShare("iisy_config"), "config/config.rviz"])
rviz = Node(
package="rviz2",
executable="rviz2",
parameters=[
robot_description,
robot_description_semantic,
kinematics_yaml,
planning,
use_sim_time
],
arguments=[
'-d', rviz_config
]
)
# MoveGroupInterface demo executable
move_group_demo = Node(
name="btree_robot",
package="btree_robot",
executable="robot_test",
output="screen",
parameters=[
robot_description,
robot_description_semantic,
kinematics_yaml,
planning,
use_sim_time
],
)
return [
move_group_node,
rviz,
TimerAction(
period=10.0,
actions=[
move_group_demo
]
)
]
def generate_launch_description():
# Launch arguments
launch_args = []
launch_args.append(
DeclareLaunchArgument(
name="robot_description",
description="Robot description XML file."
)
)
return LaunchDescription(
launch_args + [
OpaqueFunction(function=launch_setup)
])