16 from launch
import LaunchDescription
18 import launch_ros.actions
21 def generate_launch_description() -> LaunchDescription:
22 launch_dir = os.path.dirname(os.path.realpath(__file__))
23 params_file = os.path.join(launch_dir,
'dual_ekf_navsat_params.yaml')
24 os.environ[
'FILE_PATH'] = str(launch_dir)
27 ros_distro = os.environ.get(
'ROS_DISTRO',
'')
28 use_lifecycle = ros_distro
not in (
'jazzy',
'kilted')
31 'ekf_filter_node_odom',
32 'ekf_filter_node_map',
36 launch.actions.DeclareLaunchArgument(
37 'output_final_position', default_value=
'false'
39 launch.actions.DeclareLaunchArgument(
40 'output_location', default_value=
'~/dual_ekf_navsat_example_debug.txt'
42 launch_ros.actions.Node(
43 package=
'robot_localization',
44 executable=
'ekf_node',
45 name=
'ekf_filter_node_odom',
47 parameters=[params_file, {
'use_sim_time':
True}],
48 remappings=[(
'odometry/filtered',
'odometry/local')],
50 launch_ros.actions.Node(
51 package=
'robot_localization',
52 executable=
'ekf_node',
53 name=
'ekf_filter_node_map',
55 parameters=[params_file, {
'use_sim_time':
True}],
56 remappings=[(
'odometry/filtered',
'odometry/global')],
58 launch_ros.actions.Node(
59 package=
'robot_localization',
60 executable=
'navsat_transform_node',
61 name=
'navsat_transform',
63 parameters=[params_file, {
'use_sim_time':
True}],
65 (
'imu/data',
'imu/data'),
66 (
'gps/fix',
'gps/fix'),
67 (
'gps/filtered',
'gps/filtered'),
68 (
'odometry/gps',
'odometry/gps'),
69 (
'odometry/filtered',
'odometry/global'),
76 launch_ros.actions.Node(
77 package=
'nav2_lifecycle_manager',
78 executable=
'lifecycle_manager',
79 name=
'lifecycle_manager_localization',
82 {
'use_sim_time':
True},
84 {
'bond_timeout': 0.0},
85 {
'node_names': lifecycle_nodes},
90 return LaunchDescription(nodes)