You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在RVIZ中通过octomap可视化UAV 3D LiDAR扫描及建图问题咨询

核心问题答复

完全可以通过设置GPS静态原点,配合octomap_server这类工具构建以该原点为基准的3D栅格地图,你现有的数据链路(GPS/姿态通过MAVLink获取、LiDAR点云发布为ROS PointCloud2)已经满足基础实现前提。

具体实现步骤
  • 第一步:设置GPS静态原点并完成坐标转换
    无人机起飞前,将当前地面点的GPS坐标(经纬高)设为静态原点,通过geodesy包的UTM转换函数,把后续所有实时GPS经纬高数据转换成相对原点的平面坐标系坐标。将ArduPilot输出的姿态数据(四元数/欧拉角)和相对坐标整合,发布/tf变换,具体是发布map->base_link的变换,其中map帧的原点就是你设置的GPS静态原点。
  • 第二步:点云预处理
    直接喂原始PointCloud2给octomap_server会有大量噪点影响地图精度,先完成以下处理:
    • 用pcl_ros包做直通滤波,裁剪掉无人机自身机身、螺旋桨产生的无效点云
    • 做运动畸变校正:如果你的LiDAR帧率低于10Hz,需要用同步的姿态数据插值校正点云扫描过程中无人机运动带来的畸变
    • 把校正后的点云帧转换到map坐标系下再发布给octomap_server
  • 第三步:octomap_server配置
    启动octomap_server节点时重点调整这几个参数:
    • resolution:根据你的避障需求设置,一般室外无人机场景设为0.1~0.5m,分辨率越高计算负载越大
    • frame_id:设为你定义的map帧,也就是GPS静态原点所在的坐标系
    • occupancy_min_z/occupancy_max_z:裁剪掉你飞行空域之外的点,减少无效计算
  • 第四步:障碍物规避对接
    构建好的Octomap会以/octomap_binary或者/occupied_cells_vis_array话题发布,你可以直接读取栅格的占据状态,在无人机前向10~30m的扇形区域做碰撞检测,输出规避指令给飞控即可
  • 第五步:远程可视化实现
    你可以在地面端运行ROS节点订阅/octomap、/tf、无人机状态话题,用RViz直接可视化,不需要额外开发可视化组件即可实时查看作业过程和地图构建进度
关键注意事项
  • 坐标转换误差控制:如果是RTK精度的GPS,相对坐标误差可以控制在cm级,满足避障需求;如果是普通GPS,要额外融合IMU数据减少漂移,避免地图出现重影
  • 时间同步问题:一定要确保GPS/姿态数据和LiDAR点云的时间戳严格对齐,不然会导致点云配准错误,地图出现大量虚警障碍物
  • 内存负载控制:飞行范围较大的时候不要保存全量点云地图,octomap的概率栅格本身已经做了压缩,如果还是负载过高,可以定期清理无人机后方已经飞过的区域的栅格数据
  • 原点漂移校验:飞行过程中定期比对当前GPS反算的相对原点坐标和里程计推算的坐标,偏差超过阈值的时候要做一次地图校正,避免累积漂移导致避障失效

内容的提问来源于stack exchange,提问作者Leandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 20:42:01