for frame [horizontal_laser_link]: frame [horizontal_laser_link] does not exist
将世界坐标该改成[horizontal_laser_link]就ok了
找到该启动文件(后缀为.launch)在其中找到
的字样然后删除就可以了
并且在rvizi中发现多处报错Submaps: For frame [map]: Frame [map] does not exist"
出现此类问题大概率是文件配置问题 若接入了两个以上的传感器例如激光雷达和imu 建议去检查一下雷达的启动文件或者imu的启动文件 frame_Id是否正确 或者去查看 revo_lds.lua是否配置正确。如果只是接入了单雷达出现此类错误可能是启用了imu数据造成的。一下附上我的文件给大家进行比对。
启动文件.launch一般是在工作空间的scr下launch文件夹中。
首先是弄清自己雷达的数据topic名称和frame_id,可以在雷达启动文件中查看,这里我以镭神lsN10的启动文件lsn10.launch为例:
#设置激光数据topic名称
#激光坐标
#雷达连接的串口
#雷达连接的串口波特率
#雷达裁剪角度开始值
#雷达裁剪角度结束值
#雷达点云距离最小值
#雷达点云距离最大值
如果接入了imu的话也需查看imu的启动文件:
这里我们明确了
发布的话题名 | frame_id | |
雷达 | horizontal_laser_2d | horizontal_laser_link |
imu | imu | imu_link |
然后我们打开revo_lds.lua
-- Copyright 2016 The Cartographer Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
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,
publish_frame_projected_to_2d = false,
use_pose_extrapolator = 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.submaps.num_range_data = 35
TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 8.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
TRAJECTORY_BUILDER_2D.use_imu_data = true
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
POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35
POSE_GRAPH.constraint_builder.min_score = 0.65
return options
其中 tracking_frame = "base_link",
published_frame = "base_link",
都要改成base_link
若用到了imu则TRAJECTORY_BUILDER_2D.use_imu_data = true 这里改成true,如果没有imu数据发布而启用了imu可能会报错。如果不用imu,单雷达的话就改为false。
然后打开demo_revo_lds.lauch文件进行配置
需要修改的是
以及
因为没有用到离线包所以将这一部分注释掉或者直接删掉
如果用到了imu还需配置一下urdf文件夹下的backpack_2d.urdf文件
其实也就是根据代码将frame_id 和话题名称对应改进去就可以了。值得注意的是初始xyz对建图效果是有影响的,有时候可能影响比较大。另外frame_id对应不好很有可能造成坐标转换出现问题从而在建图过程中出现飞出去的现象。具体可参考另一位博主的文章。
五、2D-lidar+IMU完成cartographer建图(IMU天坑)