一、LVI-SAM的节点关系

运行LVI-SAM,并打开rqt_graph,查看节点关系如图所示:

激光雷达原始数据的topic为/points_raw,观察发现它仅被imageProjection节点订阅,因此我们分析这个节点。

imageProjection节点订阅三个节点:points_raw节点、imu_raw节点、和imu_propagate_ros节点,并被cloud_info节点订阅。(rviz可视化部分暂不考虑)

可以猜想出,imageProjection节点的主要功能是将点云投影变成类似于图片的格式,进行一些预处理方便后续的slam过程。

二、主函数

int main(int argc, char** argv)
{ros::init(argc, argv, "lidar");本node的主要工作都体现在ImageProjection的构造函数当中ImageProjection IP;ROS_INFO("\033[1;32m----> Lidar Cloud Deskew Started.\033[0m");创建三个相同的线程,在A线程忙碌的时候启用B线程,A,B线程都忙碌的时候启用C线程ros::MultiThreadedSpinner spinner(3);spinner.spin();return 0;
}

三、ImageProjection类

3.1 父类ParamServer类

ParamServer是一个重要的类,它的子类包括:

FeatureExtractionIMUPreintegrationImageProjectionmapOptimization

它的成员包括:

上述ros参数均可以根据名称判断其含义,且与param_lidar.yaml参数文件紧密关联。

3.2 ImageProjection类的成员

3.3 ImageProjection类的构造函数

在主函数当中,主要依靠的就是ImageProjection类的构造函数,因此重点分析它,结合以上ImageProjection类成员变量和成员函数的解读可以很容易看懂其过程。

ImageProjection():deskewFlag(0)       // 去畸变标志位置零{// 订阅imu原始数据,回调函数负责将测量信息坐标变换到激光雷达并存储到队列subImu        = nh.subscribe<sensor_msgs::Imu>        (imuTopic, 2000, &ImageProjection::imuHandler, this, ros::TransportHints().tcpNoDelay());// 订阅Odom原始数据,此Odom来自于VIS,可能早于点云采集时间,也可能稍晚于点云采集时间,回调函数负责将位姿信息存放到队列subOdom       = nh.subscribe<nav_msgs::Odometry>      (PROJECT_NAME + "/vins/odometry/imu_propagate_ros", 2000, &ImageProjection::odometryHandler, this, ros::TransportHints().tcpNoDelay());// 订阅原始点云,回调函数负责检查、获取对齐的imu帧旋转矩阵、获取相邻帧的位姿变换、点云投影成图片从而使点云有序化,最后把去畸变有序化点云和自定义格式点云发布出去subLaserCloud = nh.subscribe<sensor_msgs::PointCloud2>(pointCloudTopic, 5, &ImageProjection::cloudHandler, this, ros::TransportHints().tcpNoDelay());// 发布处理过后的点云和自定义格式的点云pubExtractedCloud = nh.advertise<sensor_msgs::PointCloud2> (PROJECT_NAME + "/lidar/deskew/cloud_deskewed", 5);pubLaserCloudInfo = nh.advertise<lvi_sam::cloud_info>      (PROJECT_NAME + "/lidar/deskew/cloud_info", 5);// 为下一次处理分配内存空间并重置所有参数allocateMemory();resetParameters();// 设置控制台输出信息pcl::console::setVerbosityLevel(pcl::console::L_ERROR);}

本文仅做学术分享,如有侵权,请联系删文。

3D视觉精品课程推荐:

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

11.自动驾驶中的深度学习模型部署实战

12.相机模型与标定(单目+双目+鱼眼)

13.重磅!四旋翼飞行器:算法与实战

14.ROS2从入门到精通:理论与实战

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

