Cartographer doesn't subscribe to /tf topic on ROS 2 Foxy
Hi there,
I'am using Google Cartographer package on ROS 2 Foxy for SLAM in a autonomous golf cart. When I do the rqt_graph of the system nodes and topics, I can see only the cartographer node publising in /tf topic, but, it doesn't subscribe to get the transforms. The SLAM is good, but, after a few time running the package, it stops mapping. I'm think this happens because the node isn't subscribed in transforms node.
This is my launch file:
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch_ros.actions import Node
from launch.substitutions import LaunchConfiguration
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import ThisLaunchFileDir
def generate_launch_description():
use_sim_time = LaunchConfiguration('use_sim_time', default='true')
golfinho_cartographer_prefix = get_package_share_directory('golfinho_cartographer')
cartographer_config_dir = LaunchConfiguration('cartographer_config_dir', default=os.path.join(
golfinho_cartographer_prefix, 'config'))
configuration_basename = LaunchConfiguration('configuration_basename',
default='golfinho_2d.lua')
resolution = LaunchConfiguration('resolution', default='0.2')
publish_period_sec = LaunchConfiguration('publish_period_sec', default='1.0')
rviz_config_dir = os.path.join(get_package_share_directory('golfinho_cartographer'),
'rviz', 'golfinho_cartographer.rviz')
return LaunchDescription([
DeclareLaunchArgument(
'cartographer_config_dir',
default_value=cartographer_config_dir,
description='Full path to config file to load'),
DeclareLaunchArgument(
'configuration_basename',
default_value=configuration_basename,
description='Name of lua file for cartographer'),
DeclareLaunchArgument(
'use_sim_time',
default_value='true',
description='Use simulation (Gazebo) clock if true'),
Node(
package='cartographer_ros',
executable='cartographer_node',
name='cartographer_node',
output='screen',
remappings=[
("/scan_1", "/golfinho/laser_front/out"), # Remapping laser topic to /scan
("/scan_2", "/golfinho/laser_left/out"), # Remapping laser topic to /scan_1
("/scan_3", "/golfinho/laser_right/out"), # Remapping laser topic to /scan_2
("/scan_4", "/golfinho/laser_back/out"), # Remapping laser topic to /scan_3
("/odom", "/golfinho/odom"),
("/imu", "/golfinho/imu_plugin_gazebo/out")
],
parameters=[{'use_sim_time': use_sim_time}],
arguments=['-configuration_directory', cartographer_config_dir,
'-configuration_basename', configuration_basename]),
DeclareLaunchArgument(
'resolution',
default_value=resolution,
description='Resolution of a grid cell in the published occupancy grid'),
DeclareLaunchArgument(
'publish_period_sec',
default_value=publish_period_sec,
description='OccupancyGrid publishing period'),
IncludeLaunchDescription(
PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/occupancy_grid.launch.py']),
launch_arguments={'use_sim_time': use_sim_time, 'resolution': resolution,
'publish_period_sec': publish_period_sec}.items(),
),
Node(
package='rviz2',
executable='rviz2',
name='rviz2',
arguments=['-d', rviz_config_dir],
parameters=[{'use_sim_time': use_sim_time}],
output='screen'),
])
And this my .lua
config file:
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
tracking_frame = "imu_link",
published_frame = "odom", --base_link
odom_frame = "odom",
provide_odom_frame = false,
publish_frame_projected_to_2d = true,
use_odometry = true,
use_nav_sat = false,
use_landmarks = false,
num_laser_scans = 4,
num_multi_echo_laser_scans = 0,
num_subdivisions_per_laser_scan = 1,
num_point_clouds = 0,
lookup_transform_timeout_sec = 1.,
submap_publish_period_sec = 0.3,
pose_publish_period_sec = 5e-3,
trajectory_publish_period_sec = 30e-3,
rangefinder_sampling_ratio = 1.,
odometry_sampling_ratio = 1.,
fixed_frame_pose_sampling_ratio = 1.,
imu_sampling_ratio = 1.,
landmarks_sampling_ratio = 1.,
}
MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.min_range = 0.5
TRAJECTORY_BUILDER_2D.max_range = 300
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 0
TRAJECTORY_BUILDER_2D.use_imu_data = true
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.1)
POSE_GRAPH.constraint_builder.min_score = 0.65
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.7
POSE_GRAPH.optimize_every_n_nodes = 0
return options
Asked by toffanetto on 2022-08-10 15:31:58 UTC
Comments
Hi!, did you solve it? or did you understand something else useful. because I'm also trying to perform 3D SLAM with cartographer (in ros2 foxy) but my map brokes/rotate when I move the lidar quick, and i don't know if it is a TF or tuning problem. thanks in advance
Asked by cate1717 on 2022-11-04 03:59:42 UTC