Skip to content

Instantly share code, notes, and snippets.

@lorepieri8
Created September 17, 2021 13:00
Show Gist options
  • Save lorepieri8/9eaebf8f6355752dfdd26227bcdae072 to your computer and use it in GitHub Desktop.
Save lorepieri8/9eaebf8f6355752dfdd26227bcdae072 to your computer and use it in GitHub Desktop.
teleop launch file
import os
import yaml
from launch import LaunchDescription
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_directory
from launch_ros.actions import ComposableNodeContainer
from launch_ros.descriptions import ComposableNode
from launch.actions import ExecuteProcess
import xacro
def load_file(package_name, file_path):
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 file:
return file.read()
except EnvironmentError: # parent of IOError, OSError *and* WindowsError where available
return None
def load_yaml(package_name, file_path):
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 file:
return yaml.safe_load(file)
except EnvironmentError: # parent of IOError, OSError *and* WindowsError where available
return None
def generate_launch_description():
# Get parameters for the Servo node
servo_yaml = load_yaml("moveit_servo", "config/xarm_simulated_config.yaml")
servo_params = {"moveit_servo": servo_yaml}
# Get URDF and SRDF
robot_description_config = xacro.process_file(
os.path.join(
get_package_share_directory("xarm_description"),
"urdf",
#"urdf/xarm6",
#"xarm62.urdf.xacro",
#"xarm6_robot_macro.xacro",
"xarm_device.urdf.xacro",
#"xarm_device_macro.xacro",
)
)
robot_description = {"robot_description": robot_description_config.toxml()}
robot_description_semantic_config = load_file(
"xarm_moveit_config", "srdf/xarm.srdf.xacro" #"srdf/xarm.srdf" #srdf/xarm.srdf.xacro"
)
robot_description_semantic = {
"robot_description_semantic": robot_description_semantic_config
}
# RViz
rviz_config_file = (
get_package_share_directory("moveit2_tutorials")
+ "/config/demo_rviz_config_xarm.rviz"
)
rviz_node = Node(
package="rviz2",
executable="rviz2",
name="rviz2",
output="log",
arguments=["-d", rviz_config_file],
parameters=[robot_description, robot_description_semantic],
)
# ros2_control using FakeSystem as hardware
ros2_controllers_path = os.path.join(
get_package_share_directory("xarm_controller"),
#get_package_share_directory("xarm_moveit_config"),
"config",
#"config/xarm6"
"xarm6_controllers.yaml",
#"controllers.yaml",
#get_package_share_directory("moveit_resources_panda_moveit_config"),
#"config",
#"panda_ros_controllers.yaml",
)
ros2_control_node = Node(
package="controller_manager",
executable="ros2_control_node",
parameters=[robot_description, ros2_controllers_path],
output={
"stdout": "screen",
"stderr": "screen",
},
)
# Load controllers
load_controllers = []
#for controller in ["panda_arm_controller", "joint_state_controller"]:
for controller in ["xarm6_traj_controller", "joint_state_controller"]:
load_controllers += [
ExecuteProcess(
cmd=["ros2 run controller_manager spawner.py {}".format(controller)],
shell=True,
output="screen",
)
]
# Launch as much as possible in components
container = ComposableNodeContainer(
name="moveit_servo_demo_container",
namespace="/",
package="rclcpp_components",
executable="component_container",
composable_node_descriptions=[
ComposableNode(
package="robot_state_publisher",
plugin="robot_state_publisher::RobotStatePublisher",
name="robot_state_publisher",
parameters=[robot_description],
),
ComposableNode(
package="tf2_ros",
plugin="tf2_ros::StaticTransformBroadcasterNode",
name="static_tf2_broadcaster",
parameters=[{"child_frame_id": "/link_base", "frame_id": "/world"}],
),
ComposableNode(
package="moveit_servo",
plugin="moveit_servo::ServoServer",
name="servo_server",
parameters=[
servo_params,
robot_description,
robot_description_semantic,
],
extra_arguments=[{"use_intra_process_comms": True}],
),
ComposableNode(
package="moveit_servo",
plugin="moveit_servo::JoyToServoPub",
name="controller_to_servo_node",
extra_arguments=[{"use_intra_process_comms": True}],
),
ComposableNode(
package="joy",
plugin="joy::Joy",
name="joy_node",
extra_arguments=[{"use_intra_process_comms": True}],
),
],
output="screen",
)
return LaunchDescription(
[rviz_node, ros2_control_node, container] + load_controllers
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment