ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
1

A few questions about SLAM Cartographer.

asked 2017-06-09 16:06:56 -0500

baltic gravatar image

updated 2017-09-07 12:26:13 -0500

Hi, when I was using Cartographer to build a 2D map, I had no problems. However, when I was using Cartographer to build a 3D map (as in the example backpack_3d), with the use of UTM-30LX-EW (without rotating base) and IMU, many problems appeared.

1) I reconfigured the launch of the example (backpack_3d) to work on my robot. Each time the Cartographer is started, the IMU axis is tilted relatively to the map axis. And each time to about the same angle. But the IMU data show that there is no inclination. Whence the question appears, why does the inclination of the IMU axis appear?

image description image description

2) A submap, which was built, is very faded. These are no problems with visualization, but extremely small values in the cells of the map. This problem occurs only when I use a 2D lidar for the 3D Cartographer mode (in 2D mode or using 3D lidar there are no problems). To check that the problem is exactly in the Cartographer algorithm, I reconfigured backpack_3d to work with 2D lidar. I run the bag file for this example (b3-2016-04-05-14-14-00.bag), using the pointcloud_to_laserscan package to get the 2D lidar. And I still get the same faded map. How to fix this?

The map looks like this: image description

In this case, interestingly, there is no problem with tilting the IMU like on my robot.

The settings file for Cartographer:

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",
provide_odom_frame = true,
use_odometry = false,
use_laser_scan = true,
use_multi_echo_laser_scan = false,
num_point_clouds = 0,
lookup_transform_timeout_sec = 0.2,
submap_publish_period_sec = 0.3,
pose_publish_period_sec = 5e-3,
}

TRAJECTORY_BUILDER_3D.scans_per_accumulation = 160

MAP_BUILDER.use_trajectory_builder_3d = true
MAP_BUILDER.num_background_threads = 7
MAP_BUILDER.sparse_pose_graph.optimization_problem.huber_scale = 5e2
MAP_BUILDER.sparse_pose_graph.optimize_every_n_scans = 320
MAP_BUILDER.sparse_pose_graph.constraint_builder.sampling_ratio = 0.03
MAP_BUILDER.sparse_pose_graph.optimization_problem.ceres_solver_options.max_num_iterations = 10
MAP_BUILDER.sparse_pose_graph.constraint_builder.adaptive_voxel_filter = TRAJECTORY_BUILDER_3D.high_resolution_adaptive_voxel_filter
MAP_BUILDER.sparse_pose_graph.constraint_builder.min_score = 0.62

3) When running the algorithm on the robot, if I write in the tracking_frame - not the IMU frame, I get the corresponding error, which is logical. However, in the example from the developers (backpack_3d) in tracking_frameb base_link is written, not imu_link and there is no error. Why?

My tf image description The settings file of Cartographer for my robot.

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

options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
tracking_frame = "imu_bosch_link",
published_frame = "base_link",
odom_frame = "odom",
provide_odom_frame = true,
use_odometry = false,
use_laser_scan = true,
use_multi_echo_laser_scan = false,
num_point_clouds = 0,
lookup_transform_timeout_sec = 0.2,
submap_publish_period_sec = 0.3,
pose_publish_period_sec = 5e-3,
}

TRAJECTORY_BUILDER_3D.scans_per_accumulation = 160

MAP_BUILDER.use_trajectory_builder_3d = true
MAP_BUILDER.num_background_threads = 7
MAP_BUILDER.sparse_pose_graph.optimization_problem.huber_scale = 5e2
MAP_BUILDER.sparse_pose_graph.optimize_every_n_scans = 320
MAP_BUILDER.sparse_pose_graph.constraint_builder.sampling_ratio = 0.03
MAP_BUILDER.sparse_pose_graph.optimization_problem.ceres_solver_options.max_num_iterations = 10
— Reuse the coarser 3D voxel filter to speed up the computation of loop closure
— constraints.
MAP_BUILDER.sparse_pose_graph.constraint_builder.adaptive_voxel_filter = TRAJECTORY_BUILDER_3D.high_resolution_adaptive_voxel_filter
MAP_BUILDER.sparse_pose_graph.constraint_builder.min_score = 0.62

UPDATE Thank you, I’ve already figured it out, but just forgot to close the question.

As the developer informed, the 2D lidar is not applicable in 3D, although such start does not lead to a system startup ... (more)

edit retag flag offensive close merge delete

Comments

I have the same problem. Did you solved it?

Yongall gravatar image Yongall  ( 2019-10-22 21:04:31 -0500 )edit

1 Answer

Sort by » oldest newest most voted
0

answered 2017-08-31 12:01:24 -0500

BrannonKing gravatar image

The tracking frame has to be the IMU location. If any examples do otherwise it's because their IMU is located at the base_link location. You also need to publish the appropriate IMU transform with static_transform_publisher.

edit flag offensive delete link more

Question Tools

2 followers

Stats

Asked: 2017-06-09 16:05:38 -0500

Seen: 2,089 times

Last updated: Sep 07 '17