Files
sherpa_ros2_ws/src/sherpa/launch/simulator.launch.py
2025-04-25 14:03:44 +02:00

114 lines
3.0 KiB
Python

import os.path
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import ExecuteProcess, IncludeLaunchDescription, SetEnvironmentVariable
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
from ament_index_python.packages import get_package_share_directory
from launch.substitutions import Command
def generate_launch_description():
ld = LaunchDescription()
pkg_name = 'sherpa'
pkg_share = get_package_share_directory(pkg_name)
pkg_prefix = os.path.dirname(pkg_share)
world_path = os.path.join(pkg_share, 'worlds', 'empty.world')
xacro_file = os.path.join(pkg_share, 'urdf', 'sherpa.xacro')
# create nodes
gz_env = SetEnvironmentVariable(
name='GZ_SIM_RESOURCE_PATH',
value=[pkg_prefix]
)
gz = ExecuteProcess(
cmd=[
'ros2', 'launch', 'ros_gz_sim', 'gz_sim.launch.py',
f'gz_args:=-r {world_path}'
],
output='screen'
)
state_publisher = Node(
package='robot_state_publisher',
executable='robot_state_publisher',
name='robot_state_publisher',
output='screen',
parameters=[{
'robot_description': Command(['xacro ', xacro_file])
}]
)
controller = Node(
package='controller_manager',
executable='spawner',
arguments=['ackermann_controller'],
output='screen'
)
joint_state_broadcaster = Node(
package='controller_manager',
executable='spawner',
arguments=['joint_state_broadcaster', '--controller-manager', '/controller_manager'],
parameters=[{'use_sim_time': True}],
output='screen'
)
static_tf = Node(
package='tf2_ros',
executable='static_transform_publisher',
name='static_tf_base_to_lidar',
arguments=[
'0', '0', '0',
'0', '0', '0',
'velodyne',
'base_link',
]
)
robot = ExecuteProcess(
cmd=[
'ros2', 'run', 'ros_gz_sim', 'create',
'-name', 'sherpa',
'-topic', 'robot_description',
'-x', '0', '-y', '0', '-z', '0.5'
],
output='screen'
)
gz_bridge = Node(
package="ros_gz_bridge",
executable="parameter_bridge",
arguments=[
"--ros-args",
"-p",
f"config_file:={os.path.join(pkg_share, 'config', 'gz_bridge.yaml')}",
]
)
rviz2 = Node(
package='rviz2',
executable='rviz2',
arguments=['-d', f"{os.path.join(get_package_share_directory('sherpa'), 'config', 'sherpa.rviz')}"]
)
ld.add_action(gz_env)
ld.add_action(gz)
ld.add_action(state_publisher)
ld.add_action(static_tf)
ld.add_action(robot)
ld.add_action(gz_bridge)
ld.add_action(joint_state_broadcaster)
ld.add_action(controller)
ld.add_action(rviz2)
return ld