乐趣区

关于机器人:ROS-八叉树地图构建-安装-octomap-和-octomapserver-建图包

我的项目要用到八叉树库 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 地图构建试验

退出移动版