自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多传感器融合SLAM在自动驾驶方向的初步探索的记录

现有的VIO都是解决的六自由度的问题, 但是对于行驶在路面上的车来说, 通常情况下不会有roll与z方向的自由度, 而且车体模型限制了不可能有纯yaw的变换. 同时由于IMU在Z轴上与roll, pitch上激励不足, 会导致IMU在初始化过程中尺度不准以及重力方向估计错误, 这是很要命的. 所以我想通过融合车体上的其他传感器来解决这方面的问题.

2023-12-06 16:06:57 504 1

原创 VINS编译, opencv多版本的原因导致的问题

问题一编译时报错 error: ‘CV_GRAY2RGB’ was not declared in this scope 等解决方法在报错文件上添加头文件 #include 单独遇到CV_AA的报错时,也可以将 CV_AA 改为 cv::LINE_AA问题二。

2023-11-30 10:17:14 638

原创 ROS2的cpp程序编写步骤

既然ROS2用的c++14的编译环境, 那么就要有c++14的样子, 要优美的写程序.

2023-10-24 11:08:16 351

原创 ros2编译后用ros2 run无法找到对应package

source install/setup.bash后还是无效,找了好久, 发现是package.xml处没有加上如下。加上后才会把对应库加载source中,找了好久啊。

2023-08-29 11:01:24 1644 1

原创 自动驾驶SLAM技术第四章习题2

在g2o的基础上改成ceres优化,高博都写好了其他的部分, 后面改ceres就很简单了. 这块我用的是ceres的自动求导,很方便,就是转化为模板仿函数的时候有点麻烦, 代码部分如下。

2023-08-24 14:46:41 1494 1

原创 Cartographer自定义lua参数的方法

Cartographer中, 配置参数大多数都是从lua文件中得到的, 不是像其他的开源框架大多使用xml等文件进行参数配置. 假如我们要配置一个名字是rotation_condition的配置参数在pose_graph_2d.cc中, 想要使用方法为。

2023-06-20 18:38:59 399

原创 cpp计算函数的耗时

在调试程序的过程中经常需要知道函数的运行时间, 我们可以通过在函数外部记录时间, 从而得到结果.在这里只是简单记录一下, 很简单的.

2023-05-29 11:13:43 158

原创 Cartographer源码阅读---番外篇: Submap封装与维护

Cartographer中Submap(子图)没有被直接的调用进行维护, 而是针对2D和3D场景分别派生出子类Submap2D和Submap3D, 进行调用. 以2D为例, 为了方便维护, 又把Submap2D封装成了ActiveSubmaps2D进行维护, 其维护方式类似与滑窗, 也是只维护最近的一些数据.

2023-05-16 14:51:45 536

原创 Cartographer源码阅读---后端优化思路

进入到后端, Cartographer在pose_graph中实现了约束与节点的添加, 在optimization_problem中实现优化. 约束的构建方法由于传感器类型不同, 也多种多样, 不同的构建方法实现了相互的约束, 所以可以实现整体的优化.

2023-05-16 10:49:52 1640 1

原创 Cartographer源码阅读---前端扫描匹配

Cartographer前端用了CSM进行一个暴力搜索的粗匹配, 最高精度为栅格分辨率(默认5cm), 初始值是位姿推测器给出的预测位姿, 然后在用ceres进行精匹配, 输入为CSM给的值或者位姿推测器预测的位姿, 用地图匹配与位姿推测的位姿进行优化, 然后返回位姿作为前端的输出.

2023-05-11 12:15:03 1644

原创 c++程序从.bashrc读取变量并赋值给变量

有时候cpp程序需要从.bashrc中读取变量进行初始化, 这样可以在不同的主机环境中执行不同的配置参数, 十分有用.然后通过调用std::getenv得到变量值。首先我们要在.bashrc 中定义变量名。然后就可以使用变量啦。

2023-05-08 15:38:24 196

原创 cartographer源码阅读---位姿推测器

有3中位姿推测的方法, 但是不同情况下用哪一个呢?使用imu, 使用里程计平移的预测: 通过里程计数据队列开始和末尾的2个数据计算出的线速度乘以时间姿态的预测: 通过imu的角速度乘以时间使用imu, 不使用里程计平移的预测: 通过pose数据队列开始和末尾的2个数据计算出的线速度乘以时间姿态的预测: 通过imu的角速度乘以时间不使用imu, 使用里程计平移的预测: 通过里程计数据队列开始和末尾的2个数据计算出的线速度乘以时间。

