无人机-SLAM-vins
文章平均质量分 62
诗筱涵
邮箱:[email protected] 微信公众号:诗筱涵 技术交流群:960668018
展开
-
VIO初始化探究:旋转平移解耦的高效鲁棒初始化 深蓝学院听课笔记
看这个公式就好理解了,为什么要估计bias和重力。噪声可能没法避免就不估计了,IMU的偏置影响不大就不估计了,所以最后就只剩下估计陀螺仪的bias和重力了,为了得到准确的角速度和不包含重力的机体加速度。加速度计不光测的运动加速度,还测了重力加速度,所以需要把这个重力加速度去掉才能得到正确的运动加速度。需要估计重力方向,并把重力从总的加速度里面移除出去,这样才能得到真正相机的加速度。IMU的预积分也是可以得到相对旋转关系的,预积分不光光是平移注意。由于VIO的非线性,有一个好的初始值是它稳定运行的基础。原创 2024-05-04 09:14:35 · 252 阅读 · 0 评论 -
深蓝学院 王锐 视觉SLAM直接法简介 笔记
但是其实可以更少,Rt是刚体运动,刚体自由度是6,减去一根尺度,那自由度是5,R的自由度是3,t的自由度,因为绝对尺度求不出来,所以自由度为2不是3.所以理论上我们最少只需要五对点就可以把R和t给求出来了。看着我理解了本质矩阵,就是Rt相乘的一个矩阵!求本质矩阵其实就是求Rt!R*t总共有9个数字,但是,E绝对的尺度是不知道的,因为那个方程,多大相乘都是为0,所以只需要8个点,也就是8点法!(我看计算机视觉中的多视图几何里面也是有讲基本矩阵的计算的,本质矩阵是基本矩阵的一部分,pnp也是要求解本质矩阵吧)原创 2024-05-03 08:28:35 · 237 阅读 · 0 评论 -
十四讲里的边缘化和vins里的边缘化是一个东西一个公式一个原理
十四讲里的边缘化和vins里的边缘化是一个东西一个公式一个原理,只是十四讲里面边缘化是只想算相机位姿,marg掉的特征点的位置,vins里的边缘化是只想算滑窗内的优化变量,滑窗丢弃的变量不算,这个样子。marg的对象不同,理论是同一个理论。十四讲里的边缘化就和贺一家这里讲的边缘化一样。原创 2024-05-02 18:22:24 · 248 阅读 · 0 评论 -
自己对边缘化 舒尔补的一些理解
这可能才是关键,舒尔补是这种把一个矩阵变为上三角或者下三角的方法,应该是的,乘以一个舒尔补就可以变了!因为随着滑动窗口的移动,那些变量也在更新,对应的海森矩阵也更新,舒尔补后的矩阵也在更新,舒尔补后的海森矩阵分解出来的雅可比和残差也就跟着在变。这个步骤不正和下下面的那个边缘化的步骤对应么,计算机视觉life的vins课里面也讲到了的,也是这个意思,现在看到官方正式描述了。边缘化的优化肯定也是不算算出δx,也会不断更新优化变量的值,去减小残差,更新优化变量的值这就相当于起作用了,在优化位姿等等的了。原创 2024-05-02 17:49:04 · 938 阅读 · 0 评论 -
ceres里面协方差的写法
这个在崔华坤和马朝伟的vins资料里面都有说到。原创 2024-05-02 17:39:17 · 147 阅读 · 0 评论 -
ROS2下使D435i发出640 480分辨率灰度图和200hz imu话题的launch文件设置
在/opt/ros/foxy/share/realsense2_camera/launch目录下,找到rs_launch.py,修改rs_launch.py使得其启动D435i可以发出30hz的分辨率640*480双目灰度图话题和200hz的/camera/imu话题,给vins节点订阅使用。修改后的可以发出30hz的分辨率640*480双目灰度图话题和200hz的/camera/imu话题和rs_launch.py如下。修改rs_launch.py前需要先赋予权限。原创 2024-04-30 18:35:11 · 194 阅读 · 0 评论 -
OrinNX部署运行ROS2版本的vinsfusiongpu步骤整理
OrinNX上部署运行ROS2版本的vinsfusiongpu 20240429OrinNX ubuntu20.04上前提已经装好ros foxy。原创 2024-04-29 16:06:52 · 2083 阅读 · 0 评论 -
华科杨欣-基于视觉的深度估计与定位(含深度光流位姿联合估计)学习笔记
包括我现在看单目深度估计或者基于深度学习的里程计,确实就是深度和位姿或者光流和位姿一起估计,不是单一的,这个层面再去反看自监督单目深度估计为什么那么弄可能就好理解了。) (GeoNet:基于无监督学习的深度、光流和相机位姿的联合估计 CVPR2018)上面的需要大量样本训练,没有大量样本时实现无监督的光流和深度的联合估计。深度学习可以得到稠密光流,稠密光流可以得到稠密的特征点匹配,通过三角测量可以得到稠密的深度。【华中科技大学杨欣教授:“基于视觉的深度估计与定位”-哔哩哔哩】原创 2024-04-28 08:56:53 · 148 阅读 · 0 评论 -
把PL-VIO的位姿保存到txt文件的方法
我自己实现PLVIO输出位姿了,它的关键在于得自己先建好一个txt,并且yaml文件里的output_path里面路径也得带上文件名,因为也是看代码发现的,发现代码并没有对应文件名,再想到其他的yaml文件output_path里面路径最后是个txt,我也是在想要建什么类型的文件,看到其他的是建的txt,所以我也建个txt,再运行起来,这个txt里面有位姿数据了。因为也检查了,代码没有问题,有专门输出位姿到文件的代码,也被调用了的。把PL-VIO的位姿保存到txt文件的方法。原创 2024-04-25 15:45:16 · 174 阅读 · 0 评论 -
自己在ipad上对结构线重投影残差的推导
第三页有点大,直接复制不上来,是自己再分两次截图放上来的。是可以自己完全推出来的,包括带有旋转矩阵李代数的求导。原创 2024-04-25 10:28:59 · 103 阅读 · 0 评论 -
20221007时自己画的PL-SLAM分支图
20221007时自己画的PL-SLAM分支图。原创 2024-04-25 10:23:25 · 108 阅读 · 0 评论 -
吴毅红 多模态信息感知的SLAM 笔记
速度得到提升,因为只采用显著方向上的线段进行跟踪,没有使用所有的线段进行跟踪。不过从这里也可以看到,并不是需要所有数据集上都好,按照实际情况来!可以看出线的误差函数上也可以下功夫改进。这里有点的三角化和结构线的三角化。人家论文题目里面就包含了线三角化。激光SLAM通常分为两大类。这篇论文我搜了下在这可以看。这里说到了结构线的三角化。结构信息辅助的SLAM。原创 2024-04-25 10:10:26 · 236 阅读 · 0 评论 -
VIO 初始化探究:旋转平移解耦的高效鲁棒初始化 深蓝学院听课笔记
噪声可能没法避免就不估计了,IMU的偏置影响不大就不估计了,所以最后就只剩下估计陀螺仪的bias和重力了,为了得到准确的角速度和不包含重力的机体加速度。vins-mono还有专门的一步优化重力向量,我觉得可以加到这里来弄,曼哈顿世界的Z轴。加速度计不光测的运动加速度,还测了重力加速度,所以需要把这个重力加速度去掉才能得到正确的运动加速度。需要估计重力方向,并把重力从总的加速度里面移除出去,这样才能得到真正相机的加速度。由于VIO的非线性,有一个好的初始值是它稳定运行的基础。我什么还要单独弄个重力的优化呢?原创 2024-04-25 08:56:31 · 265 阅读 · 0 评论 -
vins用鱼眼相机,注意修改代码里的相机模型
vins里面这个UNIT_SPHERE_ERROR宏定义来选择平面相机模型还是球面相机模型,需要注意下。原创 2024-04-22 22:06:30 · 215 阅读 · 0 评论 -
aruco二维码检测与aruco二维码降落原理讲解 20240422
aruco又称为aruco标记、aruco标签、aruco二维码等,其中 CharucoBoard GridBoard AprilTag 原理相通,只是生成字典不同,而AprilTag用于机器人领域或可编程摄像头比较多,而aruco CharucoBoard GridBoard则用于AR应用或智能眼镜比较多,都是用于实现精准定位,如无人机降落时就可以使用它实现精准降落。ArUco marker是一种汉明码方格图。原创 2024-04-22 21:22:10 · 1561 阅读 · 4 评论 -
aruco二维码降落中的坐标系变换
以下面这个变换矩阵为例,一个变换矩阵可以有两种理解方式,可以理解为机体坐标系在世界坐标系下的位姿,最右边的写法可以体现这个含义,也可以说是从机体系到世界系的变换矩阵,最左边的写法可以体现这个含义,因为变换矩阵右边乘的是变换前的坐标系坐标,左边得到的是变换后的坐标系坐标,所以写为Twb正好顺序一致,念的时候也是先念b再念w。对于坐标系间的旋转角度是90度的倍数时,可以直接观察坐标轴的对应关系或者取坐标轴的特定坐标值的方式快速确定坐标系间的旋转矩阵。变换矩阵用Eigen::Isometry3d类型。原创 2024-04-22 13:10:00 · 307 阅读 · 0 评论 -
关于变换矩阵的一些小注意点
Tbw Tb->w 不是世界系到机体系的变换矩阵,是机体系到世界系的变换矩阵,把机体系变到世界系!求机体系在世界系下的位姿,不是把世界系变到机体系,而是机体系变到世界系,比如机体系原点,在机体系下坐标是(0,0,0),但是在世界系下就是一个非零值,这个坐标是世界系下的坐标不是机体系下的。eigen里也默认是左乘,左乘是从最右边向左边乘,依次乘以左边的。所以变换矩阵相乘按照左乘(坐标是列向量)是写成下面这样。原创 2024-04-18 13:33:00 · 110 阅读 · 0 评论 -
eigen变换矩阵Isometry3d类型通过旋转矩阵和平移向量赋值方法
以前的这种方法不能叫赋值,可能导致错误。原创 2024-04-18 10:38:43 · 171 阅读 · 0 评论 -
自己部署运行SchurVINS
vcs-import < ./SchurVINS/dependencies.yaml 这一步下不下来可以把之前部署过的svo的工作空间下的对应功能包复制过去 ,因为我看这12个功能包它下载链接也是从对应官方Github仓库下的,没有自己更改。应该是我的地址问题,这里是kgithub,不是github,之所以出现kgithub是我复制的之前部署svo时的工作空间下的包,当时部署svo时可能就改为kgithub了,github的一个镜像网站,当时还能用,现在可能不能用了。我先把这个地址改为Github吧。原创 2024-04-17 13:58:02 · 649 阅读 · 4 评论 -
坐标系间的旋转角度是90度的倍数时,其旋转矩阵是可以一眼写出来的,不管左乘还是右乘。
下面这个相机系在机体系下的旋转矩阵就可以写成这样,直接根据x y z轴的对应关系,比如机体系x的正对应相机系y的负,所以旋转矩阵里对应机体系x和相机系y的地方就是-1。所以其实从这个层面看,不管是左乘还是右乘,只是表示方式不同,对应的实际旋转是一样的。坐标系间的旋转是90度的倍数,其旋转矩阵是可以一眼写出来的,不管左乘还是右乘。只需要分别取三个在三个坐标轴上的点就可以了。有相关性的就有值,因为没有缩放,所以不是1就是-1。原创 2024-04-16 17:30:17 · 378 阅读 · 0 评论 -
Eigen::Matrix3d类型用<<赋值编译会出现如does not name a type的报错的原因和解决方法
最后我把代码丢给chatgpt而且说报错是这样,chatgpt分析出是我赋值没有写在main函数里的原因,我把赋值写在main函数里面后果然就没有does not name a type的报错了。Eigen::Matrix3d类型用原创 2024-04-14 09:38:05 · 248 阅读 · 0 评论 -
SLAM学习资料简短整理20240413
如果觉得一些现有的SLAM工程量比较大,比较复杂,可以不用先急着看一些成熟的SLAM工程代码,可以先选择一些简单小巧基础的SLAM代码开始研读,可能会思路更为清晰而且贴近本质便于学习,比如十四讲里面最后提供的一个简单的SLAM demo (有些经典的SLAM以及有比较完善的相关的讲解课程了,有的还不止一个课程,在上面所给的一些课程学习平台里进行搜索可以找到。一些经典开源SLAM代码比如。他们有一些经典的SLAM作品可以学习,同时也有最新前沿的一些SLAM作品,可以看到目前SLAM的一些发展方向。原创 2024-04-13 16:46:19 · 666 阅读 · 0 评论 -
再分析一下vins的加载位姿图 重定位
我估计/loop_fusion/pose_graph_path这个话题,没有回环的时候也是有值的,你的之前没有值可能是因为相机没有怎么动,它可能需要有一定位移才会发出新的话题。之前可能误解了densesurfelmapping,以为一定要发生了回环有了 /loop_fusion/pose_graph_path 话题才能建图, /loop_fusion/pose_graph_path 话题应该也是一开始就有的。我发现一个规律,我摄像头不动的时候,这个话题就不会发出来,一旦动了摄像头,这个话题就立马发出来了。原创 2024-04-02 22:16:32 · 690 阅读 · 0 评论 -
solvepnp函数以及aruco二维码用的estimatePoseSingleMarkers得到的平移旋转是世界系在相机系下的平移旋转
solvepnp函数以及estimatePoseSingleMarkers得到的平移旋转是世界系在相机系下的平移旋转,不要反了。这个以二维码为中心点的世界系的xyz的指向,也可以确定出来。红色是x 绿色是y 蓝色是z,符合东北天坐标系。看来我之前solvepnp函数都用错了啊,solvepnp得到的是世界系在相机系下的位姿。我自己实际检测运行感觉像是得到的位姿是世界系在相机系下的位姿,真的是这样。如果是世界系下的位姿,此时得到的x应该是负的,但是实际是正的。难道solvepnp函数的输出也是这样的?原创 2024-04-02 18:10:08 · 306 阅读 · 0 评论 -
回环是可能导致回环后的位姿发生跳变的
绿色是没有回环的位姿轨迹,红色是有回环的位姿轨迹。T265也有回环,回环也可能发生位姿跳变。原创 2024-03-28 13:41:47 · 153 阅读 · 0 评论 -
基于D435i跑vins+densesurfelmapping的一些关键点
2 时间戳一致,这种情况会出现在自己实现录制了D435i的bag包,然后基于这个bag包跑vins+densesurfelmapping,会发现建不出图,是因为densesurfelmapping里面有时间戳对齐,基于D435i的bag包跑,vins位姿的时间戳和深度图以及彩色图的时间戳是不一致的,也就没法完成对齐也就不能建图。网上看到不少人说跑vins+densesurfelmapping,没有建出图,我自己也是。经过层层排查,发现主要是下面这两个点,这两个点任何一个没有满足,都会建不出图。原创 2024-03-27 15:54:02 · 337 阅读 · 0 评论 -
D435i关闭红外光点的方法
之前是通过修改launch文件关掉的,但是默认的rs_camera.launch里面没有那个参数,比较不方便。今天我参考这篇给的方法把D435i的红外光点关掉了。原创 2024-03-27 12:02:35 · 262 阅读 · 0 评论 -
使/mavros/imu/data_raw话题发出来而且话题频率在200hz左右,给vins订阅使用
启动px4.launch之后imu话题只有/mavros/imu/data发出来,而且话题频率只有15hz,/mavros/imu/data_raw话题没有发出来,可以通过下面命令使得/mavros/imu/data_raw话题发出来而且话题频率在200hz左右。这么做主要是给vins使用。原创 2024-03-25 11:15:10 · 245 阅读 · 0 评论 -
基于eigen计算TUM数据集中已知世界系位姿的两幅图片的相对位姿
基于eigen计算TUM数据集中已知绝对位姿的两幅图片的相对位姿。原创 2024-03-20 09:17:15 · 79 阅读 · 0 评论 -
跑vins fusion或者ORB SLAM出现段错误,核心转存储,可能是如opencv版本不对
跑vins fusion或者ORB SLAM出现段错误,核心转存储,可能是如opencv版本不对 当然也可能是一些其他原因。原创 2024-03-16 13:33:07 · 421 阅读 · 0 评论 -
关于优化问题(含数值优化)个人总结文档
FxΔxFxΔx。原创 2024-03-13 22:26:43 · 908 阅读 · 0 评论 -
用rs-enumerate-devices -c命令可以查看D435i所有可以支持的分辨率,帧率,所有的相机内参外参
用rs-enumerate-devices -c命令可以查看D435i所有可以支持的分辨率,帧率,所有的相机内参外参。所以改launch文件里面的分辨率和帧率是不能乱改的,得改为D435i支持的分辨率帧率。rs-enumerate-devices在realsense的github上有介绍。原创 2024-03-09 15:40:48 · 407 阅读 · 0 评论 -
SLAM精度评估指标ATE RMSE和RPE RMSE及evo结果分析
统计量一般包含(SLAM的精度评价标准是什么?只是这么多统计量里面,我们一般选用RMSE。原创 2024-03-07 22:24:03 · 1089 阅读 · 0 评论 -
关于通过深度图得到对应像素点的深度后,如何算出对应地图点的相机系下的坐标
关于通过深度图得到对应像素点的深度后,如何算出对应地图点的相机系下的坐标。如果弄基于单目深度图进行初始化会用到。原创 2024-03-04 07:39:05 · 425 阅读 · 0 评论 -
视差转深度公式中变量单位的确定
而且深度图是16UC1(我看到的视差图转深度图函数用的深度图对应的变量类型就是16UC1,以及D435i的深度图也是16UC1),也就是最大表示2的16次方65536的距离,对应单位正好是毫米,也就是65米左右的距离,对深度图而言这个范围正好够了,650米和6.5米都不合适,所以深度图的像素值代表的深度单位就是毫米。实际写视差图转深度图的代码时,必然要严格确认每个变量的单位。对深度公式进行了推导,推导不难,利用相似三角形原理。视差图转深度图参考代码,摘自下面博客。深度公式2是深度公式1的特殊形式。原创 2024-03-03 17:03:37 · 417 阅读 · 0 评论 -
自己部署运行VINS-RGBD-FAST(运行效果感觉一般) 20220918
我把相机IMU外参改为D435i内和RGB和IMU的外参,用的当初电子科大标定的参数,然后再移动相机就没有飘了。下下来,直接catkin_make会后面说缺少Sophus,其实readme里面已经说要装这个了,我先不装看看,看来不行,那就装下。整个建出的RGBD图也差强人意,看来单纯学生自己写的确实不太靠得住啊,还不如用原始Vins的呢。感觉也就转弯的时候角度估计得准确一些,其他的位移什么的都挺一般的。不过我实际拿着走一圈的效果感觉挺一般的,或者说不太行,当然没有飘,但是位置估计得也不怎么样。原创 2024-02-29 07:58:45 · 398 阅读 · 0 评论 -
vins-fisheye NX安装总结 20220824
我是在我装了vins-fusion-gpu的NX镜像上装的,opencv版本是3.4.1,想编译完vins-fisheye,很关键的一点在于libSGM的安装,需要做些简单的修改。再装libSGM 我记录下我做过的改动。原创 2024-02-26 11:28:22 · 932 阅读 · 0 评论 -
自己装evo,并配合vins-fusion做了轨迹误差计算(vinsfusion位姿保存输出到csv文件)
所以我还是换成MH_01_easy.bag这个数据集,用这个里面提供的真值的data.csv,转为data.tum,再配合vinsfusion生成的result.csv,就可以得到结果了!需要注意的地方,注意一个数据集是两个文件,一个bag包,一个zip文件,真值(groundtruth)的data.csv在zip文件里面。我发现了,我下的data.csv不是我跑的那个数据集的。但是后来发现我的那个V1_01_easy数据集里面没有真值的data.csv。跑完data文件夹下多了个result.csv。原创 2024-02-26 07:26:57 · 457 阅读 · 0 评论 -
自己进行源码安装evo 20221013
我换了个源码装evo教程,按照下面这个教程里面红框命令来的,更新pip我没有执行暂时不想更新,这么就就装成了,可能是要下evo的python2分支的代码。刚刚我又再公司笔记本Ubuntu上按照这个教程来源码装evo,也还是不行,现象如下。我两个月前进行过一次源码安装evo,没有成功,当时按照这个教程来的。evo源码安装好是不是因为这样就可以改一些json配置文件。后来在自己笔记本Ubuntu上是二进制安装成的evo。现象是这样的,这是在自己笔记本Ubuntu上。原创 2024-02-26 07:11:59 · 328 阅读 · 0 评论 -
OrinNX上装vinsfusiongpu过程整理 20230626
注意我是opencv和opencv_contrib一起编译的,为了避免相同的报错和更改,我直接拷贝的之前合众上改好的opencv和opencv_contrib,都是3.4.1版本的。把里面所有带有opencv路径的cmakelists里面的opencv路径改为实际的路径,cv_bridge的路径不加应该也是可以的,但是这里已经有了,而且路径就和我现在的cv_bridge功能包路径一样就暂时不用改了。cv_bridge 首先卸载之前二进制的cv_bridge,注意我没有用apt purge。原创 2024-02-23 12:25:44 · 771 阅读 · 0 评论