![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SLAM
半亩园
自信人生二百年,会当水击三千里。
展开
-
关于旋转矩阵
旋转矩阵的方向,我一直是没有搞清楚的。知道用到了平移的时候。A->B的平移是B-A那么A->B的旋转的角度也就是B-A^_^原创 2021-08-01 17:51:38 · 195 阅读 · 0 评论 -
VINS-mono代码阅读 -- 后端优化
书接上回,初始化完成以后,就是进行非线性优化了,我们来看看这个函数吧。1. 非线性优化1) 状态向量状态向量包括滑窗内的n+1个所有相机的状态,包括位置,朝向,速度,加速度计bias和陀螺仪bias,相机到IMU的外参,m+1个3D点的逆深度:X=[x0,x1,⋯ ,xcb,λ0,λ1,⋯ ,λm]X = [x_0,x_1,\cdots,x_c^b,\lambda_0,\lambda_1,\cdots,\lambda_m]X=[x0,x1,⋯,xcb,λ0,λ1,⋯,λm]xk=[pb原创 2020-09-05 12:43:46 · 418 阅读 · 0 评论 -
VINS-mono代码阅读 -- 初始化(三)
这一部分来看看视觉-IMU对齐。1. 视觉惯导联合初始化 VisualIMUAlignment这个函数调用了两个函数,1)陀螺仪bias校正 2)初始化速度、重力和尺度因子bool VisualIMUAlignment(map<double, ImageFrame> &all_image_frame, Vector3d* Bgs, Vector3d &g, VectorXd &x){ //陀螺仪偏差标定 solveGyroscopeBias(all_im原创 2020-08-28 20:17:40 · 412 阅读 · 0 评论 -
VINS-mono代码阅读 -- 初始化(二)
上次写到了PnP优化滑窗内所有帧的位姿,接着上次没写完的初始化部分。4. solvePnP原创 2020-08-29 21:35:27 · 264 阅读 · 0 评论 -
VINS-mono代码阅读 -- 初始化
1. 初始化的流程初始化采用的是视觉和IMU松耦合的方案首先用SFM求解滑动窗口内所有帧的位姿,和所有路标点的3D位置,然后跟IMU预积分的值对齐,求解重力向量,尺度因子,陀螺仪bias及每一帧对应的速度。画一下初始化的流程图:在看程序之前,先来看看这里用到的数据结构: ImageFrame imageframe(image, header.stamp.toSec()); //tmp_pre_integration 是在processIMU() 时进行的 IntegrationBase原创 2020-08-19 10:18:55 · 536 阅读 · 0 评论 -
VINS-mono代码阅读 -- processImage
1. 对特征点信息的封装relocalization frame这部分的处理,我准备放到后面再写,现在就先看看ProcessImage这部分代码。在进行图像处理之前,先对接收到的特征点信息进行封装,image是建立每个特征点和(camera_id,[x,y,z,u,v,vx,vy])构成的map,索引为feature_id。然后调用processImage。map<int, vector<pair<int, Eigen::Matrix<double, 7, 1>>&g原创 2020-08-17 15:49:24 · 727 阅读 · 0 评论 -
VINS-mono代码阅读 -- IMU预积分
void Estimator::processIMU(double dt, const Vector3d &linear_acceleration, const Vector3d &angular_velocity){ //1. 判断是不是第一个imu消息,如果是第一个imu消息,就将当前的加速度和角速度作为初始加速度和角速度 if (!first_imu)//first_imu 标志位,初始值为false { first_imu = true;原创 2020-08-16 14:52:53 · 425 阅读 · 0 评论 -
VINS-mono代码阅读 --process线程
process线程对接收到的IMU数据和特征点进行处理,并实现了一个视觉惯导里程计。1. process()线程// thread: visual-inertial odometryvoid process(){ while (true) { std::vector<std::pair<std::vector<sensor_msgs::ImuConstPtr>, sensor_msgs::PointCloudConstPtr>> m原创 2020-08-14 18:08:45 · 404 阅读 · 0 评论 -
VINS-mono代码阅读 -- vins_estimator
ROS中节点之间通信机制是基于发布/订阅(publish/subscribe)模型的消息(message)。所以在读一个ROS节点的时候,先看这个节点发布和订阅的消息,以及对应的回调函数。1. main函数int main(int argc, char **argv){ //初始化ros节点 ros::init(argc, argv, "vins_estimator"); ros::NodeHandle n("~"); ros::console::set_logger_lev原创 2020-08-14 14:41:36 · 387 阅读 · 0 评论 -
VINS-mono代码阅读 --feature_tracker 代码阅读
VINS-mono已经提出有几年了,但是作为经典的视觉惯导结合的SLAM,还是很重要的,即使网上已经出现了大量的代码分析,在阅读前辈的代码同时,总是会有自己的奇奇怪怪的问题,所以有必要在此记录下来。在此,我们只考虑代码中单目的部分,对双目的部分不加解释。1.main函数int main(int argc, char **argv){ //初始化节点 ros::init(argc, argv, "feature_tracker"); ros::NodeHandle n("~");原创 2020-08-13 22:00:50 · 335 阅读 · 0 评论 -
VINS-mono中图像数据的数据结构
在大概阅读了vins_estimator部分的代码后,被图像数据的各种数据搞的有点懵,所以稍微做一个总结。1.feature_popints在feature_tracker_node 的 img_callback()中创建,包含一帧图像中的特征点信息。在这里插入代码片...原创 2020-02-10 13:44:32 · 793 阅读 · 0 评论 -
运行PL-VIO
这是中科院自动化所贺一佳博士在Sensors上的文章的开源代码,论文链接,代码链接https://github.com/HeYijia/PL-VIO。第一步要解决的事情就是在自己的电脑上运行起来。按照贺博在readme部分给的步骤就可以。结果如下:LSD_Matches1LSD_Matches2visrviz结果如上图所示,目前对每张图片的具体意义还不清楚,还需要看代码去了解。...原创 2020-01-26 11:50:06 · 2444 阅读 · 15 评论 -
小觅相机深度版运行VINS-mono
刚买了一台小觅深度版相机,拿来试试看效果,决定跑一圈VINS-mono,下面是我运行的过程,记录一下。1. 获取传感器的参数编译官方的SDK。地址:https://mynt-eye-d-sdk.readthedocs.io/zh_CN/latest/sdk/install_ubuntu_src.htmlgit clone https://github.com/slightech/MYNT-E...原创 2019-12-26 16:26:46 · 1072 阅读 · 10 评论 -
运行VINS-Mono报错: IMU excitation not enouth!
问题描述闲来无事,跑个VINS-Mono玩玩,按照github给的步骤,一步步进行,没有报错,编译完美结束。但是在运行的时候:![在这里插入图片描述](https://img-blog.csdnimg.cn/20191031094510400.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aH...原创 2019-10-31 09:48:04 · 2832 阅读 · 8 评论