Cartographer学习记录:Cartographer地图3D可视化配置(官方数据集版)

上一章介绍了Cartographer的安装运行及可能出现的问题,在文章的最后放上了一张自己建的实验室楼道图像,因为是ROS格式的地图,所以看起来并没有那么有立体感。为了更为直观的感受Cartographer3D建图的震撼效果,特地去钻研了下如何将Cartographer程序运行完毕得到的pbstream文件转换为点云文件进行查看,下面跟着我一起去摸索、体验3D建图的震撼与快乐吧!

说明:以下所有终端运行是建立在home目录下的工作空间carto_ws文件夹基础上,数据集放在home目录下的Downloads文件夹下。

第一步,下载官方数据集3D包

我用的是b3-2016-04-05-13-54-42.bag,可采用如下命令进行下载。

wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/b3-2016-04-05-13-54-42.bag

附上其他数据集(3D)的下载方式:

(1)这个数据集是用来和上面那个搭配使用演示cartographer的纯定位功能。

wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/b3-2016-04-05-15-52-20.bag

(2)这个数据集则是另一个3D包,我还暂时没有跑过。

wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag

第二步,利用launch文件对数据集进行实时建图

终端指令如下:

roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=/home/jin/Downloads/b3-2016-04-05-13-54-42.bag

终端指令说明:指令中的/home/jin请替换成自己电脑下的home目录名称。

在建完数据集的地图后,Cartographer不会自己结束并保存地图,需要利用ROS的service服务进行手动保存,终端指令如下:

rosservice call /finish_trajectory "trajectory_id: 0"

rosservice call /write_state "filename:'b3-2016-04-05-13-54-42.bag.pbstream'             
include_unfinished_submaps: false"

终端指令说明:指令中/finish_trajectory和/write_state为cartographer提供的服务名称,后面引号内的各个名称为相应参数,可以自行配置,我只是配置了指令2中的filename名称,以便后续可视化的运行。这里需要强调说明下:默认情况下,文件会保存在home目录下的.ros文件夹下,建议将该文件移动到home目录下的Downloads文件夹下以便统一管理,终端指令如下所示:

cd ~/.ros

sudo mv b3-2016-04-05-13-54-42.bag.pbstream ../Downloads

此时在Downloads文件夹下会有b3-2016-04-05-13-54-42.bag和b3-2016-04-05-13-54-42.bag.pbstream,做到这一步,小伙伴们可以查验下文件夹是否有这两个文件,以便后续可视化工作的顺利开展。

 第三步,保存点云数据

首先,修改carto_ws/src/cartographer_ros/cartographer_ros/configuration_files/assets_writer_backpack_3d.lua文件,文件内容截图如下所示:

可以从截图中看到,与原来文件相比,我在最后部分的内容里增添了一个action以便后续启动相关launch文件后可以生成对应.ply文件。

    {
      action = "write_ply",
      filename = "points.ply",
    },

然后切换到/carto_ws文件夹下重新编译,并进行source刷新。 

catkin_make_isolated --use-ninja

source devel_isolated/setup.bash

最后启用assets_writer_backpack_3d.launch文件生成.ply文件,终端指令如下:

roslaunch cartographer_ros assets_writer_backpack_3d.launch bag_filenames:=/home/jin/Downloads/b3-2016-04-05-13-54-42.bag pose_graph_filename:=/home/jin/Downloads/b3-2016-04-05-13-54-42.bag.pbstream

终端指令说明:bag_filenames和pose_graph_filename参数后面跟的路径名,请各位小伙伴换成自己电脑下的路径,也就是第二步里面提到的这两个文件。

运行完成后会有如下红字报错显示,此类属于正常现象。

可以查看carto_ws文件夹下是否出现.ply文件以及灰度和彩色的6张图片,如下图所示:

 第四步,将点云数据可视化

方式一

利用pcl_ply2pcd将ply格式转换为pcd格式进行查看,即在终端输入如下命令:

pcl_ply2pcd b3-2016-04-05-13-54-42.bag_points.ply test1.pcd

方式二(推荐)

点开此处链接下载或者采用git clone的方式。

以下默认是将Cartographer的点云可视化库放在/carto_ws目录下的point_cloud_viewer-master文件夹下

git clone https://github.com/googlecartographer/point_cloud_viewer

1.下载Cartographer的点云可视化库进行转化显示,下载完成后进行编译安装。

(1)在编译之前,我们需要安装一些依赖,运行如下指令安装Rust:

curl https://sh.rustup.rs -sSf | sh

运行指令后若是显示curl: (6) Could not resolve host: sh.rustup.rs,建议挂下VPN再进行。

成功安装后截图如下所示:

 (2)运行如下指令对所有子模块进行初始化:

git submodule update --init --recursive

若是运行该指令出现如下情形,导致错误,可以在当前目录下输入git init解决:

(3)最后 ,进行编译。

cargo build --release

编译时可能会出现问题,现在我将我碰到的问题与各位小伙伴分享,以便少走弯路。

问题一:

问题定位: (1)上一步初始化子模块步骤git submodule update --init --recursive没有成功。

(2)point_cloud_viewer-master/third_party/protobuf/文件夹为空。

解决方案:针对(1),回到上一步看看是否为未进行git init的原因。

针对(2),注意检查point_cloud_viewer-master/third_party/protobuf/路径下是否为空(因为采用手动下载可能导致某些文件夹丢失数据现象的出现),若是为空,请点击此链接下载对该文件夹进行补充。

编译安装成功截图如下所示:

2.利用build_octree工具生成可视化需要的点云图文件结构。

target/release/build_octree 
/home/jin/Downloads/b3-2016-04-05-13-54-42.bag_points.ply 
--output-directory /home/jin/cartographer/carto_viewer_ws/cloud/

终端指令说明:

第2个参数是前面生成的ply文件地址,--output-directory后面跟的第3个参数建议新建一个cloud文件夹放生成的点云图的各类文件以便管理。

温馨提示:在运行build_octree工具生成点云图时需要留有足够的内存空间,否则会失败,我这个在运行时文件夹直接膨胀到50多个G,在后面会慢慢缩减到10个G。

完成后如图所示,该文件夹下有各类文件:

 3.利用sdl-viewer进行可视化

cd point_cloud_viewer-master/sdl_viewer/

sudo apt-get install libsdl2-dev

cargo build --release

../target/release/sdl_viewer /home/jin/cartographer/carto_viewer_ws/cloud

终端指令说明:指令1是进入下载的可视化库文件夹下的sdl_viewer文件夹,指令5后面跟的参数就是上一步新建的cloud文件夹路径。

当然,这里也有可能会出现相应问题。

问题二:

 定位问题:当前环境下依赖sdl2未成功安装。

解决方案:当前目录下终端输入如下指令

sudo apt-get install libsdl2-dev

第五步,可视化效果图展示

当小伙伴们过五关斩六将进行到这一步时,就可以初步收获自己配置的成果啦!以下是我个人的效果图展示,后面会更新如何使用自己的数据集来建可视化3D图,希望各位小伙伴能多多支持!

温馨提示:

sdl2_viewer窗口可以使用键盘上的“上下左右”键进行旋转,用“WS”键控制缩放,用“AD”键控制左右平移。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值