• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

使用octomap_server将点云地图转化为八叉树地图和占据栅格地图

人工智能 lovely_yoshino 2826次浏览 0个评论

使用octomap_server创建八叉树地图和栅格地图

    • 说明
    • 问题1:点云与网格垂直
    • 问题2:八叉树显示不完整
    • 问题3:地面滤除

说明

Octomap 在ROS环境下实时显示Lego_loam使用教程两篇博文对如何从PCD创建PointCloud2点云、如何用octomap_server创建八叉树地图和栅格地图已经说的很详细了,但是我在使用时还是遇到了一些问题。

问题1:点云与网格垂直

我用深度相机得到点云地图后,按照Octomap 在ROS环境下实时显示去创建点云地图后发现点云和网格时垂直的

点云与网格垂直主要是因为我的相机坐标系定义为:z轴往前,x轴往左(不是常见的往右是因为我的图像采集时镜像了),y轴往下,RVIZ默认显示的是xy平面,改成显示xz平面就正常了
在这里插入图片描述

在这里插入图片描述另一种办法是像Lego_loam使用教程中那样对点云坐标做变换,绕x轴旋转90度,将z轴指向上方。

    Eigen::Affine3f transform = Eigen::Affine3f::Identity();
    transform.rotate(Eigen::AngleAxisf(-M_PI/2, Eigen::Vector3f(1,0,0)));
    pcl::transformPointCloud(cloud, cloud, transform);

我用-pi/2而非pi/2还是因为的坐标镜像问题。

第二种方法其实更好,因为从octomap_server的参数来看,它的坐标系是定义z轴向上的,它得到栅格地图也是默认投影到xy平面。

问题2:八叉树显示不完整

构建八叉树地图时发现地图显示不完整,地面没有显示出来

在这里插入图片描述原因是我的相机与地面之间是有一定高度,octomap_server中的pointcloud_min_z不应该设置为0,而应该取一定的负数范围

    <param name="pointcloud_max_z" value="1000" />
    <param name="pointcloud_min_z" value="-1000" />

地面就正常显示了
在这里插入图片描述

问题3:地面滤除

生成栅格地图后发现地面也被认为是占据状态了
在这里插入图片描述

原因是地面的点云也被投影了,应该把地面滤除掉,同样设置好pointcloud_min_z即可

<param name="pointcloud_max_z" value="1000" />
<param name="pointcloud_min_z" value="-0.2" />

在这里插入图片描述


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明使用octomap_server将点云地图转化为八叉树地图和占据栅格地图
喜欢 (0)

您必须 登录 才能发表评论!

加载中……