轻指弹 2025-09-11 15:28 采纳率: 22.2%
浏览 13

Cartographer点云数据建立3D图

在ros1(Noetic)中要如何使用Cartographer只根据激光雷达的点云数据建立3D图?
我目前使用的激光雷达是速腾16线激光雷达,可以读出数据,但是要怎么配置Cartographer才能进行3D建图,期望大概是下面这种效果

img

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-09-11 15:29
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    在ROS 1 (Noetic)中使用Cartographer根据激光雷达的点云数据(如速腾16线激光雷达)进行3D建图,需要对Cartographer进行适当的配置。由于Cartographer本身是为2D SLAM设计的,要实现3D建图,你需要使用Cartographer的3D版本,即 cartographer_ros3D 模块。


    ✅ 实现目标

    • 使用 速腾16线激光雷达(支持3D点云输出)
    • ROS Noetic 中使用 Cartographer 3D 进行 3D地图构建
    • 输出类似你提到的效果(3D点云地图)

    🧩 步骤概览

    1. 安装依赖和Cartographer

    确保你已经安装了ROS Noetic,并且安装了必要的依赖项:

    sudo apt-get install ros-noetic-cartographer*
    sudo apt-get install ros-noetic-cartographer-ros
    

    注意: Cartographer 3D 需要 cartographer_ros3D 版本,因此请确认是否已正确安装。


    2. 配置激光雷达的点云发布

    速腾16线激光雷达通常会通过 ROS 发布 /points/cloud 类型的点云消息。确保你的激光雷达驱动程序能够将点云数据发布到某个话题,例如:

    rostopic list | grep points
    # 应该能看到类似 /sensory/point_cloud 或 /velodyne_points
    

    如果未发布,请检查驱动配置或修改驱动代码以发布点云消息。


    3. 配置Cartographer 3D参数文件

    Cartographer 3D 使用的是 cartographer/configuration_files/ 中的 .lua 文件。你需要创建一个适合你激光雷达的配置文件。

    ✅ 示例:my_3d.lua

    include "cartographer/configuration_files/occupancy_grid.lua"
    
    options {
      map_builder = MAP_BUILDER,
      trajectory_builder = TRAJECTORY_BUILDER,
      num_background_threads = 4,
    
      use_trajectory_builder_3d = true,
    
      map_builder {
        num_submaps = 10,
        submap_width = 1.0,
        grid_options_2d {
          resolution = 0.05,
        },
        grid_options_3d {
          resolution = 0.1,
        },
      },
    
      trajectory_builder_3d {
        motion_filter {
          max_angle_radians = math.rad(1.0),
        },
        odometry_config {
          imu_gravity_constant = 9.81,
        },
        sensor_model {
          hit_probability = 0.55,
          miss_probability = 0.05,
        },
        range_data_inserter {
          insertion_length = 0.05,
        },
      },
    }
    

    重点说明:

    • use_trajectory_builder_3d = true:这是启用3D建图的关键设置。
    • grid_options_3d:用于控制3D地图的分辨率。
    • range_data_inserter:用于插入点云数据。

    4. 启动Cartographer节点

    使用 cartographer_ros 提供的 launch 文件启动 Cartographer 3D。

    ✅ 示例:cartographer_3d.launch

    <launch>
      <arg name="configuration_directory" default="$(find your_package)/config"/>
      <arg name="configuration_basename" default="my_3d.lua"/>
    
      <node name="cartographer_node" pkg="cartographer_ros" type="cartographer_node" args="
          -configuration_directory $(arg configuration_directory)
          -configuration_basename $(arg configuration_basename)
          -topic /points" />
      
      <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros" type="cartographer_occupancy_grid_node" args="
          -resolution 0.05"
          output="screen"/>
    </launch>
    

    重点说明:

    • -topic /points:指定你激光雷达发布的点云话题。
    • 如果你的点云话题不是 /points,请替换为实际的话题名。

    5. 启动并查看结果

    运行 launch 文件:

    roslaunch your_package cartographer_3d.launch
    

    然后使用 rviz 查看 3D 地图:

    rosrun rviz rviz
    

    在 RVIZ 中:

    • 添加 PointCloud2 显示器,选择你的点云话题(如 /points)。
    • 添加 OccupancyGrid 显示器,查看 2D 地图。
    • 可以尝试添加 Map 显示器查看 3D 地图(如果可用)。

    🧠 注意事项

    | 问题 | 解决方案 | |------|----------| | Cartographer 无法识别点云 | 确保点云话题正确,格式为 sensor_msgs/PointCloud2 | | 3D地图不清晰 | 调整 grid_options_3d 中的 resolutioninsertion_length | | 建图不稳定 | 检查 IMU 数据或使用更稳定的传感器输入 | | 需要多传感器融合 | 可以加入 IMU、GPS 等辅助信息提升精度 |


    ✅ 总结步骤(有序列表)

    1. 安装 Cartographer 和 ROS 依赖

      sudo apt-get install ros-noetic-cartographer*
      
    2. 确保激光雷达发布点云数据
      使用 rostopic list 检查 /points 或其他点云话题。

    3. 编写 Cartographer 3D 配置文件
      创建 my_3d.lua 并启用 use_trajectory_builder_3d = true

    4. 编写 launch 文件启动 Cartographer
      使用 cartographer_nodecartographer_occupancy_grid_node

    5. 使用 RVIZ 查看 3D 地图
      添加 PointCloud2OccupancyGrid 显示器。


    💡 参考资源


    如果你有具体的点云话题名称或配置文件内容,我可以进一步帮你调整配置!

    评论

报告相同问题?

问题事件

  • 创建了问题 9月11日