2023-05-08 14:34:11 889

原创 Cartographer源码阅读---点云数据的预处理

上面参数传递, 函数调用一层一层的, 一开始看很难看懂, 真的需要自己仔仔细细捋一捋, 在这简单做个总结, 总结一下点云数据预处理中坐标的转换第一步: 进行多个雷达点云的时间同步, 此时点云的坐标是相对于tracking_frame的初始点云坐标为(10, 8)第二步: 预测出每个点云的时间戳, 通过位姿推测器推测出tracking frame 在local坐标系下的坐标.第三步: 去除运动畸变, 方法是将tracking_frame的hit坐标转化成local坐标系下的坐标。

2023-05-05 11:33:32 1434 2

原创 用右雅克比对旋转矩阵进行求导

表示, 用朴素的倒数定义进行求导而不是用扰动模型, 我得到了这个过程与结果。结果不一样, 雅克比矩阵位置不同, 是不是他错啦, 希望有人解答。对其进行旋转, 旋转用旋转矩阵。

2023-05-05 11:21:58 444

原创 C++程序, 执行程序加上-v显示版本号的方法

可以打印自己的版本号, 这样是不是改了程序,就都可以做做记录了。

2023-04-27 09:23:32 411 1

原创 ZED2i相机在ROS2上运行vins排坑与用docker运行Kalibr标定ZED2i相机

按照ZED官网提供的方式ZED2i的SDK和ros2 wrapper之后, 还有很多工作要做才能让ZED成功运行稳定的VINS。

2023-03-31 10:04:06 947

原创 VINS-Mono中feature_id的构造

在看vins初始化代码这一部分的时候, 在feature_manager.cpp中, FeatureManager::addFeatureCheckParallax这一部分用到feature_id, 用来给新的feature插入某帧的属性, 这时候需要判断这个feature以前有没有出现过. 判断条件就是查看feature对应的id, 也就是feature_id是不是有相同的id.在feature_tracker.cc中, 保证了每帧特征点数都要达到一定值, 如果有n个跟丢的, 新提取n个特征点.

2023-03-29 16:36:08 135

原创 Ubuntu 集显独显切换

以前都是通过卸载N卡驱动去切换显卡的,后来发现ubuntu有显卡选择的命令。

2023-03-21 18:25:48 4274

原创 Cartographer源码阅读---Sensor的数据走向

Cartographer中传感器数据的传入从Node类的HandleXXXMessage成员函数开始, 传递给SensorBridge类, 然后调用CollatedTrajectoryBuilder把数据给到Collator类, 由Collator进行消费这模式的处理, 然后再返回给CollatedTrajectoryBuilder完成Cartographer的整个前后端.中间的处理用到了很多父子类的互相调用, 一层套一层, 十分复杂, 要认真看才能懂里面的数据流.

2023-03-21 12:27:05 607

原创 Cartographer源码阅读---MapBuilder的声明与构造

MapBuilder通过联合LocalTrajectory, PoseGraph, 还有Sensor, 开启了整个Cartographer的前端与后端.

2023-03-20 12:21:20 746

原创 Cartographer源码阅读---传感器数据传递

综上所述, 所有的数据都要通过处理转化为Cartographer能够接受的数据结构, 然后通过调用trajectory_builder_的addsensordata方法, 把传感器数据给到Cartographer算法部. 这一部分没啥难点.求赞!

2023-03-17 14:29:14 757

原创 Cartographer源码阅读---开始轨迹的相关处理

上一节我们看了一下node_main.cc的内容,发现其中最重要的部分就是Node类,这个类吃下了map_builder类,且里面实现了传感器数据的处理与分发(sensor_bridge),还有整个Cartographer算法的调用(map_builder与map_builder_bridge). 这一节我们重点看一下Node类到底做了些什么.

2023-03-15 11:59:52 640 2

原创 Cartographer源码阅读---node_main.cc

