首页 > 其他分享 >由 粗 到 精 学 习 LVI-SAM:imageProjection模块

由 粗 到 精 学 习 LVI-SAM:imageProjection模块

时间:2022-10-09 22:00:17浏览次数:49  
标签:SAM ImageProjection imageProjection imu 点云 线程 ros LVI 节点


一、LVI-SAM的节点关系

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

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_3d

激光雷达原始数据的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是一个重要的类,它的子类包括:


FeatureExtraction
IMUPreintegration
ImageProjection
mapOptimization

它的成员包括:

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_点云_02

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_自动驾驶_03

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_自动驾驶_04

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_点云_05

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

3.2 ImageProjection类的成员

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_点云_06

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_自动驾驶_07

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_自动驾驶_08

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_3d_09

由 粗 到 精 学 习 LVI-SAM:imageProjection模块_3d_10

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);
}

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


由 粗 到 精 学 习 LVI-SAM:imageProjection模块_点云_11

标签:SAM,ImageProjection,imageProjection,imu,点云,线程,ros,LVI,节点
From: https://blog.51cto.com/u_14439393/5741724

相关文章

  • MyISAM 和 InnoDB 索引实现
     MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是......
  • AudioMixer中是如何决定track是否需要resample
    AudioMixer中是如何决定track是否需要resample?AudioMixer内部有成员变量mSampleRate和mTracks,Track对象内部有个成员变量sampleRate,在MixerThread进行prepareTracks_l检......
  • conflicts with existing, non-compatible bean definition of same name and class
    事情是这样的我生成了一个crud文件然后就  报错是这样的我以为是小问题重名了嘛    然后我就找  这不是对的嘛   我深呼吸一口气去mavencle......
  • 如何利用CHtmlView类实现IE“查看->源文件”命令?
                                                               何志丹一,新建一个单文档工程WatchSourceFile......
  • Troch的Upsample模块
    参考:https://mp.weixin.qq.com/s/Sp9K_Xl5eJDy-D_yiqfVcQ讲解upsample参数下面这个图很重要:所以在使用bilinear插值的时候,需要将align_coners参数设置为True。常用......
  • centos7中sambamba软件的安装
     001、系统[root@localhost~]#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core) 002、创建python2.7环境[root@localhost~]#condacreate-n......
  • ubuntu下samba的配置和使用
    Samba服务器在两种不同操作系统间架起了一座桥梁,使Linux系统和Windows系统之间能够通信。通过Linux操作系统下的samba服务,可以实现Windows主机访问Linux下共享文件的功能,为......
  • 【学习笔记】InnoDB 和 MYISAM 的区别
    InnoDB和MYISAM的区别InnoDB和MYISAM是数据库引擎,也就是数据库表的类型INNODB现在默认使用MYISAM早些年默认使用 INNODB和MYISAM的区别 MY......
  • CentOS7.9 搭建Samba服务器
    一、Samba概述1.Samba简介Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。NFS与samba一样,也是在网络中实现文件共享的......
  • Unbiased Warped-Area Sampling for Differentiable Rendering
    渲染方程\(I(\theta)=\int_Df(w,\theta)dw\)。其中\(D\)是某个积分域(比如半球空间),\(\theta\)是场景参数,比如(顶点位置,材质参数等等)。对于可微分渲染,我们实际上感兴趣的是......