# Copyright 2021 Stogl Robotics Consulting UG (haftungsbeschränkt) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from launch import LaunchDescription from launch.actions import DeclareLaunchArgument from launch.conditions import IfCondition from launch.substitutions import Command, FindExecutable, LaunchConfiguration, PathJoinSubstitution from launch_ros.actions import Node from launch_ros.substitutions import FindPackageShare def generate_launch_description(): # Declare arguments declared_arguments = [] declared_arguments.append( DeclareLaunchArgument( "description_package", default_value="ros2_control_demo_description", description="Description package with robot URDF/xacro files. Usually the argument \ is not set, it enables use of a custom description.", ) ) declared_arguments.append( DeclareLaunchArgument( "description_file", default_value="diffbot.urdf.xacro", description="URDF/XACRO description file with the robot.", ) ) declared_arguments.append( DeclareLaunchArgument( "gui", default_value="true", description="Start Rviz2 and Joint State Publisher gui automatically \ with this launch file.", ) ) declared_arguments.append( DeclareLaunchArgument( "prefix", default_value='""', description="Prefix of the joint names, useful for \ multi-robot setup. If changed than also joint names in the controllers' configuration \ have to be updated.", ) ) # Initialize Arguments description_package = LaunchConfiguration("description_package") description_file = LaunchConfiguration("description_file") gui = LaunchConfiguration("gui") prefix = LaunchConfiguration("prefix") # Get URDF via xacro robot_description_content = Command( [ PathJoinSubstitution([FindExecutable(name="xacro")]), " ", PathJoinSubstitution( [FindPackageShare("hoverboard_driver"), "urdf", description_file] ), " ", "prefix:=", prefix, ] ) robot_description = {"robot_description": robot_description_content} rviz_config_file = PathJoinSubstitution( [FindPackageShare(description_package), "diffbot/rviz", "diffbot_view.rviz"] ) joint_state_publisher_node = Node( package="joint_state_publisher_gui", executable="joint_state_publisher_gui", condition=IfCondition(gui), ) robot_state_publisher_node = Node( package="robot_state_publisher", executable="robot_state_publisher", output="both", parameters=[robot_description], ) rviz_node = Node( package="rviz2", executable="rviz2", name="rviz2", output="log", arguments=["-d", rviz_config_file], condition=IfCondition(gui), ) nodes = [ joint_state_publisher_node, robot_state_publisher_node, rviz_node, ] return LaunchDescription(declared_arguments + nodes)