# Copyright 2022 Factor Robotics # # 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.substitutions import Command, FindExecutable, PathJoinSubstitution from launch_ros.actions import Node from launch_ros.substitutions import FindPackageShare import os from launch.actions import IncludeLaunchDescription from launch.launch_description_sources import PythonLaunchDescriptionSource from ament_index_python.packages import get_package_share_directory def generate_launch_description(): robot_description_content = Command( [ PathJoinSubstitution([FindExecutable(name="xacro")]), " ", PathJoinSubstitution( [ FindPackageShare("odrive_demo_description"), "urdf", "odrive_diffbot.urdf.xacro" ] ), ] ) robot_description = {"robot_description": robot_description_content} robot_controllers = PathJoinSubstitution( [ FindPackageShare("odrive_demo_bringup"), "config", "diffbot_controllers.yaml", ] ) rviz_config_file = PathJoinSubstitution( [ FindPackageShare("bot_mini_bringup"), "config", "bot_mini.rviz" ] ) control_node = Node( package="controller_manager", executable="ros2_control_node", parameters=[robot_description, robot_controllers], output="both", ) robot_state_pub_node = Node( package="robot_state_publisher", executable="robot_state_publisher", output="both", parameters=[robot_description], ) joint_state_broadcaster_spawner = Node( package="controller_manager", executable="spawner", arguments=["joint_state_broadcaster", "-c", "/controller_manager"], ) robot_controller_spawner = Node( package="controller_manager", executable="spawner", arguments=["diffbot_base_controller", "-c", "/controller_manager"], ) rviz_node = Node( package="rviz2", executable="rviz2", name="rviz2", arguments=["-d", rviz_config_file], ) package_name='bot_mini_bringup' gazebo_params_file = os.path.join(get_package_share_directory(package_name),'config','gazebo_params.yaml') # Include the Gazebo launch file, provided by the gazebo_ros package gazebo = IncludeLaunchDescription( PythonLaunchDescriptionSource([os.path.join( get_package_share_directory('gazebo_ros'), 'launch', 'gazebo.launch.py')]), launch_arguments={'extra_gazebo_args': '--ros-args --params-file ' + gazebo_params_file}.items() ) # Run the spawner node from the gazebo_ros package. The entity name doesn't really matter if you only have a single robot. spawn_entity = Node(package='gazebo_ros', executable='spawn_entity.py', arguments=['-topic', 'robot_description', '-entity', 'my_bot'], output='screen') diff_drive_spawner = Node( package="controller_manager", executable="spawner", arguments=["diff_cont"], ) joint_broad_spawner = Node( package="controller_manager", executable="spawner", arguments=["joint_broad"], ) twist_mux_params = os.path.join(get_package_share_directory(package_name),'config','twist_mux.yaml') twist_mux = Node( package="twist_mux", executable="twist_mux", parameters=[twist_mux_params, {'use_sim_time': True}], remappings=[('/cmd_vel_out','/diff_cont/cmd_vel_unstamped')] ) return LaunchDescription([ #control_node, robot_state_pub_node, joint_state_broadcaster_spawner, #robot_controller_spawner, rviz_node, gazebo, spawn_entity, diff_drive_spawner, #joint_broad_spawner, twist_mux ])