velodyne+cartographer 2D构建栅格地图

  已经许久未更新博客,最近在做项目指标测试的时候,需要与单车cartographer建图进行对比实验。由于实验室的多线激光雷达是velodyne VLP16 而cartographer建图主要是利用速腾的rslidar16激光雷达来运行的,为了消除激光雷达型号对实验指标的影响,不得不进行改动。关于cartographer的安装相关问题就不在这里做过多说明,有需要的可以去参考这个链接cartographer安装
  这篇博客主要说如何利用velodyne VLP16 进行cartographer 2D建图和地图保存。

程序修改

  程序的需修改主要就两部分运行文件和激光雷达环境配置文件

launch文件创建与编写

  在cartographer_ros/launch 文件夹下创建一个建图程序,可以自己随便命名,不和现有的重复就行。(我这里是demo_VLP16_2d.launch)。上程序:

<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 velodyne.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" />
//resolution 0.05 这个参数可以修改,主要是建图时rviz中的分辨率<node name="rviz" pkg="rviz" type="rviz" required="true"args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" /></launch>

lua 文件编写

  在cartographer_ros/configuration_files文件夹下,创建velodyne的lua文件,我这里是velodyne.lua
将下面的代码复制进去。

include "map_builder.lua"
include "trajectory_builder.lua"options = {map_builder = MAP_BUILDER,trajectory_builder = TRAJECTORY_BUILDER,map_frame = "map",tracking_frame = "velodyne",published_frame = "velodyne",odom_frame = "odom",provide_odom_frame = true,publish_frame_projected_to_2d = false,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 = trueTRAJECTORY_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 = 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-1POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35
POSE_GRAPH.constraint_builder.min_score = 0.65return options

  完成上述两个文件,保存并重新编译cartographer功能包!!!!!一定要重新编译!!!注意如果是安按照我上面提供的连接安装的cartographer,编译时不能用catkin_make,用下面这句:

catkin_make_isolated --install --use-ninja

编译没问题后,就可以进行测试了。

测试

  首先启动激光雷达,然后运行cartographer建图程序

roslaunch velodyne_pointcloud VLP16.launch
//
cd cartographer
source ioslated_devel/setup.bash
roslaunch cartographer_ros demo_VLP16_2d.launch

基本上到这里就可以出图了,下面是建图过程

地图保存

  我一开始是想按照正常的cartographer2D栅格地图保存的方式来保存所建地图来着,但是觉得太费事了,还需要将.pbstream地图转换成.pgm和yaml格式。这里推荐大家一个好用的功能包,使用它就可以像保存gmapping栅格地图一样保存cartographer 2d地图了。这个功能包是基于map_server改进的,具体原理是由于carto保存地图格式和map_saver不一致,对相关源码进行修改即可,修改后的包在这个链接里戳这里
即使你已经安装了map_server这里不影响,你只需要新建一个工作空间将这个功能包复制进去,编译一下就可了。使用时,也是就是正常的地图保存指令rosrun map_server map_saver -f <绝对路径>/<地图名字>
下面是我的建图

最近太懒了,一直没更新。重新振作起来,再次出发!!!
后面那个连接,如果GitHub登不上的可以私聊我,我给你发。或者过一阵子我看看能否上传资源。
(致谢:感谢同为工大你却那么优秀的@合工大机器人实验室!撒花✿✿ヽ(°▽°)ノ✿)

velodyne+cartographer 2D构建栅格地图相关推荐

  1. 快速构建栅格地图-MatLab

    利用Matlab快速构建栅格地图 文章目录 利用Matlab快速构建栅格地图 一.写在前面 二.地图分类 三.栅格地图优势 四.核心函数及思想 五.Matlab程序及注释 一.写在前面 ​你好,我是禅 ...

  2. matlab构建栅格地图绘图思路

    matlab构建栅格地图绘图思路 近来因研究需要,调研并思考了栅格地图的生成方法,暂时总结以备不时之需. 栅格的建立最需要注意栅格粒度的问题,即根据需要调整栅格的边长,目前有两种思路一种是固定栅格边长 ...

  3. 【ROS-数据格式】 2D激光雷达栅格地图的数据格式

    ROS中栅格地图的数据格式,有问题可以指出留言,我们一起进步! 栅格地图消息格式: 栅格地图消息格式: 命令:rosmsg show nav_msgs/OccupancyGrid 消息格式: std_ ...

  4. 构建栅格地图matlab代码

    1    使用MATLAB实现地图栅格化 效果图如下所示 图1 图2 图1中的黑色栅格为障碍物栅格,白色栅格为可行走栅格(非障碍物栅格),黑色栅格 用0来表示,白色栅格用1来表示 2    栅格环境的 ...

  5. 占据栅格地图构建(Occupancy Grid Map)

    移动机器人地图构建问题,主要以gmapping为例,讲解了地图构建的整个流程.看过前面文章的小伙伴肯定都知道,gmapping算法把SLAM问题分解成两个部分,定位问题和地图构建问题.而gmappin ...

  6. 机器人学习--栅格地图(occupancy grid map)构建(部分代码解析)

    转自: 占据栅格地图构建(Occupancy Grid Map) - 知乎 占据栅格地图构建(Occupancy Grid Map)_「小白学移动机器人」一个专注分享移动机器人相关知识的公众号!-CS ...

  7. 立体栅格地图_双目立体视觉栅格地图构建方法

    双目立体视觉栅格地图构建方法 王轩 ; 叶平 ; 贾庆轩 [期刊名称] <软件> [年 ( 卷 ), 期] 2012(033)011 [摘要] 本文基于立体视觉定位技术 , 提出了基于双目 ...

  8. 基于栅格地图的路径规划(一)基于Matlab二维、三维栅格地图的构建

    基于栅格地图的路径规划(一)基于Matlab二维.三维栅格地图的构建 前言 1.二维栅格地图的创建 1.1.二维栅格地图构建原理 1.2.二维栅格地图构建例程 2.三维栅格地图的创建 2.1.三维栅格 ...

  9. 机器人学习--从路径规划侧面看栅格地图

    移动机器人路径规划--很多种算法,如果有计算机学科基础的话,可以参考数据结构中的深度优先算法或者广度优先算法 https://zhuanlan.zhihu.com/p/51112799 https:/ ...

最新文章

  1. Cloudera Manager 5.3 和 CDH5.3.0 本地(离线)
  2. 跟我学Spring Cloud(Finchley版)-08-Ribbon深入
  3. sklearn快速入门教程:(三)机器学习的通用模式及实现方法
  4. 修改DEDECMS文章标题长度,解决DEDECMS文章标题显示不全
  5. Excel 中如何找出两列数据中不重复的记录
  6. 云栖科技评论第53期:前沿技术要“会说话”
  7. Java多线程常用方法 wait 和 notify
  8. 各类型土地利用图例_给排水系统各部件及图纸你还有多少不了解?
  9. 考试全程指导读书笔记1 -Chap1 信息系统基础
  10. Linux下C语言的调试器 Gdb
  11. GPU GEMS 3 EBOOK下载
  12. 次时代Java编程(一):续 vertx-sync实践
  13. Java旅游网站源码+页面
  14. 工业机器人的算法概述
  15. Java智能卡基础篇
  16. Binary XML file line Error inflating class解决办法以及自定义view的基本实现
  17. KTV 歌房如何实现伴奏与人声同步功能
  18. ASP.NET企业员工档案管理系统源码
  19. Pycharm显示多个代码窗口
  20. 【HDU】-2112-HDU Today(最短路)

热门文章

  1. html浏览器pc端禁止缩放,阻止pc端浏览器缩放js代码
  2. 嵌入式系统开发笔记7:CJ/T-188 冷热量表协议解析1
  3. npoi使用Excel模板下载数据
  4. 国内智能音箱生态系统对比分析
  5. matlab的dc程序,基于MATLAB的数字式DC/DC开关电源系统建模
  6. 【云开发】全网最详细壁纸小程序教程+源码
  7. Maximo安全控制相关表
  8. hive 查询表中的数据来源hdfs 位置
  9. android监听点击通知栏,android使用NotificationListenerService监听通知栏消息
  10. 用IDEA写一个登录系统