cartographer安装_Cartographer源码阅读之附件2——带Landmark的demo运行和测试

66ec682b9a0b2b995cbbc5a6e9c26c8a.png
今天一直没有更新专栏里的文章,因为看到cartographer的官网文档做了更新:添加了测试Landmark的demo——Static Landmarks. 详见:demo of static landmarks。 但是直接按照官网上的指导运行会出error. 昨天下午和今天一上午的时间就是在解决这些error。所幸,终于解决了这些问题,所以把我遇到的问题和解决的方案写一下,分享给大家,以免让大家多耽误时间。

cartographer和cartographer_ros等的安装请见:Cartographer源码阅读_预准备

1. cartographer_mir的安装

首先,运行static landmark这个demo需要在原先代码的基础上新安装一个包:cartographer_mir. 安装过程如下:

首先,把cartographer_mir下载到你的源码文件中:

cd catkin_ws // 进入到你安装cartographer的工作空间
cd src
git clone https://github.com/googlecartographer/cartographer_mir.git

这是从GitHub上克隆源码的命令行方式。当然,你也可以从下面这个链接下载下来源码后再复制到相应目录 https://github.com/googlecartographer/cartographer_mir

其次,重新编译整个project:

cd ..   //回到catkin_ws这个目录下
catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash

没有错误的话,cartographer_mir就安装成功了。接下来你可以在/src/cartographer_mir/cartographer_mir目录下分别看到launch和configuration_files这两个目录。这两个目录里就分别存放着运行新的demo所需的launch文件和配置文件。

2. 下载landmark测试集数据包的rosbag

wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/mir/landmarks_demo_uncalibrated.bag

但是这个数据包的地址也是需要翻墙的。如果不翻墙下载不下来。我自己已经懒得翻墙了(或者说穷的买不起VPN),所以让朋友下载下来后传给了我。

3. Bug修改

以下记录了一下我的debug过程,不感兴趣的直接跳到后面看总结。

在cartographer_mir安装完毕和测试集数据包下载完成后,理论上就可以运行测试demo了。

roslaunch cartographer_mir offline_mir_100_rviz.launch bag_filename:=${HOME}/Downloads/landmarks_demo_uncalibrated.bag

然而,很遗憾,直接拷贝上述命令运行后,报了一个错误:

[...../offline_mir_100_rviz.launch] requires the 'bag_filenames' arg to be set

囧!!!!我明明已经给bag_filename这个参数赋值了啊,数据包地址和名称检查也没有错误。到底是什么错误呢??

后来,非常仔细地检查launch文件之后,发现官网提供的这个命令行中“bag_filename:=”少了一个s,而在launch文件中,要求的参数名是“bag_filenames”而不是“bag_filename”。所以,命令必须修改如下:

roslaunch cartographer_mir offline_mir_100_rviz.launch bag_filenames:=${HOME}/Downloads/landmarks_demo_uncalibrated.bag

其中,“bag_filename:=”修改为了“bag_filenames:=”。注意对比和区分。

这个错误应该就是官网的说明文档刚上线的一个typo,目前还没被作者发现。

然后,修改后又重新运行,满心期待,结果再次报错:

[FATAL] [1542782924.721540472]: F1121 14:48:44.000000 27311 http:// lua_parameter_dictionary.cc:410 ] Check failed: 1 == reference_counts_.count(key) (1 vs. 0) Key 'collate_landmarks' was used the wrong number of times.

再囧一次!!!

于是打开配置文件查看。配置文件在/src/cartographer_mir/cartographer_mir/configuration_files中。找到collate_landmarks这个参数:

TRAJECTORY_BUILDER.collate_landmarks = false

定位到错误所在,ok. 将该值改为true:

TRAJECTORY_BUILDER.collate_landmarks = true

再次运行。心惊胆颤地等待运行结果。结果再次报错:

[FATAL] [1542782924.721540472]: F1121 14:48:44.000000 27311 http:// lua_parameter_dictionary.cc:410 ] Check failed: 1 == reference_counts_.count(key) (1 vs. 0) Key 'collate_landmarks' was used the wrong number of times.

坑爹呢!!!

改前改后一个样,完全没有效果。到底是哪里的问题嘛!!

然后在github上搜索。一直找不到问题所在。亏得我还在GitHub上提问(我在GitHub上的提问),直到无意间看到别人的描述里有这么一句:

TRAJECTORY_BUILDER.collate_landmarks = on

。。。。。。

所以,这个配置项不应该是"true"和 "false",而应该是"on" 和"off"。内心一万句mmp飞过:为啥我下载下来的文件里默认的是false,难道不应该写成off嘛!

所以,赶紧改成了

TRAJECTORY_BUILDER.collate_landmarks = on

然后,编译->重新运行。

结果再次报错:

[FATAL] [1542782924.721540472]: F1121 14:48:44.000000 27311 http:// lua_parameter_dictionary.cc:410 ] Check failed: 1 == reference_counts_.count(key) (1 vs. 0) Key 'use_pose_extrapolator' was used the wrong number of times.

心脏差点受不了了,还以为我的解决方案有问题呢。不过幸好我发现错误的参数已经不再是collate_landmarks了,而是换成了“use_pose_extrapolator”了。没关系,同样类型的错误很好改:

use_pose_extrapolator = on,

然后再次编译,运行。这次终于成功。

建图的效果如下(由于constraints太多,我设置为不显示constraints了。不然landmark都被盖住了,根本看不到):

798c9f5fd20aa26566a2c5a01e175833.png

所以,总结一下,这个demo要想运行成功需要改两个地方:

1. launch命令必须修改如下:

roslaunch cartographer_mir offline_mir_100_rviz.launch bag_filenames:=${HOME}/Downloads/landmarks_demo_uncalibrated.ba

其中,“bag_filename:=”修改为了“bag_filenames:=”。多了一个‘s’,注意对比和区分。

2. 修改配置文件/src/cartographer_mir/cartographer_mir/configuration_files/mir-100-mapping.lua中的两个参数为:

use_pose_extrapolator = on,
TRAJECTORY_BUILDER.collate_landmarks = on

以上!

祝大家跑demo顺利。

最近我重新跑了一下程序,发现cartographer中德landmark的数据确实没有发布。这段程序虽然能够跑通,但其中landmark似乎没有起作用,不知道cartographer的代码出了什么问题,期望能有cartographer官方发布的进一步消息。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值