EAI G4 lidar 在cartographer上2dslam建图

Posted lovebay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EAI G4 lidar 在cartographer上2dslam建图相关的知识,希望对你有一定的参考价值。

 参考:http://www.mindthink.me/2018/11/01/cartographer学习系列之二%EF%BC%9A-使用-eai-ydlidar-实现-cartographer-2d-slam/  

https://blog.csdn.net/qq_41622988/article/details/80483826  

前面已经完成配置 ROS(kinetic)、cartographer、EAI的ROS驱动包。接下来进行EAI G4 lidar 在cartographer上跑数据。
 (1) 对cartographer_ros文件夹中的代码及参数修改,首先修改~/catkin_ws/src/cartographer_ros/cartographer_ros/launch目录下的demo_revo_lds.launch  文件,其实需要修改的也就是<remap from="scan" to="scan" />因为这里我们只是利用了激光雷达建图,并未使用机器人本体。最后的playbag 节点删掉。(建议备份原文件) 修改后如下:

<!--
  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.
-->

<launch>
  <param name="/use_sim_time" value="true" />

  <node name="cartographer_node" pkg="cartographer_ros"
      type="cartographer_node" args="
          -configuration_directory $(find cartographer_ros)/configuration_files
          -configuration_basename revo_lds.lua"
      output="screen">
    <remap from="scan" to="scan" />
  </node>

  <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
      type="cartographer_occupancy_grid_node" args="-resolution 0.05" />

  <node name="rviz" pkg="rviz" type="rviz" required="true"
      args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />

</launch>

   (2) 接下来对~/catkin_ws/src/cartographer_ros/cartographer_ros/configuration_files目录下的revo_lds.lua文件进行修改,其中比较关键的是开始的几个frame的设置,网上转载比较多的是如下修改方式
  map_frame = "map",
  tracking_frame = "laser",
  published_frame = "laser",
  odom_frame = "odom",
这样设置的原因应该是只用了一个激光器,而不是机器人,所以用“laser”,这个“laser”也需要查看激光器在tf_tree中的名称,用实际的名称“laser_frame”替换,否则rviz中看不到地图,因为tf有问题。之前的问题一直是tf树的问题,所以所建地图无法出来,通过查看激光雷达的在tf树中的名称。因此将tracking_frame和published_frame后的参数改成laser_frame即可
 修改后如下:

-- 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 = "laser_frame",
  published_frame = "laser_frame",
  odom_frame = "odom",
  provide_odom_frame = true,
  use_odometry = 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.,
  imu_sampling_ratio = 1.,
}

MAP_BUILDER.use_trajectory_builder_2d = true

TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
TRAJECTORY_BUILDER_2D.min_range = 0.08
TRAJECTORY_BUILDER_2D.max_range = 16.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
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

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

return options 
 
(3) 重新编译
 $ cd ~/catkin_ws
 $ catkin_make_isolated --install --use-ninja
 
 (4) 开启两个窗口。分别运行如下指令:
 $ roslaunch ydlidar lidar.launch
 $ roslaunch cartographer_ros demo_revo_lds.launch
 
 (5)保存地图
 #新建map文件夹用于保存地图
 $ mkdir -p ~/map
 #启动存图,并将名为lidar_2d的地图文件保存在map文件夹
 $ rosrun map_server map_saver -f ~/map/lidar_2d
 #查看内容,包含lidar_2d.pgm  lidar_2d.yaml
 $ ls ~/map

















以上是关于EAI G4 lidar 在cartographer上2dslam建图的主要内容,如果未能解决你的问题,请参考以下文章

ESB和EAI之间的区别

好消息Office 365和Exchange 2019将支持EAI地址

EAI_NODATA 和 EAI_ADDRFAMILY 未声明(Linux 操作系统)

Node.js 服务器随机抛出 EAI_AGAIN

从代码理解 cartographer 1

节点服务器上的间歇性 EAI_AGAIN 错误