用自己的机器人实现cartographer建图测试与地图保存应该这样做

  • 1.安装
  • 2.测试
  • 3.保存地图

亲测可行。(该教程使用github的代码地址,速度相对慢了一点,极速安装,请看这里: 极速安装cartographer)

1.安装

<1>Install wstool and rosdep.

sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build

<2>Create a new workspace in ‘catkin_google_ws’.

mkdir catkin_google_ws
cd catkin_google_ws
wstool init src

<3>Merge the cartographer_ros.rosinstall file and fetch code for dependencies.

wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall

<4>修改 .rosinstall

vim src/.rosinstall
将https://ceres-solver.googlesource.com/ceres-solver.git改为
https://github.com/ceres-solver/ceres-solver.git

<5>Install deb dependencies.
#The command ‘sudo rosdep init’ will print an error if you have already
#executed it since installing ROS. This error can be ignored.

src/cartographer/scripts/install_proto3.sh
sudo rosdep init   #如果这里错误,也很正常,多数是之前初始化过的,不用在意
rosdep update      #这里如果超时的话,可以重新执行一次这个命令
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y

<6>Build and install.

catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash
#如果你用的是zsh不是bash上面的那句改为下面这样
source install_isolated/setup.zsh

编译会有几十分钟完全可以去喝杯茶
如果系统纯净,这样的方式,完全没有问题

2.测试

这里部分代码需要修改具体如下:

在/home/zhaoekexeu/catkin_google_ws/src/cartographer_ros/cartographer_ros/launch下修改 demo_revo_lds.launch

2.1 删除运行bag的node节点,如下

<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" /><!--已经将运行bag的node删掉-->
</launch>

2.2 修改frame 这个很重要

在/home/zhaoekexeu/catkin_google_ws/src/cartographer_ros/cartographer_ros/configuration_files下修改 revo_lds.lua

主要修改:

map_frame = “map”,
tracking_frame = “horizontal_laser_link”,
published_frame = “horizontal_laser_link”,
odom_frame = “odom”,

这里需要查询一下自己的tf_tree

 rosrun rqt_tf_tree rqt_tf_tree

显示如下图片(我这里是运行正确之后的frames ,你可以根据错误的信息进行更改上面四行代码)

修改后的代码

