Cartographer从小白到跑通再到调试 天坑错误集(持续更新)

一、雷达篇

rviz运行无法显示雷达点云图

for frame [horizontal_laser_link]: frame [horizontal_laser_link] does not exist

Cartographer从小白到跑通再到调试 天坑错误集(持续更新)_第1张图片

 解决办法:

1baa71066d134177b5940403dad1efd0.png

 将世界坐标该改成[horizontal_laser_link]就ok了

配置好雷达后运行启动文件后自动打开rivz

找到该启动文件(后缀为.launch)在其中找到

 

的字样然后删除就可以了

二、文件配置篇

运行carto警告[ WARN] [1668694281.982229116]: Could not compute submap fading: "map" passed to lookupTransform argument target_frame does not exist. 

Cartographer从小白到跑通再到调试 天坑错误集(持续更新)_第2张图片

并且在rvizi中发现多处报错Submaps: For frame [map]: Frame [map] does not exist"

Cartographer从小白到跑通再到调试 天坑错误集(持续更新)_第3张图片

 解决办法:

出现此类问题大概率是文件配置问题 若接入了两个以上的传感器例如激光雷达和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文件进行配置




  
  
  

  
    
  

  

  


需要修改的是

 这里的话题是雷达的话题必须与启动文件中的名字一致

以及        args="-clock $(arg bag_filename)" />

因为没有用到离线包所以将这一部分注释掉或者直接删掉

如果用到了imu还需配置一下urdf文件夹下的backpack_2d.urdf文件




  
    
  
  
    
  

  
    
      
      
        
      
      
    
  

  
    
      
      
        
      
      
    
  

  
    
      
      
        
      
      
    
  

  

  
    
    
    
  

  
    
    
    
  

  
    
    
    
  

 其实也就是根据代码将frame_id 和话题名称对应改进去就可以了。值得注意的是初始xyz对建图效果是有影响的,有时候可能影响比较大。另外frame_id对应不好很有可能造成坐标转换出现问题从而在建图过程中出现飞出去的现象。具体可参考另一位博主的文章。

五、2D-lidar+IMU完成cartographer建图(IMU天坑)

你可能感兴趣的:(SLAM,算法)