Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to extract ONLY odometry from cartographer? #1811

Open
maker-ATOM opened this issue Feb 27, 2024 · 0 comments
Open

How to extract ONLY odometry from cartographer? #1811

maker-ATOM opened this issue Feb 27, 2024 · 0 comments

Comments

@maker-ATOM
Copy link

  • What I am trying to achieve?
    I have a differential drive robot with YDLiDAR X4 on it. I want the robot to produce Odometry data only using LiDAR sensor with the help of Cartographer. Ultimately a odom => base_link transform should be broadcasted by cartographer, publishing on /odom topic is not necessary.

  • What I have done so far?
    With reference to the documentation at https://google-cartographer-ros.readthedocs.io/en/latest/ros_api.html#provided-tf-transforms

the section mentions,

Screenshot from 2024-02-26 19-10-10

cartographer provides two frames map_frame => published_frame which are map and base_link in my case respectively. Other frame broadcasted is odom_frame => published_frame, where odom_frame is odom in my case.

From what I have inferred is to get odometry the parameter provide_odom_frame should be set to true, but there is no mention about how to turn of the map => odom frame. So I tried setting publish_to_tf to false.

So the .lua file looks something like this,

include "map_builder.lua"
include "trajectory_builder.lua"

options = {
  map_builder = MAP_BUILDER,
  trajectory_builder = TRAJECTORY_BUILDER,
  map_frame = "map",
  tracking_frame = "base_link",
  published_frame = "base_link",
  odom_frame = "odom",
  publish_to_tf = false,
  provide_odom_frame = true,
  publish_frame_projected_to_2d = true,
  use_odometry = false,
  use_nav_sat = false,
  use_landmarks = false,
  num_laser_scans = 1,
  num_multi_echo_laser_scans = 0,
  num_subdivisions_per_laser_scan = 1,
  num_point_clouds = 0,
  lookup_transform_timeout_sec = 0.2,
  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.05
TRAJECTORY_BUILDER_2D.max_range = 8.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 8.5
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.2)
-- for current lidar only 1 is good value
TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 1

POSE_GRAPH.constraint_builder.min_score = 0.65
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.65
POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35

return options

With these setting NO transform is being published by cartographer neither map => odom nor odom => base_link.

I also tried doing some iterations,
the results are below, other params are unchanged,
for

  map_frame = "map",
  tracking_frame = "base_link",
  published_frame = "base_link",
  odom_frame = "odom",
  publish_to_tf = false,
  provide_odom_frame = true,
  publish_frame_projected_to_2d = true,

1

for,

  map_frame = "map",
  tracking_frame = "base_link",
  published_frame = "base_link",
  odom_frame = "odom",
  publish_to_tf = true,
  provide_odom_frame = true,
  publish_frame_projected_to_2d = true,

2

So how do you get cartographer broadcast only odom => base_link transform?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant