Ubuntu18.04使用octomap_server将点云地图转化为八叉树地图


运行环境

  • Linux:Ubuntu18.04
  • ros:Melodic

1. 下载相关功能包

安装octomap相关功能包

sudo apt-get install ros-melodic-octomap-ros 
sudo apt-get install ros-melodic-octomap-msgs
sudo apt-get install ros-melodic-octomap-server

安装octomap在rviz中的插件

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

2. octomap_server 功能包的使用

创建一个.launch文件,例如octomap_build.roslaunch文件

文件内容如下
这里使用的A-LOAM的例子来进行测试,A-LOAM的使用测试链接
其中主要的参数如下,相关参数的详细介绍可参考http://wiki.ros.org/octomap_server

  • /laser_cloud_map :为输入的点云话题名
  • /camera_init :为输入点云话题中 head.frame_id(点云的坐标系id)
<launch>
  <node pkg="octomap_server" type="octomap_server_node" name="octomap_server">
    <!-- 地图的分辨率(米) -->
    <param name="resolution" value="0.50" />

    <!-- 最大距离/深度分辨率(米) -->
    <!--param name="sensor_model/max_range" value="50.0" /-->
    
    <param name="latch" value="true" />

    <!-- max/min height for occupancy map, should be in meters -->
    <!-- octomap地图中最大最小的高度(米) -->
    <param name="pointcloud_max_z" value="1000" />
    <param name="pointcloud_min_z" value="-500" />


    <!-- 增量式构建地图时,需要提供输入的点云帧和静态全局帧之间的 TF 变换 -->
    <param name="frame_id" type="string" value="/camera_init" />

    <!-- 要订阅的点云主题名称 /laser_cloud_map -->
    <remap from="/cloud_in" to="/laser_cloud_map" />
  </node>
</launch>

3. octomap 与 A-LOAM 的测试使用

数据集名字:nsh_indoor_outdoor.bag,大小:780M左右
数据集下载地址:https://drive.google.com/file/d/1s05tBQOLNEDDurlg48KiUWxCp-YqYyGH/view

  • 运行rosbag play命令进行测试数据集,其中<YOUR_DATASET_FOLDER>是下载对应数据集包的文件位置,这里作者使用的是以上的数据集,读者可以使用其他数据集进行测试
  • 这里作者将第2点中写的octomap_build.roslaunch放在了A-LOAM功能包中的launch文件夹中
source /devel/setup.bash
roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch
rosbag play <YOUR_DATASET_FOLDER>/nsh_indoor_outdoor.bag
roslaunch aloam_velodyne octomap_build.roslaunch

  • 相关测试结果
    在打开的rviz中选择相关插件,并读取相关octomap话题
    选择OccupancyGrid插件,并在插件中选择octomap_full话题
    在这里插入图片描述
    在这里插入图片描述
  • 测试结果如下图所示
    在这里插入图片描述

