ROS 八叉树地图构建 - 安装 octomap 和 octomap_server 建图包!
项目要用到八叉树库 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_mappingcatkin_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
,这个配置是我阅读源码查找的,因为官网文档很久没有更新了,一些参数配置方法需要通过阅读源码才能知道:
比如以下是我实验用的 launch 文件:
我设置了八叉树帧的 frame 为
rslidar
,并将融合的点云话题 /fusion_cloud
作为节点的输入,我没有提供 TF,因为目前只是做了一个单帧的体素栅格构建,效果如下:文章图片
我在 B 站录了个简短的视频,可以去看下初步的效果:ROS 单帧带颜色八叉树 Octomap 地图构建实验
【ROS 八叉树地图构建 - 安装 octomap 和 octomap_server 建图包!】
文章图片
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- java中如何实现重建二叉树
- 种树郭橐驼传(文言句式+古今异义+词类活用+通假字)
- 白杨树
- 08黑龙江迟淑荣弯柳树网络学院第五期学习赵宗瑞老师主讲的(传统文化与身心健康)教育体系心得体会
- [原创]能见沂山一棵树,胜读十年无用书!
- 涵养字外功
- 2018.07.07《刺杀骑士团长》村上春树
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- 撒哈拉沙漠-三毛