Cartographer Standalone移植(2)—第一个版本

任务动机:实现Cartographer与Cartographer_ros剥离,剥离后的Cartographer可以在不启动roscore的情况下正常建图,同时可与ROS进行通讯。

任务描述:分步安装验证后,将步骤合并成安装脚本。

11.01 V2.0更新

下载 https://download.csdn.net/download/zhzwang/13084434

参考https://gitee.com/harryzhangabc/cartographer_standalone

1. 全面支持rosbridge(cpp)功能,可以和外部ros进行通讯了。
2. bug全面修复,make all成功。

cmake .. -DCMAKE_BUILD_TYPE=Release
make -j24

然后你会在build文件夹看到所有编译好的二进制文件。

编译状态

  •  ubuntu18.04
  •  openeuler 20 等待测试

        在经历过无数踩坑以后,发现直接移植cartographer_ros不是一个快速、可靠的办法。虽然官网提示cartogrpher_ros是开发cartographer一个不错的示例。但是在后来的研究中,发现自己写的程序无法完全实现cartographer_ros的全部功能,因为使用cartographer库需要严格的定时器设置、数据缓存池设计(带时间戳)、严格的数据格式,而这些还需要按照一定顺序去调用、实现,非常麻烦和费时。虽然自己写的程序刚好能够建图,但是bug层出无穷(大部分bug是定时器和数据结构不匹配,也和本人功底不够深厚有关)。因此,有没有一个很好的办法,即不用运行在ros上,又能够完美实现所有cartographer_ros的所有功能,并且支持官方更新呢?(google也知道他们的程序有bug所以会经常更新)

1. 实现原理

        我们知道,cartographer_ros是cartographer和ros的一个桥梁,cartographer_ros通过ros获得传感器数据,打包起来按照顺序输入cartographer并从cartographer获取相对坐标的变换数据通过cartographer_ros输出到TF变换。如果,此时保持cartographer_ros原封不动,对ros进行改造,使原来的ros变成一个"fake ros",首先把ros"多余"的部分清空,变成空循环,优化程序执行效率,然后再把ros的数据接口、定时器、rosbag等所有重要原始.c文件都打包起来把他们放在一起编译,最后把数据像原来ros的方式"喂"给cartographer_ros并加入ros_bridge,这样既不会丢失输入、输出原始ros的格式,也可以实现所有cartographer_ros的功能,可谓一举两得。

2. 注意事项

        截止到写这篇文章时,cartographer/ 和 cartographer_ros/ 并不是当前的最新版本,如果google发布了最新版本,你可以直接clone最新版本并替换掉他们,但是你可能需要在一个安装了最新版本的cartographer_ros、ros的机器里面找到ros_stub/include/cartographer_ros_msgs里面的相同的文件并替换掉他们。

3. 使用说明

        以下所有的操作均在ubuntu18.04实现,ubuntu16.04可以实现但是部分库必须从源码编译且有版本要求,比较麻烦

3.1 安装程序

sudo add-apt-repository universe
sudo apt update
sudo apt install git cmake bzip2 libbz2-dev libceres-dev libprotobuf-dev protobuf-compiler libpcl-dev liburdfdom-headers-dev liburdfdom-model liblz4-dev libtinyxml-dev liburdfdom-dev liburdfdom-tools
git clone https://gitee.com/harryzhangabc/cartographer_standalone
./cartographer_standalone/cartographer/scripts/install_debs_cmake.sh 
cd cartographer_standalone
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make cartographer_offline_node -j24

3.2 使用离线的方式测试程序

cd cartographer_standalone\build\cartographer_ros\cartographer_ros\cartographer_ros
./cartographer_offline_node \path\to\your\rosbag\

        可以看出来,因为cartographer_ros是完整的,所以该程序也支持在不安装ros的情况下直接跑rosbag,运行完后会得到一个.pbstream文件和.pgm地图文件和相关的.yaml文件。

3.3 使用在线的方式测试程序

        注意,到这一步,由于代码的特殊性,请把你的激光雷达、IMU等传感器ros驱动文件放到cartographer_standalone文件夹中,并在.cmakelists里面加入有关于你驱动的信息(打开cmakelists有详细的教程),然后,需要通过改动你的驱动文件把你的驱动做成一个C++的库,然后在cartographer_ros\cartographer_ros\cartographer_ros\node_main.cc里面调用你的驱动,只要调用一次打开传感器、注册个回调程序就可以了,注册成功后只要传感器数据一来就自动喂入cartographer进行建图。

        然后,编译程序,执行node程序,建完图后直接ctrl+c关闭程序生成一个.pbstream文件和.pgm地图文件和相关的.yaml文件。

cd cartographer_standalone
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make cartographer_node -j24

cd cartographer_standalone\build\cartographer_ros\cartographer_ros\cartographer_ros
./cartographer_node

4. 参考资料

  1. http://wiki.ros.org/cartographer
  2. https://github.com/larics/cartographer_superbuild
  3. https://google-cartographer-ros.readthedocs.io/en/latest
  4. https://github.com/cartographer-project/cartographer
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值