啃一下谷歌优秀的激光SLAM开源框架-Cartographer. 这个框架算法简单,但是程序部分太多需要学习的地方了.不论是整体框架的结构,还是数据的使用,都是非常优美的.不愧是大公司啊.接下来记录一下每天学习的内容和心得,督促自己坚持下去!node_main.cc是整个Cartographer程序的入口,用来调用整个Cartographer进程。以最基础的单线雷达和轮速计为例。整体的代码开始是在Run函数中实现的。

2023-03-13 14:10:00 468

原创 cpp中双引号和std::string(双引号)的区别

由于argv我定义的是char ** argv, 输入的必须是字符串,所以不能用单引号, 只能用双引号,但是双引号后面必定跟一个\0,所以不变。今天犯了一个很低级的错误, 我原本想判断输入的argv是不是某个字符串(如abc), 我直接用的方法是。

2023-03-06 17:46:13 150

原创 角度制转弧度制Eigen的实现

所以先把角度制转化为弧度制,然后转化为绕某个轴转动多少弧度的表示方法,转化的时候要注意归一化。AngleAxisd第一个值为绕某个轴转动的角度大小,第二个值是绕那个轴转。输入的是(x,y,z),分别代表绕xyz轴转动的角度大小,单位为角度制.Eigen中要实现精确的角度转换最好要用AngleAxisd这个成员。

2023-02-09 18:01:34 703

原创 SLAM14讲第七讲习题10:Ceres实现ICP优化

ceres实现ICP

2023-02-03 16:05:08 869 2

原创 QNX系统ARM架构上protobuf文件读取乱码

protobuf的bug

2022-11-30 18:16:23 275

原创 git发布自己的项目

git新建工程

2022-10-28 14:56:48 269

原创 拷贝构造函数与赋值函数

拷贝构造函数与赋值函数测试程序输出结果

2022-10-24 12:13:20 52

原创 cartographer加载配置文件解析

cartographer加载配置文件解析

2022-08-19 10:31:01 442

原创 cartographer的node_main.cc解析

cartographer的node_main.cc解析

2022-08-18 14:50:05 161

原创 gflags和glog在cartographer中的运用

gflags和glog在cartographer中的运用

2022-08-18 11:36:26 186

原创 cartographer的CMakeLists.txt与package.xml文件

cartographer的cmake文件解析

2022-08-18 10:00:08 409

原创 c++ primer plus 第五版第10章编程练习题1

c++入门

2022-03-26 11:31:19 1027

原创 SLAM中为啥要用李群李代数?

归根结底是要推出.不要纠结于这个结果的中间过程, SLAM编程的时候直接用这个公式,基本上都没用过求李群李代数的Sophus

2022-03-12 20:49:49 309

原创 构造函数与重载构造函数

发现slam程序里有个这种写法,在mappoint.h中写的如下 MapPoint() {} // XXX:重载构造函数,一个默认(new的时候用),一个含参 MapPoint(long id, Vec3 position);在mappoint.cpp中有含参构造函数的定义:MapPoint::MapPoint(long id, Vec3 position) : id_(id), pos_(position) {}这个涉及到new关键字的默认构造函数与构造函数的重.

2022-02-09 14:18:00 1375

原创 C++静态成员和非静态成员

C++基础之静态与非静态成员

2022-02-04 18:44:30 712

原创 镜像后的图片的ORB特征提取

SLAM的学习笔记

2022-01-11 19:12:46 1645

原创 RCNN阅读笔记(自己看版)

基本流程: 候选区域生成: 一张图像生成1K~2K个候选区域 (采用Selective Search 方法) 特征提取: 对每个候选区域,使用深度卷积网络提取特征 (CNN) 类别判断: 特征送入每一类的SVM 分类器,判别是否属于该类 位置精修: 使用回归器精细修正候选框位置 基础知识什么是Selective Search 方法:该算法的主要思路是输入一张图片,首先通过图像分割的方法(代码里使用的是felzenszwalb算法,详见htt..

2021-09-01 10:01:19 66

原创 rviz出现Transform [sender=unknown_publisher]For frame [hokuyo_link]: Fixed Frame [map] does not exist

这是因为本身建模的时候没有用tf包工具发布global fixed frame到topic所在坐标系的tf关系,通俗来讲就是模型fixed frame与rviz的不匹配。解决办法:修改Fixed frame(当前为map)为建模下的frame(这里是hokuyo_link)...

2021-08-20 10:39:58 5492 7

空空如也

空空如也

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

TA关注的人

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