<think>好的,用户想了解如何使用octomap_server进行二维操作,特别是配置教程或使用方法。我需要先回忆一下octomap_server的相关知识,然后结合现有引用中的信息,看看是否有相关的内容。 首先,octomap_server是ROS中用于处理3D点云地图的工具,但用户需要的是二维操作。这可能涉及到将3D数据转换为2D,比如生成占据栅格地图(Occupancy Grid Map)。根据引用[4],用户之前提到过将点云转换为Laserscan,这可能相关,因为Laserscan通常是2D的。 接下来,我需要确认octomap_server是否支持直接输出2D地图。查阅资料,octomap_server主要处理3D OctoMap,但可以通过参数配置来生成2D投影。例如,设置`project_complete_map`为true,这样会生成整个地图的2D投影。同时,可能需要调整分辨率参数,如`resolution`,但要注意在2D模式下可能需要不同的处理。 然后,用户可能需要将输出的2D地图与其他导航工具(如move_base)结合使用,这涉及到话题的发布。引用[4]中提到move_base需要输入是Laserscan,但octomap_server默认发布的是OccupancyGrid,所以可能需要使用map_server或其他工具将OccupancyGrid转换为适合的格式,或者直接在参数中设置octomap_server发布到正确的话题。 安装方面,引用[1]提到了安装map_server的命令,但octomap_server可能需要不同的包,比如ros-melodic-octomap-server或ros-melodic-octomap-ros。需要提醒用户安装正确的包。 参数配置方面,需要指导用户修改launch文件中的参数,例如设置最大高度、投影方式等,确保只处理2D数据。例如,设置`max_z`和`min_z`来限定高度范围,避免3D数据的干扰。 最后,可能需要转换点云数据到Laserscan,类似于引用[4]中的情况,使用pointcloud_to_laserscan包。这样可以将3D点云转为2D激光数据,再输入到octomap_server进行处理,或者直接让octomap_server生成2D地图供导航使用。 总结步骤应该是安装必要的包,配置参数文件,启动节点,并处理数据格式转换。同时,注意引用中的相关指令和转换方法,确保用户能正确操作。</think>要使用`octomap_server`进行二维地图操作,需通过参数配置将3D点云投影为2D占据栅格地图。以下是具体步骤及配置方法: --- ### **1. 安装依赖** 首先确保已安装`octomap_server`及相关ROS包: ```bash sudo apt-get install ros-melodic-octomap-server ros-melodic-octomap-ros ``` 若需将3D点云转换为2D激光扫描(如输入到导航栈),还需安装`pointcloud_to_laserscan`: ```bash sudo apt-get install ros-melodic-pointcloud-to-laserscan ``` 引用安装命令参考自类似ROS包安装方式[^1]。 --- ### **2. 配置Launch文件** 在ROS launch文件中配置`octomap_server`节点,关键参数如下: ```xml <node pkg="octomap_server" type="octomap_server_node" name="octomap_server"> <!-- 输入点云话题 --> <param name="frame_id" type="string" value="map" /> <param name="resolution" type="double" value="0.05" /> <!-- 2D投影参数 --> <param name="base_frame_id" type="string" value="base_link" /> <param name="height" type="double" value="0.1" /> <!-- 最大高度差 --> <param name="project_complete_map" type="bool" value="true" /> <!-- 完整投影 --> <param name="latch" type="bool" value="false" /> <!-- 过滤Z轴范围 --> <param name="filter_ground" type="bool" value="true" /> <param name="ground_filter/distance" type="double" value="0.1" /> <!-- 输入/输出话题 --> <remap from="cloud_in" to="/pointcloud2_input" /> <remap from="/projected_map" to="/map" /> </node> ``` --- ### **3. 生成2D占据栅格地图** - **输入数据**:确保输入的点云话题(如`/pointcloud2_input`)已正确发布。 - **输出话题**:`octomap_server`会发布2D占据栅格地图到`/map`(类型为`nav_msgs/OccupancyGrid`)。 - **参数说明**: - `resolution`:地图分辨率(单位:米)。 - `height`:允许的最大高度差,超出此范围的点将被忽略。 - `project_complete_map`:设为`true`以生成全局地图的2D投影。 --- ### **4. 与导航栈集成** 若需将2D地图输入到导航栈(如`move_base`),需确保`/map`话题与导航配置一致。若导航栈要求`/scan`输入(如引用[4]中提到的`/Laserscan`),可通过以下方式转换: ```xml <node pkg="pointcloud_to_laserscan" type="pointcloud_to_laserscan_node" name="pc2laser"> <remap from="cloud_in" to="/pointcloud2_input" /> <remap from="scan" to="/scan" /> <param name="range_max" type="double" value="10.0" /> <param name="target_frame" type="string" value="base_link" /> </node> ``` --- ### **5. 验证与调试** - **查看地图**:使用`rviz`订阅`/map`话题,检查2D占据栅格是否正确生成。 - **常见问题**: - 地图空白:检查输入点云是否包含有效数据,或调整`height`参数。 - 分辨率过低:增大`resolution`值(如0.1米)。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值