lio-sam中点云地图保存

2023-05-16

src/save_map.srv 中有如下的定义

float32 resolution                                                                                                                                              
string destination
---
bool success

注意 --- 下面指的是feedback,

接下来看save_map这个服务是如何写的

首先是创建 save_map这个 server

  srvSaveMap  = nh.advertiseService("lio_sam/save_map", &mapOptimization::saveMapService, this);          

接下来主要就是看saveMapService这个 callback函数


  bool saveMapService(lio_sam::save_mapRequest& req, lio_sam::save_mapResponse& res) 
    {
      string saveMapDirectory;
 
      cout << "****************************************************" << endl;
      cout << "Saving map to pcd files ..." << endl;
      //判断参数中是否传入了  destination.
      if(req.destination.empty()) saveMapDirectory = std::getenv("HOME") + savePCDDirectory;
      else saveMapDirectory = std::getenv("HOME") + req.destination;
      cout << "Save destination: " << saveMapDirectory << endl;
      //上面这几句刚好解了为何生成的地面是在home下面放着的
      // create directory and remove old files;
      // 删除老的文件,代码里面执行终命令
      int unused = system((std::string("exec rm -r ") + saveMapDirectory).c_str());
      unused = system((std::string("mkdir -p ") + saveMapDirectory).c_str());
      // save key frame transformations
      // 存储关键桢的轨迹和pose信息.
      pcl::io::savePCDFileBinary(saveMapDirectory + "/trajectory.pcd", *cloudKeyPoses3D);
      pcl::io::savePCDFileBinary(saveMapDirectory + "/transformations.pcd", *cloudKeyPoses6D);
      // extract global point cloud map
      // global的点去其实就是每桢的信息根据pose拼接起来的.
      pcl::PointCloud<PointType>::Ptr globalCornerCloud(new pcl::PointCloud<PointType>());
      pcl::PointCloud<PointType>::Ptr globalCornerCloudDS(new pcl::PointCloud<PointType>());  //进行下采样之后的,因为数据可能会比较大.
      pcl::PointCloud<PointType>::Ptr globalSurfCloud(new pcl::PointCloud<PointType>());
      pcl::PointCloud<PointType>::Ptr globalSurfCloudDS(new pcl::PointCloud<PointType>());  //下采样后的.
      pcl::PointCloud<PointType>::Ptr globalMapCloud(new pcl::PointCloud<PointType>());
 
      //点去拼接
      for (int i = 0; i < (int)cloudKeyPoses3D->size(); i++) {
          //这里的变换函数实际上就是 P_w = T*P_c, 一个坐标系的转换。即从lidar的ego坐标系到以出发点为原点的世界坐标系.
          *globalCornerCloud += *transformPointCloud(cornerCloudKeyFrames[i],  &cloudKeyPoses6D->points[i]);
          *globalSurfCloud   += *transformPointCloud(surfCloudKeyFrames[i],    &cloudKeyPoses6D->points[i]);
          cout << "\r" << std::flush << "Processing feature cloud " << i << " of " << cloudKeyPoses6D->size() << " ...";
      }    
 
        //判断是否传入了resolution这个参数,这个参数是用来进行下采样的,即体素的size大小。
      if(req.resolution != 0)
      {    
        cout << "\n\nSave resolution: " << req.resolution << endl;
 
        // down-sample and save corner cloud
        downSizeFilterCorner.setInputCloud(globalCornerCloud);
        downSizeFilterCorner.setLeafSize(req.resolution, req.resolution, req.resolution);
        downSizeFilterCorner.filter(*globalCornerCloudDS);
        pcl::io::savePCDFileBinary(saveMapDirectory + "/CornerMap.pcd", *globalCornerCloudDS);
        // down-sample and save surf cloud
        downSizeFilterSurf.setInputCloud(globalSurfCloud);
        downSizeFilterSurf.setLeafSize(req.resolution, req.resolution, req.resolution);
        downSizeFilterSurf.filter(*globalSurfCloudDS);
        pcl::io::savePCDFileBinary(saveMapDirectory + "/SurfMap.pcd", *globalSurfCloudDS);
      }    
      else 
      {    
        // save corner cloud
        pcl::io::savePCDFileBinary(saveMapDirectory + "/CornerMap.pcd", *globalCornerCloud);
        // save surf cloud
        pcl::io::savePCDFileBinary(saveMapDirectory + "/SurfMap.pcd", *globalSurfCloud);
      }    
 
      // save global point cloud map
      // 因此从这里来看,其实global的地图,就是global的corner与global的surface的拼接.
      *globalMapCloud += *globalCornerCloud;
      *globalMapCloud += *globalSurfCloud;
 
      int ret = pcl::io::savePCDFileBinary(saveMapDirectory + "/GlobalMap.pcd", *globalMapCloud);
      res.success = ret == 0;
 
      downSizeFilterCorner.setLeafSize(mappingCornerLeafSize, mappingCornerLeafSize, mappingCornerLeafSize);
      downSizeFilterSurf.setLeafSize(mappingSurfLeafSize, mappingSurfLeafSize, mappingSurfLeafSize);
 
      cout << "****************************************************" << endl;
      cout << "Saving map to pcd files completed\n" << endl;
 
      return true;
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lio-sam中点云地图保存 的相关文章

  • lvi-sam的深度匹配策略

    在lvi sam中 xff0c 作者通过视觉处理的时候 xff0c 利用lidar的深度信息 xff0c 得到了更稳定的估计 那在代码里是怎么实现的呢 xff1f 一起来看看看呗 1 在lvi sam的feature tracker nod
  • SAM-Segment Anything Model进行单张图片的检测记录

    一 代码和模型下载 下载链接 GitHub facebookresearch segment anything 将代码下载并解压到一个没有中文的路径下 页面往下滑找到需要下载的模型 nbsp 这里提供了三个模型 vit b的大小是358m
  • lio-sam中点云地图保存

    在 src save map srv 中有如下的定义 float32 resolution string destination bool success 注意 下面指的是feedback xff0c 接下来看save map这个服务是如何
  • LIO-SAM论文翻译

    摘要 我们提出了一个通过smoothing and mapping实现的紧耦合激光惯性里程计框架 xff0c LIO SAM xff0c 能够取得高精度 实时的移动机器人的轨迹估计和地图构建 LIO SAM基于因子图构建 xff0c 把多个
  • Ubuntu20.04部署编译LVI-SAM

    该动图来自LVI SAM开源地址 xff08 https github com TixiaoShan LVI SAM xff09 1 写在开头 1 1 为何诞生此文 近期在学习SLAM相关知识 xff0c 拜读了此篇经典论文LVI SAM
  • ROS-3DSLAM(二)lvi-sam项目认识

    2021SC 64 SDUSC xff08 二 xff09 lvi sam项目认识 一 SLAM简介 SLAM是Simultaneous Localization and Mapping xff08 同时定位 43 建图 xff09 独立的
  • lio-sam中雅克比推导

    lio sam做的是scan map xff0c 点变到世界系下 xff0c 优化本帧在是世界系下的位姿 xff0c 和loam有所不同 符号 xff1a 本帧特征点云 xff08 相对机体系 xff09 P s c a
  • fast lio测试

    fast lio2代码编译及运行 编译 fast lio2仓库地址 一 安装依赖 ubuntu18 43 ros环境下 xff0c pcl和eigen可默认使用ros自带版本 xff0c 所以只需安装 livox驱动包 livox ros
  • 视觉大模型 | SEEM:比SAM更强!

    作者 派派星 编辑 CVHub 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 语义分割 技术交流群 Title Segment Everything Everywher
  • 运行LIO-SAM,[lio_sam_imuPreintegration-2] process has died,[lio_sam_mapOptmization-5] process has died

    报错图例 解决办法 span class token builtin class name cd span usr local lib span class token function sudo span span class token
  • LIO-SAM中的mapOptmization

    前言 最近在学习LIO SAM源码的时候 xff0c 发现LIO SAM这套代码调用了比较多库的内置API xff0c 里面涉及的一些细节也比较多 xff0c 整个工程还是比较清晰的 xff0c 值得学习 xff01 LIO SAM这个框架
  • 万物分割SAM使用教程

    文章目录 安装 使用 全图分割 点 框 完整代码 原理篇 安装 创建虚拟环境 conda create n sam python 3 8 激活环境 conda activate sam 下载代码 git clone git github c
  • 一键分块,轻松拼图!使用Segment Anything让你的设计更加高效!

    目录 第一步 第二步 第三步 第四步 如果你是一名设计师或者摄影爱好者 那么你一定经常需要将图片分割成不同的块 以便在不同的场合下使用 例如 在网页设计中 你可能需要将图片分割成不同的块 以便在不同的区域中使用 而分块的难度不小 需要一定的
  • 【SAM模型超级进化】MobileSAM轻量化的分割一切大模型出现,模型缩小60倍,速度提高40倍,效果不减

    目录 前言 1 研究背景 2 模型改进思路与对比说明 2 1 MobileSAM与SAM速度对比 2 2 MobileSAM与SAM不同分割结果对比 3 模型使用说明 3 1 一键全景分割代码示例 3 2 提示点分割代码示例 4 总结 论文
  • RNA-seq——三、使用Hisat2进行序列比对

    步骤 1 下载对应的index 2 序列比对 3 samtools 将sam文件转为bam文件 4 将bam文件载入IGV 为什么要比对 https www jianshu com p 681e02e7f9af Jimmy老师主要演示了四种
  • 论文解读:Personalize Segment Anything Model with One Shot

    发表时间 2023 5 4 项目地址 https github com ZrrSkywalker Personalize SAM 体验地址 https huggingface co spaces justin zk Personalize
  • 如何使用 localstack 部署 SAM 堆栈?

    我已经编写了一个 SAM 堆栈 并且可以在 AWS 上构建 打包和部署它 我还可以使用 start local 或 invoke 来测试 现在我需要测试其他 AWS 资源 我已将这些资源添加到我的 SAM 模板中 它在 AWS 上运行良好
  • Kotlin 推荐使用 SAM 注销监听器的方法

    所以我有一个交互器 它使用 Realm 执行插入操作 然后使用 RealChangeListener 通知插入已完成 它是这样的 fun insertCar item Car realm doInTransaction val car Ca
  • 多功能 SAM 模板的推荐项目结构

    我有一个新项目 需要相对少量的服务 可能是 10 个或更少 因此将每个服务放在单独的项目存储库中并不经济 每项服务都将通过 SAM 模板定义为 AWS Serverless Function 我的问题是 组织或构建这样一个项目的推荐方法是什
  • 今天从 GitHub 操作构建 SAM 突然失败:模块“lib”没有属性“OpenSSL_add_all_algorithms”

    昨天 我的 SAM 构建正在使用以下 GitHub 操作 今天突然开始失败并出现错误 AttributeError 模块 lib 没有属性 OpenSSL add all algorithms 经我验证 SAM 模板没有任何错误 还有其他人

随机推荐

  • Cartographer(三)思岚雷达rplidar ros驱动使用报错与解决

    0 参考 https github com Slamtec rplidar ros issues 5 https github com Slamtec rplidar ros issues 5 https github com Slamte
  • 零代码入门GitHub,图形化交互让你轻松存代码 | 附Git GUI推荐

    鱼羊 发自 凹非寺 量子位 报道 公众号 QbitAI 传说 xff0c 程序员遇到火灾时有三个注意事项 xff1a 真的不能直接跑路吗 Git是目前世界上最流行的分布式版本控制系统 xff0c 用上了它 xff0c 就不必再面对这样的惨剧
  • OBS录课时的参数设置

    OBS Studio是一款功能强大的免费开源软件 xff0c 无广告 录屏只是它的一部分功能 xff0c 对于需要录制屏幕又要录制摄像头的也很适合 xff0c 有不少人将它用于直播 下面介绍我在用OS录制在线课程内容时 xff0c 如何进行
  • MAVLink协议的移植

    mavlink协议被大众知晓应该是PX4项目发起之后 xff0c 随着开源飞控神器PX项目进入国内 本次就只分析移植过程中的问题 xff0c 协议具体内容及其他知识只稍作带过 xff0c 有时间再更新 mavlink的源码有官方的代码生成器
  • python函数变量的用法

    如果想要在一个函数内部来修改外部变量的值 有下面四种方法 a gt 通过返回值赋值 b gt 使用全局变量 c gt 修改list或dict对象的内部元素 d gt 修改类的成员变量 span class token comment ret
  • python常用模块大全

    1 time模块 span class token keyword import span time span class token operator span 一 span class token operator span span
  • 关于自定义比较函数 usort 如何使用 类中的方法

    关于自定义比较函数 usort xff0c 如果直接使用函数 xff0c 是 usort arr 34 yourfunction 34 如果要使用类中的自定义方法 xff0c 则用以下方式 xff1a lt php SortTest 64
  • Python软件编程等级考试四级——20220618

    Python软件编程等级考试四级 20220618 理论单选题判断题 实操第一题第二题第三题 理论 单选题 1 有如下Python程序 xff0c 包含lambda函数 xff0c 运行该程序后 xff0c 输出的结果是 xff1f g s
  • docker启动带xfce桌面和rdp服务的ubuntu

    docker run d p 3389 3389 scottyhardy docker remote desktop 默认用户名ubuntu xff0c 密码ubuntun https hub docker com r scottyhard
  • 10张图带你深入理解Docker容器和镜像

    编者的话 本文用图文并茂的方式介绍了容器 镜像的区别和Docker每个命令后面的技术细节 xff0c 能够很好的帮助读者深入理解Docker 扫VX 领Java资料 xff0c 前端 xff0c 测试 xff0c python等等资料都有
  • 13款Linux安全运维必备的实用工具

    本文介绍几款 Linux 运维比较实用的工具 xff0c 希望对 Linux 运维人员有所帮助 1 查看进程占用带宽情况 Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽 下载 xff1a ht
  • ros学习(六):geometry_msgs消息类型

    一 geometry msgs Pose 消息类型 http docs ros org en melodic api geometry msgs html msg Pose html http docs ros org en melodic
  • ISO 11519-2与ISO 11898-3之间的关系

    ISO 11519由以下部分组成 xff0c 总称 道路车辆 低速串行数据通信 xff1a Part 1 xff1a General and definitions 概述和定义 Part 2 xff1a Low speed controll
  • 《Autosar从入门到精通-实战篇》总目录_培训教程持续更新中...

    目录 一 Autosar入门篇 xff1a 1 1 DBC专题 xff08 共9篇 xff09 1 2 ARXML专题 xff08 共35篇 xff09 1 2 1 CAN Matrix Arxml xff08 共28篇 xff09 1 2
  • 【MCAL_CANDriver】-1.3-FullCAN和BasicCAN的差异及配置使用

    点击返回 Autosar MCAL高阶配置 总目录 目录 1 什么是FullCAN和BasicCAN 1 1 FullCAN Basic CAN HRH区别 1 2 FullCAN Basic CAN HTH区别 1 3 FullCAN和B
  • ROS学习1

    1 安装ros 我这里使用的是ros melodic这个版本 xff0c 具体安装可以参考其它教程 管理环境 printenv grep ROS 得到 ROS DISTRO 61 melodic ROS ETC DIR 61 opt ros
  • ROS学习1

    1 安装ros 我这里使用的是ros melodic这个版本 xff0c 具体安装可以参考其它教程 管理环境 printenv grep ROS 得到 ROS DISTRO 61 melodic ROS ETC DIR 61 opt ros
  • ubuntu18.04使用apt安装python3.7

    sudo apt update sudo apt install software properties common sudo add apt repository ppa deadsnakes ppa sudo apt install
  • c++读取自定义点云pcd文件

    之前查读取pcd的文件 xff0c 大多数是用python的open3d来进行读取 xff0c 但是这样读取到的信息 xff0c 好像只能够得到 pcd points 和pcd colors 但是如果想要把pcd中的信息都拿到呢 xff0c
  • lio-sam中点云地图保存

    在 src save map srv 中有如下的定义 float32 resolution string destination bool success 注意 下面指的是feedback xff0c 接下来看save map这个服务是如何