项目要用到八叉树库 Octomap 来构建地图,这里记录下安装、可视化,并启用带颜色的 Octomap 的过程。

一、Apt 安装 Octomap 库

如果你不需要修改源码,可以直接安装编译好的 octomap 库,记得把 ROS 版本「kinetic」替换成你用的:

sudo apt-get install ros-kinetic-octomap*

上面这一行命令等价于安装以下的 octomap 组件:

sudo apt-get install ros-kinetic-octomap ros-kinetic-octomap-mapping ros-kinetic-octomap-msgs ros-kinetic-octomap-ros ros-kinetic-octomap-rviz-plugins

注意:上面没有安装 ros-kinetic-octomap-server,原因是我要使用这个包来建图,并且需要修改它,所以在下一步我直接通过编译源码来安装它!

二、编译安装 OctomapServer 建图包

因为我要启用八叉树体素栅格的 RGB 颜色支持,需要修改源码,所以必须使用源码编译安装,过程如下:

2.1 创建编译用的工作空间

cd 你的一个目录/

# 创建工作空间
mkdir octomap_ws
cd octomap_ws/ # ROS 的工作空间必须包含 src 目录
mkdir src/ # 创建
catkin_make # 记得 source 环境变量
source devel/setup.zsh

2.2 下载编译源码

下载 octomap_server 源码到 src 文件夹中:

cd src/
git clone https://github.com/OctoMap/octomap_mapping.git

返回你的工作空间主目录,安装下依赖,然后开始编译:

cd ../

rosdep install octomap_mapping

catkin_make

编译过程基本没有报错,如果你遇到问题,直接复制错误信息浏览器搜索解决,然后启动测试的 launch:

roslaunch octomap_server octomap_mapping.launch

没问题的话应该可以用 rostopic list 看到一个 octomap_full 的话题:

有这个话题说明这个建图包可以正常工作啦:)

二、Rviz 可视化 Octomap

ROS 中提供了一个 Rviz 可视化 Octomap 的插件,如果没有安装使用下面的命令即可:

sudo apt-get install ros-kinetic-octomap-rviz-plugins

安装后启动 Rviz,直接添加一个八叉树占用网格的类型,第一个是带颜色的类型,第二个不带颜色:

建图节点启动后,选择话题名称为 octomap_full,即可显示出八叉树体素栅格,这是我的实验结果,我用的是第一个带颜色的类型:

我把点云和体素栅格一起显示了,所以会重叠。这里要注意的是,如果你的点云显示不出来,要检查下「Global Options」的「Fixed Frame」有没有设置正确,我是设置的是 Robosense 雷达的 frame_id:「rslidar」。

三、启用 ColorOctomap

默认编译的 octomap 不能显示颜色,要开启颜色的支持,需要 2 个步骤,第一步编辑 OctomapServer.h 文件:

vim octomap_mapping/octomap_server/include/octomap_server/OctomapServer.h

打开下面 COLOR_OCTOMAP_SERVER 宏的注释即可:

// switch color here - easier maintenance, only maintain OctomapServer.
// Two targets are defined in the cmake, octomap_server_color and octomap_server. One has this defined, and the other doesn't
// 打开这个注释
#define COLOR_OCTOMAP_SERVER

然后重新编译一遍源码:

cd octomap_ws/

catkin_make

第二步是在使用时,在 launch 文件中禁用 height_map,启用 colored_map,这个配置是我阅读源码查找的,因为官网文档很久没有更新了,一些参数配置方法需要通过阅读源码才能知道:

<param name = "height_map" value = "false" />
<param name = "colored_map" value = "true" />

比如以下是我实验用的 launch 文件:

<launch>
<node pkg="octomap_server" type="octomap_server_node" name="octomap_server"> <!-- resolution in meters per pixel -->
<param name="resolution" value="0.10" /> <!-- name of the fixed frame, needs to be "/map" for SLAM -->
<!--
增量式构建地图时,需要提供输入的点云帧和静态全局帧之间的 TF 变换
-->
<param name="frame_id" type="string" value="world" /> <param name = "height_map" value = "false" />
<param name = "colored_map" value = "true" /> <!-- topic from where pointcloud2 messages are subscribed -->
<!-- 要订阅的点云主题名称 /fusion_cloud -->
<remap from="/cloud_in" to="/fusion_cloud" />
</node>
</launch>

我设置了八叉树帧的 frame 为 rslidar,并将融合的点云话题 /fusion_cloud 作为节点的输入,我没有提供 TF,因为目前只是做了一个单帧的体素栅格构建,效果如下:

我在 B 站录了个简短的视频,可以去看下初步的效果:ROS 单帧带颜色八叉树 Octomap 地图构建实验

