from launch import LaunchDescription from launch.actions import DeclareLaunchArgument from launch.conditions import IfCondition from launch.substitutions import PathJoinSubstitution, LaunchConfiguration from launch_ros.actions import Node from launch_ros.substitutions import FindPackageShare from pathlib import Path def generate_launch_description(): basedir = FindPackageShare("").find("toid_lidar") lidar_config = PathJoinSubstitution([basedir, "params/lidar.yaml"]) rviz_config = PathJoinSubstitution([basedir, "rviz/conf.rviz"]) visualize = LaunchConfiguration("visualize") draw_markers = LaunchConfiguration("draw_markers") use_closest = LaunchConfiguration("use_closest") lidar_frame = LaunchConfiguration("lidar_frame") return LaunchDescription([ DeclareLaunchArgument( 'visualize', default_value='False', description="Whether to launch rviz2" ), DeclareLaunchArgument( 'draw_markers', default_value='False', description="Draw markers" ), DeclareLaunchArgument( 'use_closest', default_value='True', description="Use closest point for calibration" ), DeclareLaunchArgument( 'lidar_frame', default_value='lidar_frame', description="TF frame of the lidar" ), Node( package='toid_lidar', executable='toid_lidar', output="screen", parameters=[ lidar_config, { 'closest': use_closest, 'draw_markers': draw_markers }] ), Node( package='rplidar_ros', executable='rplidar_composition', output="screen", parameters=[lidar_config, {'frame_id': lidar_frame}] ), Node( package='rviz2', executable='rviz2', name='rviz2', output='screen', arguments=['-d', rviz_config], condition=IfCondition(visualize) ) ])