include "map_builder.lua"
include "trajectory_builder.lua"options = {map_builder = MAP_BUILDER,trajectory_builder = TRAJECTORY_BUILDER,map_frame = "map",tracking_frame = "base_footprint",published_frame = "base_footprint",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

这样就修改OK了。

开始准备测试
(这里是按照我自己做的机器人进行描述的,可供参考)

  1. 首先在主机(这里就是指自己的笔记本)启动master
  roscore
  1. 主机端链接树莓派(前提是你已经进行了分布式配置)
  ssh kenan@192.168.0.143
  1. 机器人上电之后,树莓派端打开端口权限,然后启动机器人
  sudo chmod 666 /dev/ttyUSB0 sudo chmod 777 /dev/ttyACM0 roslaunch mbot_bringup mbot_with_laser.launch
  1. 主机端 开始准备执行cartographer的node
  cd catkin_google_wscatkin_make_isolated --install --use-ninja //编译source install_isolated/setup.zsh //刷新环境 在此之前也可以重新编译一下roslaunch cartographer_ros demo_revo_lds.launch //执行demo_revo_lds.launch
  1. 主机端运行键盘控制节点
  roslaunch mbot_bringup mbot_with_laser.launch //这样就可以控制机器人进行建图了。

3.保存地图

方式1

1.当使用cartographer在线建图时,cartographer不知道什么时候结束,所以要先调用服务来关闭传感器数据的接收。

rosservice call /finish_trajectory 0

2.将当前地图信息的快照保存为后缀名为.pbstream。

# Ask Cartographer to serialize its current state.
# (press tab to quickly expand the parameter syntax)
rosservice call /write_state "{filename: '<绝对路径存放地图信息>/<地图保存的名字>.pbstream', include_unfinished_submaps: 'true'}"

3.通过cartographer提供的ros包,将后缀名为.pbstream的地图信息,转化成ros地图信息。

rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=<保存地图的绝对路径>/<地图命名> -pbstream_filename=<存放pbstream地图快照信息的绝对地址>/<filename>.pbstream -resolution=0.05

warning:上面的方法是网上各大博主的方法,我测试没有通过,会报下面的错误,暂时没有解决,如果您解决了,希望给我分享一下

方式2

这里需要修改map_server

如果想将GMapping中生成的地图保存下来,可以

rosrun map_server map_saver -f ~/robot_ws/map/gmapping

main函数中定义了一个MapGenerator类对象,该类初始化之后订阅map话题。在订阅的回调函数中,将订阅得到的map按照一定格式保存到当地的.pgm文件,同时将地图信息保存到对应的.yaml文件中。

需要注意的是,如果你是想保存Cartographer生成的地图,是需要对源代码做一些修改的。因为Cartographer的map格式跟GMapping中的格式不太一样。具体不一样如下:

我按照这个不同对map_server包做了一些修改,详情看github:https://github.com/HaoQChen/map_server 。如果觉得有用,记得star一下哦。

完成修改之后

可以使用如下格式的代码进行地图保存(根据自己的情况进行修改)

rosrun map_server map_saver map:=/<your map topic> -f <map_name>

局部参考:
https://blog.csdn.net/weixin_40712763/article/details/82292087
https://blog.csdn.net/m0_37672916/article/details/77198261
https://blog.csdn.net/u014493244/article/details/84101374
https://blog.csdn.net/SimileciWH/article/details/84846416
https://blog.csdn.net/u013834525/article/details/84622496

希望可以帮到您哦,水平有限,如果有错误之处,希望指正,谢谢。
系列文章:
TX2刷机教程 + sdkmanager + ubuntu16.04 + Jetpack 3.3.1
ubuntu 16.04极速安装ROS-Kinetic,以及常见错误处理
极速安装cartographer
学习移动机器人SLAM、路径规划必看的几本书
自己开发ROS机器人平台如何做?
stm32和ros的串口通信
ros app 下载、ros android app下载、ROS机器人控制app下载
用自己的机器人实现cartographer建图测试与地图保存应该这样做
激光slam传感器处理:2D激光雷达运动畸变去除原理解释、代码实现

用自己的机器人实现cartographer建图测试与地图保存应该这样做相关推荐

  1. 机器人学习--Turtelbot3学习--如何使用cartographer建图

    问题描述: 按照创客智造官网的教程:https://www.ncnynl.com/category/turtlebot3-tutorial/ 安装好turtlebot3的配套软件后,默认是使用 gma ...

  2. 差速小车的Cartographer建图

    目录 在之前的一些文章中,我们创建了DiffCart的仿真模型并能通过键盘控制它. 还为之提供了里程计和IMU用于估计机器人的位姿. 现在我们来给DiffCart装上激光雷达,并使用Cartograp ...

  3. cartography在机器人上运行建图与定位

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 编辑丨古月居 cartgrapher这个框架是google在2016年开源出来的框架,该框架可以接入2 ...

  4. 【激光SLAM】 01 cartographer环境建立以及建图测试(详细级)

    [激光SLAM]cartographer环境建立以及建图测试(详细级) cartographer Launch the 2D backpack demo. Download the 3D backpa ...

  5. odomimu融合用于Cartographer建图

    任务动机:使用odom&imu融合用于Cartographer建图,提高Cartographer建图时的匹配精度,同时降低运算消耗. 任务描述:使用odom&imu融合用于Cartog ...

  6. Cartographer建图和纯定位

    (一)cartographer在ros下安装参考: 要求: 64-bit, modern CPU (e.g. 3rd generation i7) 16 GB RAM Ubuntu 18.04 (Bi ...

  7. 【1】Cartographer建图后的原始图像处理(Rviz插件修图)

    修图软件:kolourpaint sudo apt install kolourpaint Cartographer建的地图往往是不能直接用的,需要自己修图清除噪声点和干扰点.除此之外,还需要限定一些 ...

  8. 用自己的雷达进行Cartographer建图或仿真

    首先需要进行Cartographer安装以及雷达驱动安装等准备工作, 直至我们能够在雷达运行时找到发布LaserScan的Topic并获取数据, 以开始下一步的建图. 基本信息获取 启动雷达或gaze ...

  9. cartographer建图,重定位及发布消息结构为nav_msgs::Odometry的odom话题

    完整功能包(包含carto建图,重定位以及odom话题发布)上传至https://download.csdn.net/download/zhaohaowu/33647981 众所周知,cartogra ...

最新文章

  1. Python获取代码运行时间
  2. 【Android Protobuf 序列化】Protobuf 使用 ( protoc 编译器简介 | 下载 protoc 编译器 | 使用 protoc 编译器编译 .proto 源文件 )
  3. 70.ER模型转化成关系模型是在数据库设计的第几个阶段?
  4. Mysql小练习(2)
  5. Python强大的格式化format
  6. 【Asp.net】Cookie对象
  7. java如何让线程阻塞_Java中如何使一个线程进入阻塞态?
  8. HM 内存池设计(2) HM6.0内存池设计
  9. 数据库(4)表的基本操作
  10. 3Dslicer +VS2013编译介绍
  11. Altera内部结构(一):Cyclone IV内部资源特点
  12. 电脑重启bootmgr_解决电脑出现bootmgr is missing如何解决
  13. Android Hal层回调APP应用接口
  14. HTML5期末大作业:动漫网站设计——千与千寻(10页) 含设计报告 HTML+CSS+JavaScript 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品 简单漫画网页设计成品 drea
  15. 2021-03-26
  16. 学习3D游戏建模线上和线下学习的区别有哪些?
  17. 五大常用项目管理工具软件-也支持敏捷开发
  18. 中国程序员最容易发错的单词
  19. java 去掉前后逗号_java 怎样去掉最后面那个逗号
  20. 20176408李俊 查找技术

热门文章

  1. a标签去下划线或文字添加下修饰_css中a标签不显示下划线怎么设置?
  2. 【bioinfo】hisat2/bowtie2比对结果summary文件解读
  3. 图书馆管理系统(二)
  4. 如何进行有效的系统拆分?
  5. 四种数据类型转换字符串类型的 三种方法
  6. Android开发,关于模拟器通知显示正常,真机测试真机通知无效问题
  7. 2018中国金融科技竞争力100强榜单
  8. Android——手写字体识别程序
  9. mysql insert into 语句卡住?原因?
  10. 菜鸟Windows八大保密技巧