自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 R3Live系列学习(五)R3Live源码阅读

编译它的时候可能会报“'ScalarBinaryOpTraits' in namespace 'Eigen' does not names a template type”之类的信息,这可能是由于电脑中存在多个Eigen库,可以在电脑上搜索出可能存在的Eigen库,不出意外的话会有包括ScalarBinaryOpTraits的也有没有包括的,直接在CMakeLists里面强行指定include路径,或者屏蔽没包括的那些Eigen库即可。

2022-10-19 00:08:56 2246 2

原创 软件开发随笔:用C++写一个计算密集型适用的自适应线程池

在线程池中,如果为了保守创建较少的线程数,则不能充分利用性能;而创建过多的线程数会有可能在我们使用别的进程时,出现CPU的调度延迟导致缓慢,因为我们的任务是计算密集型,计算时会占用一整个核。在这里我使用一个多余的线程来监听CPU的状态,让线程池可以根据CPU占用率灵活控制本进程的计算量,在最大程度榨取计算机性能的同时保证用户对机器的其他基本操作。

2022-09-25 00:04:58 865

原创 R3Live系列学习(四)R2Live源码阅读(2)

(万字长文预警)由于最近换了部门,有许多要交接的事情要忙,并且设计开发了一个大型的视觉地图养成系统,非常有意思乃至于废寝忘食,所以文章鸽了很久,这一篇克服拖延症,将r2live的阅读写完。r2live的状态估计依然是采取ESKF的方式,这部分一直都是大多数人(像我这种蠢人)的痛点。在这里真诚推荐一本“中篇小说”《Quaternion kinematics for the error state KF》,它确实能够成为本系列博客乃至多传感器融合领域的一种预备知识。...............

2022-07-04 03:07:00 2720 8

原创 R3Live系列学习(三)R2Live源码阅读(1)

这次阅读的源码是R2Live,论文为《R2LIVE: A Robust, Real-time, LiDAR-Inertial-Visual tightly-coupled state Estimator and mapping》。

2022-01-27 23:29:00 5616 5

原创 R3Live系列学习(二)FAST-LIO源码阅读

FAST-LIO基于IEEKF(迭代误差KF)的紧耦合建图方法,鲁棒性较loam-livox提升了一档,在非常极端的运动下也有可能维持住位姿。它的论文是《FAST-LIO: A Fast, Robust LiDAR-inertial Odometry Package by Tightly-Coupled Iterated Kalman Filter》。...

2021-11-15 17:50:46 16813 10

原创 R3Live系列学习(一)Loam-Livox源码阅读

对SLAM的学习从未停止,再来开个新坑~近日火星实验室提出了又一个大作“R3Live”,它生成了纹理贴合不错的彩色点云,甚至还重建成了mesh带入到游戏中,使人身临其境。罗马不是一天建成的,这一大作是沿袭了该实验室多年来的积累,结合了vins-mono、fast-lio等里程计的特性,加上livox雷达的稠密点云属性(他们超喜欢livox雷达),目前为止是我看视频看到的最好建图效果,可惜还没开源,因此我准备沿着他们的发展道路,一步步来学习,乃至复现。...

2021-09-30 12:00:00 5114 4

原创 一种通过模仿SIFT特征实现基于二维地图的初定位方法

2021-09-06 18:22:53 399

原创 记录一下ubuntu16编译caffe以及在c++工程中调用caffe接口的过程

请珍惜2020年还在用caffe做深度学习的人,当然,为了兼容之前的代码,以及照顾大多数人的习惯,我选择在c++工程中直接调用caffe模型,一是避免使用python降低运行速度,二是避免了多进程通信,这样我们能选择的深度学习框架就比较有限了。这篇文章希望能帮助在较为纯净的环境中搭建caffe框架的同学们。一、下载caffe与准备工作git clone https://github.com/BVLC/caffe.git1、将Makefile.config.example改为Makef.

2020-11-28 19:55:31 445

原创 来用C++实现八叉树以及解决点云的均匀降采样问题

点云降采样

2020-10-29 18:03:29 2391 4

原创 VINS-MONO源码阅读(三)滑动窗口与边缘化方法