由 粗 到 精 学 习 LVI-SAM: imageProjection模块相关推荐

  1. 召回粗排精排-级联漏斗(下)

    文 | 水哥 源 | 知乎 saying 召回区分主路和旁路,主路的作用是个性化+向上管理,而旁路的作用是查缺补漏. 推荐系统的前几个操作可能就决定了整个系统的走向,在初期一定要三思而后行. 做自媒体 ...

  2. 召回粗排精排-级联漏斗(上)

    文 | 水哥 源 | 知乎 saying 1. 把点击多的item曝光提升是推荐模型的基本能力,也是基本要求.后验不好的曝光提高也可能是好模型,后验好的曝光不提高,可以开除推荐模型了 2. 在起量阶段 ...

  3. 自动驾驶车辆在结构化场景中基于HD-Map由粗到精语义定位

    点云PCL免费知识星球,点云论文速读. 文章:Coarse-to-fine Semantic Localization with HD Map for Autonomous Driving in St ...

  4. Deep Manta:单目图像下2d到3d由粗到精的多任务网络车辆分析

    原文首发于微信公众号「3D视觉工坊」--Deep Manta:单目图像下2d到3d由粗到精的多任务网络车辆分析 外文原文:Deep manta: A coarse-to-fine many-task ...

  5. 召回 粗排 精排,如何各司其职?

    文 | 水哥 源 | 知乎 saying 1.AB测试几乎是系统改进的不二法则,算法做AB,开发做AB,产品做AB,运营更要做AB 2.召回有点像一个甩锅侠,我不管我给的准不准,我就管我把潜在的能投的 ...

  6. 简 易 版 线 程 池 模 型 学 习

    简 易 版 线 程 池 模 型 学 习 1.简易版线程池流程 1.初始化线程池 1.初始化队列, 队列头, 队列尾初始化, 队列能力初始化( 队列长度),队列锁 初始化线程池条件变量,给子线程赋入口函 ...

  7. 简 易 版 的 进 程 池 模 型 学 习

    简 易  版 的 进 程 池 模  型 学 习 1.进程池流程 父进程流程 第一步: make_child 初始化子进程 循环创建子进程,并初始化父进程的子进程管理结构体数组 child, 通过 so ...

  8. CVPR 2020 | 北航提出:通过由粗到精特征自适应进行跨域目标检测,表现SOTA!

    性能优于PDA.MDA和SWDA等网络. 作者团队:北京航空航天大学 1 引言 近年来,在基于深度学习的目标检测中见证了巨大的进步.但是,由于domain shift问题,将现成的检测器应用于未知的域 ...

  9. 学 习 中 的 思 考

    学 习 中 的 思 考                                  海风    学习计算机知识常常让人陷入无知的恐惧中,过去打破沙堡问到底的精神在这里要有所节制了,我们把握好一个 ...

最新文章

  1. ios 设置tableview左滑删除按钮的相关属性
  2. (C++)1009 Product of Polynomials
  3. python爬虫代码1000行-Python 你见过三行代码的爬虫吗
  4. phantomjs介绍
  5. 7-19上午刷题未知点集合
  6. perl语言入门第七版中文_网站编程语言的选择
  7. Attributes.Add用途与用法
  8. 阿里沈询:分布式事务原理与实践
  9. 为什么 Rust 连续 4 年获「最受喜爱编程语言」?
  10. ReactNative 启动js server报错:Metro Bundler can't listen on port 8081
  11. VS 2005 命令行cl编译配置 Notepad++设置
  12. visual studio C++冒号:与双冒号::的使用说明
  13. 如何计算ROI(一)
  14. 今日头条ajax技术内as ,cp,_cp_signature参数分析、破解及python爬取频道数据
  15. 第一次作为面试官的感悟
  16. python合成心形_python如何绘制心形
  17. 初步使用Arduino
  18. 虚拟主播也带货?直播电商的变与不变
  19. 封装 发送socket api遇到的坑(涉及数据格式转换)
  20. 关键数据结构 -- sk_buff

热门文章

  1. nginx服务器的负载均衡和动静分离(未完)
  2. LeetCode 21. Merge Two Sorted Lists
  3. “惊群”,看看nginx是怎么解决它的
  4. Liferay标签(一):liferay-ui:search-container(1)
  5. C#读取excel文件数据丢失问题
  6. 培训沙龙准备事项-看板记录
  7. Nginx+keepalived 实现高可用,防盗链及动静分离配置
  8. 你管这破玩意儿叫负载均衡?
  9. 监控告警满飞天,Netflix 运维如何做到在家睡到自然醒...
  10. 打造全球最大规模 Kafka 集群,Uber 的多区域灾备实践