ROS 八叉树地图构建 - 安装 octomap 和 octomap_server 建图包!的更多相关文章

  1. ROS 八叉树地图构建 - 使用 octomap_server 建图过程总结!

    构建语义地图时,最开始用的是 octomap_server,后面换成了 semantic_slam: octomap_generator,不过还是整理下之前的学习笔记. 一.增量构建八叉树地图步骤 为 ...

  2. ROS 八叉树地图构建 - 给 octomap_server 增加半径滤波器!

    为了在每帧点云中滤除噪声点,选择了半径滤波器,也用高斯滤波器测试过,但是没有半径效果好,这里记录下在 octomap_server 中增加半径滤波器的步骤,并在 launch 中配置滤波器参数. 一. ...

  3. ROS中利用V-rep进行地图构建仿真

    V-rep中显示激光扫描点  在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图.然后在Model browser→comp ...

  4. Slam(即时定位与地图构建) 知识篇

    Slam即时定位与地图构建 技术解释 同步定位与地图构建(SLAM或Simultaneous localization and mapping)是一种概念:希望机器人从未知环境的未知地点出发,在运动过 ...

  5. 即时定位与地图构建SLAM(Simultaneous Localization and Mapping)

    SLAM 即时定位与地图构建SLAM(Simultaneous Localization and Mapping) 参考链接: 视觉SLAM漫谈,http://www.cnblogs.com/gaox ...

  6. Ros使用Arduino 1安装Arduino IDE

    安装Arsuino IDE sudo apt-get install arduino 设置库文件路径 在使用ROS的库文件时,必须在代码的开头包括: #include <ros.h> 接下 ...

  7. ORB-SLAM2初步--局部地图构建

    一.局部地图构建简介 为什么叫“局部”地图构建,我的理解是这个线程的主要任务是像地图中插入关键帧(包括地图点等信息),以及需要进行LocalBA优化一个局部地图,这是相对于回环检测时进行的全局优化来说 ...

  8. 软件篇-03-基于ORB_SLAM2手写SLAM稠密地图构建实现

    本文使用的方法不是从内部修改ORBSLAM2源码以获取稠密点云,而是先从ZED2 sdk获取以摄像头坐标系为描述的三维点云/作为点云地图的一个子集,然后融合IMU与ORB_SLAM2进行实时定位,通过 ...

  9. windos上安装jenkins部署springboot的jar包(未运行,只是在打包并上传linux成功了)

    流程: 从linux上的svn拉取代码,到本地(windos)jenkins的工作区间的workspace,然后通过构建,打包,部署到linux上 环境: windos上安装:maven jdk je ...

随机推荐

  1. electron代码审计

    解包 Electron跨平台程序破解https://www.52pojie.cn/thread-563895-1-1.html Electron封装的跨平台程序破解的一般思路: 安装npm(至于如何安 ...

  2. Ethical Hacking - GAINING ACCESS(17)

    CLIENT SIDE ATTACKS - Backdooring exe' s Download an executable file first. VEIL - FRAMEWORK A backd ...

  3. Ethical Hacking - GAINING ACCESS(14)

    CLIENT SIDE ATTACKS Protecting against smart delivery methods Ensure you're not being MITM'ed -> ...

  4. day10:函数的实参&形参

    函数的参数 (参数:配合函数运算的值)参数:      (1)形参:形式参数,在函数的定义处      (2)实参:实际参数,在函数的调用处 形参: 普通形参(位置) , 默认形参 , 普通收集形参 ...

  5. python多进程之multiprocessing

    什么是多进程? 简单的理解:单板上运行的一个程序就是一个进程.进程是操作系统分配资源的最小单位,不同的进程之间资源不共享,进程间通信需要使用特定的方式.python提供了自带的multiprocess ...

  6. 《Head First 设计模式》:工厂方法模式

    正文 一.定义 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类. PS:在设计模式中,"实现一个接口"泛指实现某个超类型(可 ...

  7. 题解 洛谷 P4694 【[PA2013]Raper】

    首先考虑题目的性质,不难发现光盘的花费是一个凸函数.当生产 \(0\) 张光盘时,其花费为 \(0\),随着光盘生产数的增加,最优情况肯定是先选择工厂便宜的时刻,所以花费会增长越来越快,因此其为一个下 ...

  8. 扩展BSGS

    \(BSGS\) 求解\(a^x\equiv b\pmod p\),且\(a\)与\(p\)互质 由\(a^{φ(p)}\equiv1 \pmod p\)和\(a^0\equiv 1\pmod p\) ...

  9. OKex平台如何使用谷歌身份验证?

    打开OK交易所官网,找到谷歌身份验证器的开启界面 登陆后点击右上角头像-账户和安全 然后[安全设置]里出现“谷歌验证”的位置,点击开启按钮,到了二维码和密钥显示的界面 我们不使用谷歌身份验证器,因为需 ...

  10. spring tx——@EnableTransactionManagement

    @EnableTransactionManagement import了TransactionManagementConfigurationSelector,而TransactionManagemen ...