​void MarginalizationInfo::preMarginalize(){ for (auto it : factors) { it->Evaluate(); std::vector<int> block_sizes = it->cost_function->parameter_block_sizes(); for (int i = 0; i < static_cast<int&gt.

2020-10-11 15:55:59 1157

原创 VINS-MONO源码阅读(二)紧耦合的相机定位

当在线初始化完成之后

2020-10-09 15:49:59 997

原创 HDL-localization源码阅读

在一般的激光定位中,

2020-09-26 15:10:21 4016 5

原创 MSCKF-vio源码阅读

作为一个小白来说,弄明白kf、ekf等滤波方法实属不易,

2020-09-19 18:21:08 1936 4

原创 VINS-MONO源码阅读(一)imu预积分和在线初始化

自从进入了

2020-09-17 21:56:14 1043

原创 InfiniTAM v3的使用和源码阅读

最近在学习三维重建方面的知识,而目前效果比较好的算法有KinectFusion(Kinfu)、ElasticFusion、InfiniTAM、DynamicFusion、BundleFusion等,我就不一一介绍了,感兴趣的参考https://www.zhihu.com/question/29885222?sort=created作为Ubuntu爱好者,在综合了编译环境、编译难度、建模效果的前提下,选择了InfiniTAM v3作为切入点,发现它的表现已经能让人满意,除了未着色外。...

2020-08-01 16:16:03 3532 6

原创 ORB_SLAM2源码阅读(三)相机定位

我们继续上一节的tracking部分,三、位姿估计说到位姿估计就不得不翻开《多视图几何》这本大部头才能看懂作者的源码。回到Track函数,作者为相机设计了两种运行模式,分别是匀速运动模式和关键帧匹配模式。bool Tracking::TrackWithMotionModel(){ ORBmatcher matcher(0.9,true); // Update last frame pose according to its reference keyframe //

2020-07-12 00:21:19 806

原创 ORB_SLAM2源码阅读(二)初始化过程

SLAM的后端一般是利用滤波器或图结构进行增量式的分析,分为filter式和graph式的SLAM方法。本工程是采用g2o进行图优化,相比ceres,g2o更为简单粗暴,它无需构造误差函数,直接利用封装好的模块构造不同编号的位姿间的连接,并根据编号进行回环的更新。最后用一张搓搓的图来表示整个工程的流程,我们可以清晰地看到,前端作为位姿估计,为后端提供初始位姿,而后端使用的图优化方法进行综...

2020-06-21 18:01:57 606

原创 ORB_SLAM2源码阅读(一)概要

最近入手一个可爱的单目摄像头,

2020-06-07 16:34:28 551

原创 v-loam源码阅读(四)深度图点云与建图部分

在这一套代码中,激光部分其实是比较简略的,

2020-06-03 22:29:56 1909 10

原创 v-loam源码阅读(三)光束平差法和位姿融合

又到了人见人爱的bundle adjustment部分,这里只涉及了三个话题,接收了来自StackDepthPoint的深度图,以及ba优化前后的里程计信息。 ros::Subscriber depthPointsSub = nh.subscribe<sensor_msgs::PointCloud2> ("/depth_points_stacked", 1, depthPointsHandler); ros::

2020-06-03 22:08:37 1098

原创 v-loam源码阅读(二)视觉里程计

再转到VisualOdometry这一节点,这是我们在loam系列中没有接触过的,但对于熟悉视觉里程计的我们来说也不算太难,根据论文,前端是采用msckf作为视觉里程计,但根据本篇代码来看更偏向于继承loam非线性优化的特征点匹配方法,我们重点学习之前没有完全搞懂的imu处理部分。首先看到本节点所涉及的话题,它接收视觉特征查找节点的特征点、深度图节点的转化为深度信息的雷达点云、imu信息,发布的话题包括ros::Subscriber imagePointsSub = nh.subscribe&lt

2020-06-01 09:01:10 1695 1

原创 v-loam源码阅读(一)视觉特征

在一开始写lego-LOAM的时候,我就对v-loam有所耳闻,毕竟同出于大神之手,但我一直错误地以为它是将视觉与激光雷达点云融合成一个大型的rgbd,就像我之前的某种错误的打开方式。。。...

2020-06-01 09:00:05 4652 3

原创 move_base中的actionlib机制的源码探析

actionlib是

2020-05-17 11:52:13 2969

原创 记录一下将yolov3模型移植到海思H35系列芯片的步骤

海思芯片的nnie加速器可谓是黑科技了,可以在不到100元的2个gpu核的芯片上跑yolov3,对于菜狗来说吸引力很大,但是一般在x86上运行的darknet可执行文件是没法在芯片上运行的,需要严格执行以下步骤:1、将darknet模型转换为caffemodel海思h35系列目前只支持caffe模型,因此需要先将darknet转换为caffemodel①caffe模型缺少上采样层,目前已手动加入,一起编译②运行darknet2caffe.py,9012年了,Python2可能会出很多问题了,

2020-05-09 16:20:13 3235 5

原创 重读数据结构之爬楼梯问题(动态规划)

leetcode能让人身心愉悦(误),每天抽出一点时间做一道题更是养生之道。那么,

2020-03-17 13:58:47 411 3

原创 软件开发随笔:用C++实现上下层级的类的数据共享

一般在工程的实现中,我都喜欢把oop发挥到极致,也就是把一切都封装成类,并且用指针实现类之间的层级调用,那么在面临类之间的数据流通与共享时,存在一个原则,称作接口与实现分离,下层的类提供那么,假设现在存在“积重难返”的局面,之前由于太菜,或者考虑不周到,或者万恶的产品经理又新增了一些需求,没有...

2020-03-15 11:14:23 822

原创 ros源码分析(四)service的实时反馈机制

服务(service)向来不是一个陌生的词汇,它在我们的领域一般成对存在,分为客户端和服务器,客户端提出请求,服务器处理并给予回应。在ros节点间的通信过程中,如果需要获取对面进程的一些信息,利用话题通信需要两次来回通讯来确认该次请求与回复(有点像TCP/IP的握手),而调用ros service则只需要一次通信,因此它也广泛使用在机器人等ros软件不同层级的指令调用中。那么,与话题通信的分析...

2020-03-01 18:13:17 3477 3

原创 Jetson tx2 配置Yolov3与deep-sort环境的具体步骤

首先明确的一点是,tx2是arm内核并自带cuda9.0,至于cudnn的版本也需要得知,用cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2 进行查看,tx2自带的cudnn版本为7。一、安装opencv(python)在python3中需要用到opencv 3.4.0 在 python3.5中的安装,检查是否成功的方法是用python3.5...

2020-02-23 23:21:44 1775

原创 ros源码分析(三)ros::spin( )背后发生的事

接收器subscriber的demo大家也耳熟能详,它和发布器一样,在nodehandle中调用subscribe函数,实现话题名与回调函数的注册,而在进程的main函数中,又在调用ros::spin函数,那么就从这两个部分依次分析接收器的原理。一、subscribe的声明在node_handle.cpp中,subscribe函数的声明如下,template<class M,...

2020-02-23 16:51:03 4956 1

原创 ros源码分析(二)topic调用了publish之后发生了什么?

隔了很久才写第二篇实在是抱歉。继续从ros wiki的角度下手,最开始接触的publisher和subscriber的demo十分经典,而进程间通信这一过程本身就是它的最大卖点,发布器、接收器这样的名词以及advertise、publish这样简单易懂的API更是焕然一新,回过头来研究它的实现方式,是从了解、掌握到熟悉ros的必要过程。publisher的实现,在demo中的实现为如下,那么N...

2020-01-20 19:18:25 3360 1

原创 ros源码分析(一)从ros::init开始

在初次接触ros时,roswiki告诉我们ros是一种通信中间件,能够通过近乎完美的封装,实现进程之间的通信,使得数据传输省略了冗长的socket编写。而之后的学习与应用中,我们主要是基于这一既定事实进行愉快的代码编写与GUI的使用,对它本身的实现机制并不需要了解,接触ros若干年的时间里,也没有考虑过打开它的头文件去阅读这一切,直到今年出现了ros话题与服务阻塞的巨大问题。有一说一,计算机在...

2019-11-29 01:02:31 4977 2

原创 三维SLAM算法SegMap源码阅读(三)后端篇

在slam的过程中,再精确的前端也会带入一些细小误差,强如lego_loam的特征匹配也会偶尔陷入局部最优,看不出来只是因为尺度还不够大而已!-_-。像经典的小场景建图算法gmapping,它相当于只携带了前端的里程计误差模型,不太适用于颠簸的路面,也容易在大场景中走偏。在大尺度的建图中,一般需要具备一个监管者来时刻协调之前的轨迹,这便是slam的后端模型,它一般充斥着非线性优化、位姿图、图优化等...

2019-11-12 00:36:14 1568 1

原创 三维SLAM算法SegMap源码阅读(二)前端篇

上一篇对SegMap整体的流程与模块进行了概括,接下来我们看看slam的前端部分。一、匹配器SegMatch是SegMap的最大创新点,利用点云分割进行地图的语义化,能够更好的实现回环。这篇论文的地址是https://arxiv.org/pdf/1609.07720.pdf。// SegMatch objects. segmatch_ros::SegMatchWorkerPara...

2019-09-01 17:48:33 2242 3

原创 三维SLAM算法SegMap源码阅读(一)概要篇

今天来阅读一下比较前沿的三维点云与SLAM技术的SegMap,望文生义,它是基于点云的分割(segmentation)与语义识别,从而降低数据的处理量,这样也降低了对环境的依赖,增强了鲁棒性。要注意,在下载源码的同时需要下载laser_slam包,地址为https://github.com/ethz-asl/laser_slam,这个模块是slam的前端模块。我们先看看运行它的launch文件...

2019-07-28 21:04:08 3019 1

原创 记录一下TX2,ros,Python,opencv与TensorFlow的血海深坑

最近为了让机器人更加聪慧而善解人意,准备在英伟达的TX2上开发一下视觉目标检测与速度预判,需要一种比较好的方案,因此选择了Retinanet(Resnet)残差网络进行图像的识别。它需要配置TensorFlow1.4.0以上级别的框架,以及Python3.5,于是乎步入了血海深坑至今酸爽不已。接下来是需要注意的坑(对于菜狗来说,很多都是坑,让大神见笑了):一、ARM内核与X86内核是不同的,在...

2019-04-25 23:00:17 1554

原创 哈希表的C++实现

哈希表是一种基于键值映射的快速搜索的数据结构,时间复杂度基本上是O(1)。针对键与值的映射,我们通过哈希函数(散列函数)来实现,它大致有数字分析法、平方取中法、折叠法、除留余数法等,而除留余数法对我们来说最为常见,也更适合初学者理解。但是在取余的过程中可能会导致散列冲突,在这里先用开放定址法中的线性探测法实现。哈希表目前在STL中的实现是unorder_map,非常好用,今天试着自己实现一个:...

2019-03-19 12:10:02 2780

原创 三维SLAM算法LeGO-LOAM源码阅读(四)

最后一个部分是对位姿信息的融合计算,难得代码不长,先看看构造函数://综合后发送的里程计信息pubLaserOdometry2 = nh.advertise<nav_msgs::Odometry> ("/integrated_to_init", 5);//特征匹配时粗配准的里程计信息subLaserOdometry = nh.subscribe<nav_msgs::O...

2019-02-21 21:34:30 4117 8

原创 三维SLAM算法LeGO-LOAM源码阅读(三)

再来看看第三部分,这一节是建图部分,与原有LOAM不同的是增加了回环检测,我们可以用经典的graphSLAM的思想来看它的过程。定位到主函数,它与上一个节点类似,也是一个run函数不停轮转,它对实时性要求较高。void run(){ if (newLaserCloudCornerLast && std::abs(timeLaserCloudCornerL...

2019-02-21 18:04:28 8715 17

原创 三维SLAM算法LeGO-LOAM源码阅读(二)

接下来是featureAssociation.cpp,里程计部分,它分为特征点的提取与匹配两部分。这是一个非常长的代码,首先进入主函数:int main(int argc, char** argv){ ros::init(argc, argv, "lego_loam"); ROS_INFO("\033[1;32m---->\033[0m Feature Associ...

2019-02-19 21:43:45 8933 14

原创 三维SLAM算法LeGO-LOAM源码阅读(一)

LeGO-LOAM是LOAM的增强版,在LOAM的基础上增加了回环检测。论文地址:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/blob/master/Shan_Englot_IROS_2018_Preprint.pdf它分别由点云分割、特征提取、激光里程计、激光建图组成,算法思想与RGBD-SLAM有些类似,系统通过接收来自三维激光雷...

2019-02-18 15:35:47 17990 38

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除