【计算机视觉】opencv姿态解算6 理论算法调研 PNP问题 5种算法

2023-05-16

关于PnP(pespective-n-point)的一些方法

最小PnP问题

P3P问题中假设没有噪声,使用几何约束,可以解得相机的位姿。不具有唯一解。 
P4P问题中分为线性方法和基于P3P的方法。

最小二乘的观点

  • 迭代最小化一个代价函数(平方误差)。这些方法相对于之前的方法更加准确,在一定的噪声的情况下,返回一个最大似然估计。
  • 直接最小二乘方法DLS

常用方法

  • NPL: The N-Point Linear (NPL) method of Ansar and Daniilidis [1].
  • EPnP: The approach of Lepitit et al. [16].
  • SDP: The Semi Definite Program (SDP) approach of Schweighofer and Pinz [23].
  • DLS: The Direct Least-Squares (DLS) solution presented in this paper. An open source implementation of DLS is available at www.umn.edu/ ̃joel
  • DLS-LM: Maximum-likelihood estimate, computed using iterative Levenberg-Marquardt (LM) minimization of the sum of the squared reprojection errors, initialized with DLS.

solvePnP里有三种解法:P3P, EPnP,迭代法(默认)(opencv3里多了DLS和UPnP解法)

OpenCV提供了三种方法进行PNP计算,三种方法具体怎么计算的就请各位自己查询opencv documentation以及相关的论文了,我看了个大概然后结合自己实际的测试情况给出一个结论,不一定正确,仅供参考:

方法名

说明

测试结论

CV_P3P

这个方法使用非常经典的Gao方法解P3P问题,求出4组可能的解,再通过对第四个点的重投影,返回重投影误差最小的点。

论文《Complete Solution Classification for the Perspective-Three-Point Problem》

可以使用任意4个特征点求解,不要共面,特征点数量不为4时报错

CV_ITERATIVE

该方法基于Levenberg-Marquardt optimization迭代求解PNP问题,实质是迭代求出重投影误差最小的解,这个解显然不一定是正解。

实测该方法只有用4个共面的特征点时才能求出正确的解,使用5个特征点或4点非共面的特征点都得不到正确的位姿。

 

只能用4个共面的特征点来解位姿

CV_EPNP

该方法使用EfficientPNP方法求解问题,具体怎么做的当时网速不好我没下载到论文,后面又懒得去看了。

论文《EPnP: Efficient Perspective-n-Point Camera Pose Estimation》

对于N个特征点,只要N>3就能够求出正解。


注意点1:solvePnP里有三种解法:P3P, EPnP,迭代法(默认);opencv2里参数分别为CV_P3P,CV_EPNP,CV_ITERATIVE (opencv3里多了DLS和UPnP解法)。

注意点2:solvePnP需要至少3组点:P3P只使用4组点,3组求出多个解,第四组确定最优解;EPnP使用大于等于3组点;迭代法调用cvFindExtrinsicCameraParams2,进而使用SVD分解并调用cvFindHomography,而cvFindHomography需要至少4组点。

2方法简说

solvePnP里有三种解法:P3P, EPnP,迭代法(默认);opencv2里参数分别为CV_P3P,CV_EPNP,CV_ITERATIVE (opencv3里多了DLS和UPnP解法)。 
注意点2:solvePnP需要至少3组点:P3P只使用4组点,3组求出多个解,第四组确定最优解;EPnP使用大于等于3组点;迭代法调用cvFindExtrinsicCameraParams2,进而使用SVD分解并调用cvFindHomography,而cvFindHomography需要至少4组点。 
具体过程如下 
- 将空间点和图像点齐次化,得到图像点矩阵 m 空间点矩阵 M ,求取矩阵M的平均值 Mc , 
- 计算另外一个矩阵 mm=(MMc)T(MMc)  
- 对空间点矩阵 mm 进行SVD分解, mm=UWV  
Rt=V  
Tt=McRt  
Mxy=VtMT+Tt  
- find homography between ( m Mxy )得到矩阵 H  
H=[h1,h2,t] ,然后归一化 
h1=h1h1  
t=th1+h2  
h3=h1×h2  
H:=[h1,h2,h3]  
- 最终结果 Rf=HRt  
tf=HTt+t

其他

R的第i行 表示摄像机坐标系中的第i个坐标轴方向的单位向量在世界坐标系里的坐标; 
R的第i列 表示世界坐标系中的第i个坐标轴方向的单位向量在摄像机坐标系里的坐标; 
t 表示世界坐标系的原点在摄像机坐标系的坐标; 
-R的转置 * t 表示摄像机坐标系的原点在世界坐标系的坐标。(原理如下图,t表示平移,T表示转置) 

DLS

  1. http://onlinelibrary.wiley.com/doi/10.1002/rob.21620/epdf
  2. http://www.voidcn.com/blog/abc20002929/article/p-2288889.html
  3. http://blog.csdn.net/aptx704610875/article/details/48915149
  4. https://github.com/gaoxiang12/rgbd-slam-tutor2/blob/master/src/pnp.cpp

POSIT算法的原理--opencv 3D姿态估计

 转载 POSIT算法的原理--opencv 3D姿态估计

3D姿态估计-POSIT算法

 

POSIT算法,Pose from Orthography and Scaling with Iterations, 比例正交投影迭代变换算法:

用于估计物体的3D姿态(相对于镜头的平移和旋转量)。算法正常工作的前提是物体在Z轴方向的“厚度”远小于其在Z轴方向的平均深度,比如距离镜头10米远的一张椅子。

 

算法流程:

假设待求的姿态,包括旋转矩阵R和平移向量T,分别为


透视投影变换为:

 

上式中的f是摄像机的焦距,它的具体值并不重要,重要的是f与x和y之间的比例,根据摄像头内参数矩阵的fx和fy可以得到这个比例。实际的运算中可直接令f=1,但是相应的x和y也要按照比例设定。比如,对于内参数为[fx,fy,u0,v0]的摄像头,如果一个像素的位置是(u,v),则对应的x和y应为

设世界坐标系中的一点为(Xw,Yw,Zw),则


有必要再解释一下旋转矩阵R和平移向量T的具体意义:

R的第i行表示摄像机坐标系中的第i个坐标轴方向的单位向量在世界坐标系里的坐标;

R的第i列表示世界坐标系中的第i个坐标轴方向的单位向量在摄像机坐标系里的坐标;

T正好是世界坐标系的原点在摄像机坐标系的坐标,特别的,Tz就代表世界坐标系的原点在摄像机坐标系里的“深度”。

根据前面的假设,物体在Z轴方向的‘厚度’,即物体表面各点在摄像机坐标系中的Z坐标变化范围,远小于该物体在Z轴方向的平均深度。一定要注意,“厚度”和“深度”都是相对于摄像机坐标系的Z轴而言的。当世界坐标系的原点在物体的中心附近时可以认为平均深度就是平移向量T中的Tz分量,即各点的Zc的平均值是Tz,而Zc的变化范围相对于Tz又很小,因此可以认为,Zc始终在Tz附近,Zc≈Tz。

根据这个近似关系,可得


这就是我们的迭代初值。在这种初始状态下,我们假设了物体的所有点在同一个深度上,这时的透视变换就退化为了一个比例正交投影POS。也就是,我们的迭代开始于一个比例正交投影,这也是POSIT算法名字的由来。

我们前面得到了:


由于我们给了w一个估计值,因此可以先将其看做已知量,删掉第三行(这样方程中就少了4个未知量,更方便求解),得到


由于w被看做已知,因此上面的迭代方程可以看做有8个未知量,分别是



给定一对坐标后(一个是世界坐标系的坐标,一个是图像坐标系的坐标,它们对应同一个点),我们就可以得到2个独立的方程,一共需要8个独立方程,因此至少需要给定4对坐标,而且对应的这4个点在世界坐标系中不能共面。为什么不能共面?如果第4个点与前三个点共面,那么该点的“齐次坐标”就可以被其他三个点的“齐次坐标”线性表示,而迭代方程的右侧使用的就是齐次坐标,这样由第四个点得到的方程就不是独立方程了。这里之所以强调“齐次坐标”是因为,只要三个点不共线,所有其他点(即使不共面)的“常规坐标”都可以被这三个点的“常规坐标”线性表示,但“齐次坐标”则要求共面。

OK,假如我们获得了4个不共面的点及其坐标,并通过迭代方程求出了8个未知量。这时我们就可以算出向量sR1和sR2的模长。而由于R1和R2本身都是单位向量,即模长为1。因此我们可以求出s,进而求得R1和R2以及Tz=f/s:


有了R1和R2就可以求出R3,后者为前两个向量的叉积(两两垂直的单位向量)。


至此,整个旋转矩阵R和平移向量T,共12个未知量,就都求出来了。不过,这只是近似值,因为我们一开始时假设了w=1(或Zc=Tz),即物体上所有的点的深度都是Tz。现在我们有了一个近似的转换矩阵,可以利用它为各点计算一个新的深度,这个深度比Tz更准确。新的深度Zc和新的迭代系数w等于:


这时,由于每个点的有不同的深度,他们也就有了不同的迭代系数w。接着,将每个点的新w值代入迭代方程中,重新得到8个方程。由于这一次每个点的w(表征了深度信息)都比上一次迭代时更准确,因此会得到更精确的转换矩阵,而更精确的转换矩阵反过来又能让我们求得各点更精确的深度信息和w。如此往复循环反馈,就可逐步逼近精确解。

 

openCV里用cvPOSIT()函数实现POSIT迭代,具体的函数用法网上有很多介绍不再重复了。顺带提一下openCV里的另两个函数solvePNP()和cvFindExtrinsicCameraParams2(),这两个函数功能与POSIT类似,也是在已知一组点对应的图像坐标和世界坐标以及摄像头内参数的情况下计算物体的3D姿态,不过与POSIT不同的是,它们不是求近似解,而是直接求精确解。既然可以直接求精确解了,那POSIT估计算法还有什么意义呢?

其实理论上,只要获得3个点的信息,就可以得出旋转矩阵R和平移向量T了:

R和T共有12个未知量,每个点的坐标代入前面的“---原始方程--”中,消去w,可得到2个独立的方程,3个点就可以得到6个线性方程,再加上R自身的正交矩阵特征(每行、每列都是单位向量,模长为1)又可以得到6个独立的方程(非线性),共12个方程。

但实际中,解非线性方程很麻烦,所以openCV中应该是用了其他的优化方法。最无奈地,我们可以找6个点,每个点用“---原始方程--”消去w得到2个线性方程,最终也能得到12个方程,不过由于这种方法的求解过程中直接无视了正交矩阵R本身的特征,最后得到的结果会由于点坐标的测量误差和计算误差而稍微违反R自身的正交矩阵约束,当然这可以通过迭代弥补,但会增加算法的复杂度。可能有人会疑惑,同样是从3行的“---原始方程--”转化成2行的方程,为什么POSIT方法只需要四个点就可以求解,而这里却需要6个点?要知道,这里只是利用线性关系消去了w,但保留了原来第三行中的未知量,因此未知量的数量保持12不变;而POSIT方法中,直接为w选取了一个估计值,并删去了“---原始方程--”的第3行,这样方程中才少了4个未知量只剩下8个,所以利用4个点的坐标才得以求解。

于是,我们大概就能猜到既然有精确求解的算法却还要保留POSIT估计算法的原因了:如果只有少数点的信息(比如4个),又不想求解非线性方程,那就该POSIT上了。


Pose estimation algorithm 之 Robust Planar Pose (RPP)algorithm

转载 Pose estimation algorithm 之 Robust Planar Pose (RPP)algorithm
The RPP algorithm gives a more stable tracking (less jitter) than ARToolKit's pose estimation algorithm.

The robust pose estimator algorithm has been provided by G. Schweighofer and A. Pinz (Inst.of l.Measurement and Measurement Signal Processing, Graz University of Technology). Details about the algorithm are given in a Technical Report: TR-EMT-2005-01, available here. Thanks go to Thomas Pintaric for implementing the C++ version of this algorithm.

计算机视觉

1. 内参数标定

2. 外参数标定即姿态估计问题。从一组2D点的映射中估计物体的3D姿态。

3. 从三个对应点中恢复姿态,需要的信息是最少的,称为“三点透视问题”即P3P。同理,扩展到N个点,就称为“PnP”。

4. 基于视觉的姿态估计根据使用的摄像机数目分为单目视觉和多目视觉。根据算法又可以分为基于模型的姿态估计和基于学习的姿态估计。

5. OpenCV中有solvePnP以及solvePnPRansac用来实现已知平面四点坐标确定摄像头相对世界坐标系的平移和旋转。cvPOSIT基于正交投影,用仿射投影模型近似透视投影模型,不断迭代计算出估计值。此算法在物体深度相对于物体到相机的距离比较大的时候,算法可能不收敛。

6. 从世界坐标系到相机坐标系的转换,需要矩阵[R|t],其中R是旋转矩阵,t是位移向量。如果世界坐标系为X,相机坐标系对应坐标为X‘,那么X' = [R|t]*X。从相机坐标系到理想屏幕坐标系的变换就需要内参数矩阵C。那么理想屏幕坐标系L = C*[R|t]*X。如何获得[R|t],大致是已知模板上的几个关键点在世界坐标系的坐标即X已知,然后在摄像头捕获的帧里获得模板上对应点在屏幕坐标系的坐标即L已知,通过求解线性方程组得到[R|t]的初值,再利用非线性最小二乘法迭代求得最优变换矩阵[R|t]。

7. 大多数情况下,背景是二维平面,识别的物体也是二维平面。对于ARToolkit,识别的Targets就是平面的(但是这种方法鲁棒性不好)。如果内参数矩阵是已知的,那么知道4个或者更多共面不共线的点就可以计算出相机的姿态。

8. 相机姿态估计的问题就是寻找相机的外参数,即是最小化误差函数的问题。误差函数有的基于image-space,有的基于object-space。

9. RPP算法基于object-space为误差函数提供了一种可视化的方法。误差函数有两个局部极小值。在无噪声条件下,第一个局部极小值跟正确的姿态对应。另外的误差函数的极小值就是标准姿态估计算法为什么会抖动的原因。由于姿态估计算法最小化误差函数总是要使用迭代算法,因此需要一个初值。如果初值接近第二个局部极小值,那么迭代算法就收敛到错误的结果。

10. 估计第一个姿态,RPP算法使用任何已知的姿态估计算法,在这里里,使用迭代算法。从第一个姿态使用P3P算法估计第二个姿态。这个姿态跟误差函数的第二个局部极小值接近。使用估算的第二个姿态作为初值,使用迭代算法获得第二个姿态。最终正确的姿态是有最小误差的那个。

11. 这类问题最终都是解线性方程组AX=b的问题。当b∈R(A)时,x=A的广义逆*b;当b∈不R(A)时,能否是Ax接近b呢,即是否有x使||Ax-b||最小,习惯上用2-范数即欧式范数来度量。最小二乘解常存在,然后这样的解未必是唯一的。当在方程无解的情况下,要找到最优解。就是要最小化所有误差的平方和,要找拥有最小平方和的解,即最小二乘。最小化就是把误差向量的长度最小化。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【计算机视觉】opencv姿态解算6 理论算法调研 PNP问题 5种算法 的相关文章

  • FreeRTOS系列|任务创建和删除

    1 任务创建和删除API函数 xTaskCreate 函数 xff1a 动态创建一个新的任务 xff0c 每个任务都需要RAM来保存任务状态 任务控制块 43 任务栈 xff0c 此接口采用动态分配内存资源 BaseType t span
  • FreeRTOS系列|多任务调度

    1 多任务启动流程 多任务启动流程如下表所示 启动后以下各函数由上至下依次执行含义osKernelStart 启动内核vTaskStartScheduler 启动任务调度器xPortStartScheduler 启动调度器prvStartF
  • PTP 报文格式

    HeaderBodySuffix34 字节Variable lengthOptional 所有的 PTP 帧都包含一个公共报头 xff0c 它决定了协议版本和消息类型 xff0c 还定义了消息的剩余内容 所有多字节字段以大端顺序发送 xff
  • makefile:make -C M=参数的使用

    Makefile为 xff0c PWD span class token operator 61 span span class token punctuation span shell pwd span class token punct
  • BW笔记(2011-10-24更新至No.237)

    1 同一个变量名的UID可能有多个 xff0c 记得注意 2 在查找时要注意技术名称还是名称 xff0c 因为查询时会在两个中进行 xff0c 模糊查询时要细心 xff0c FV与V都可以查到 3 复制的时候注意长度 xff0c 过长的会不
  • rpmsg 内核开发 用户层接口

    地址 xff1a https blog csdn net thisway diy article details 129195479 韦东山 Tina Linux E907开发指南 AMP 环境搭建 7 1 rpmsg 内核开发 7 2 r
  • __raw_writel, writel_relaxed 和 writel的区别

    因为对别的平台不了解 xff0c 下面仅谈它们在ARM上的区别 raw writel xff1a 因为有volatile关键字 xff0c 所以编译器不会打乱多个 raw writel的执行顺序 对于ARM而言 xff0c 当多个写以代码的
  • WFE和WFI的区别

    1 概念 xff1a WFI Wait for interrupt 和WFE Wait for event 是两个让ARM核进入low power standby模式的指令 xff0c 由ARM architecture定义 xff0c 由
  • Ubuntu16.04安装中文输入法

    转载地址 xff1a http blog csdn net suxiang198 article details 52040283 Ubuntu16 04安装完后 xff0c 和12 04以及14 04都不一样 xff0c 并没有中文输入功
  • QT linux安装

    转载地址 xff1a http www cnblogs com tangkaixuan p 6504102 html 文章来自https lug ustc edu cn sites qtguide 1 4 Qt在Linux下安装 Qt在Li
  • Linux CAN编程详解

    转载地址 xff1a http velep com archives 1181 html Linux CAN编程详解 是一篇百度文库上的文档 xff0c 主要描述了以下内容 xff1a can总线介绍及其帧类型 xff1b Linux 系统
  • buildroot学习(十)——at91sam9g45软件平台更新

    转载地址 xff1a https blog csdn net srf1986 article details 52474697 xff08 xff11 xff13 xff16 xff09 spice protocol In computin
  • killall 、kill 、pkill 命令详解

    转载地址 xff1a https www cnblogs com rsky p 4886043 html killall 命令 Linux系统中的killall命令用于杀死指定名字的进程 xff08 kill processes by na
  • PCIe扫盲——PCIe简介

    转载地址 xff1a http blog chinaaet com justlxy p 5100053066 PCI Express是继ISA和PCI总线之后的第三代I O总线 xff0c 即3GIO 由Intel在2001年的IDF上提出
  • Adaptive Autosar通讯层:ARA::COM中的Instance Identifiers

    一般概念 实例标识符 在收发两端都是要用的 是很核心的概念 proxy端用来搜索服务 xff0c skeleton端用来创建服务实例 站在API的角度来看 xff0c 这样的识别符是和特定的技术绑定的 所以 xff0c 标识符的结构和内容都
  • BW:数据源抽取机制(这篇是以前的笔记,写得很差,有不少错的地方,留着给自己看)

    题记 xff1a 忽然想到这么个问题 xff0c 后勤数据源和非后勤数据初始化有何区别 xff0c 然后进行周边的拓展 xff0c 所以就形成了下文 大部分知识源于 TBW350 和 SAP SDN 对数据源抽取机制的深入探讨 一 什么数据
  • 【ARA com API】ara::core::Optional

    文章目录 ara core Optional 是什么标准中的代码示例 ara core Optional 是什么 实际上就是std optional 但是当前的AP标准没有支持到那么新版本的C 43 43 标准 xff08 我没有具体研究是
  • ROS学习总结(1)--入门、学习路线

    最近由于项目需要 xff0c 我被分配到机器人驱动模块 xff0c 由此开始研究学习ROS xff0c 在此记录学习ROS的方法 过程 经历与应用 本节记录ROS学习路线 ROS xff08 robot operation system x
  • 使用uart数据起飞

    使用uart得到的位置信息进行起飞 在得到了位置信息的前提下 xff0c 我们开始进行模拟起飞 xff0c 即使用usb供电 xff0c 人工控制其高度 xff0c 在上位机查看油门大小 xff0c 电机的pwm输出 commander c
  • AirSim(五)---理解篇: Airsim世界坐标系、NED坐标系、机体坐标系以及控制相关API接口函数

    目录 1 坐标系 coordinate system 1 AirSim API的坐标系 xff1a NED 坐标系 with SI unit 2 Unreal Engine的坐标系 xff08 3 xff09 AirSim全局坐标系 61

随机推荐

  • 深度学习中常用的优化算法(SGD, Nesterov,Adagrad,RMSProp,Adam)总结

    深度学习中常用的优化算法 SGD Nesterov Adagrad RMSProp Adam 总结 1 引言 在深度学习中我们定义了损失函数以后 xff0c 会采取各种各样的方法来降低损失函数的数值 xff0c 从而使模型参数不断的逼近于真
  • 双系统安装ubuntu 22.04 LTS(一步到位)

    作为一个拥有两次都是一次成功安装好双系统的经验的人 xff0c 我觉得我可以借这个文章仔细讲述一下 xff0c 让大家都可以双系统安装都是一次成功 为什么有着两次安装经验呢 xff0c 第一次安装完成后由于电脑的内存不太够了 xff0c 然
  • UART、RS232、RS485 串行通信详解

    一 UART通信 UART是Universal Asynchronous Receiver Transmitter的缩写 xff0c 意即通用异步串行通信接口 xff0c 是最常用的通信技术之一 xff0c 广泛用于设备与电脑之间 设备与设
  • I2C总线基础知识及操作详解

    I2C总线是一种简单的双向两线式同步串行总线 xff0c 最初由Philips公司开发 xff0c 后又经过几次发展和完善 xff0c 目前已被业界厂商广泛采用 xff0c 成为最常用的板级通信总线之一 xff0c 大量应用于处理器与外围设
  • 对AI的理解及应用的思考

    1 概述 1 1 常用术语 1 2 AI学习方式及地位 序号 学习方法 地位 1 强化学习 Reinforcement Learning 犹如蛋糕上的一颗樱桃 2 监督学习 Supervised Learning 犹如蛋糕外的一层糖霜 3
  • (65)如何根据句柄从二级、三级结构句柄表中找到内核对象

    一 回顾 上一篇博客介绍了如何遍历一级句柄表 一级句柄表非常简单 xff0c 就是一个4KB页 xff0c 最多存储512个句柄表项 如果句柄数量在 512 1024 512 之间 xff0c 句柄表就是二级结构 xff1b 如果句柄数量大
  • BW:BW与第三方BI接口设计与实现:APD、Open Hub、RFM

    最近公司新上了国内某 CRM系统 xff0c SAP的 CRM也光荣下线了 但是紧接着就出现了一些需求 xff0c CRM自带一款小型 BI xff0c 需要一些 SD的数据 xff0c 但是把 R3的数据给他们进行计算的话 xff0c 不
  • Ubuntu下查看CPU、内存和硬盘详细信息的几个命令

    转载自https www cnblogs com shixiangwan p 7066085 html CPU xff1a 型号 xff1a grep 34 model name 34 proc cpuinfo awk F 39 39 39
  • python 小点心---execvp

    execvp会用即将运行的进程的内存替换掉调用进程的内存 xff0c 更进一步讲 xff0c 就是把当前进程的机器指令都清空 xff0c 然后载入被execvp运行起来的进程的机器指令 coding 61 utf 8 import os i
  • jenkins + gitlab + docker + harbor 实现自动触发更新

    当使用微服务方案后 xff0c 面临在大量的项目构建和部署工作 xff0c 借助于jenkins的持续集成 xff0c 可以快速把应用打包成docker镜像 xff0c 实现自动部署 xff0c 加快项目的迭代 一 环境部署 系统IP主机名
  • C++ -- STL文件解析

    1 STL文件格式 STL文件是一种用许多空间小三角形面片逼近三维实体表面的3D模型 STL模型给出了组成三角形法向量的3个分量 用于确定三角面片的正反方向 及三角形的3个顶点坐标 一个完整的STL文件记录了组成实体模型的所有三角形面片的法
  • Ubuntu 查看CPU信息

    Ubuntu 查看cpu个数及核心数 总核数 span class token operator 61 span 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 span class token operator 61 span
  • 韩顺平老师Java基础听课笔记(一)

    Java运行机制 xff1a 1 javac 编译 java文件 生成 class文件 javac Hello java 2 java运行编译后的 class文件 xff08 java Hello xff09 编译后可在Windows Li
  • 韩顺平老师 Java基础听课笔记(二)

    变量 xff1a xff08 先声明后使用 xff09 定义变量 xff1a 1 int a 61 1 2 int b b 61 2 变量在同一个作用域 xff08 同一个方法 xff09 内不能重名 变量三要素 xff1a 变量名 变量值
  • VScode上传到git仓库详细教程

    文章有点啰嗦 坚持看完 xff01 xff01 xff01 首先下载git https git scm com downloads 下载成功之后 xff0c 一直点击next直到安装成功 xff0c 在桌面上点击鼠标右键出现 点击Git B
  • [视觉测距]单目视觉定位测距的两种方式(1)

    单目定位和双目定位的选择 xff0c 我觉得主要还是成本和时间的考虑 之前也尝试过双目定位 xff0c 感觉要更精准些 xff0c 但双目测距需要对两幅图像进行图像变换和极线匹配 xff0c 稍微耗时了一些 这几天尝试了一下单摄像头进行测距
  • [学习SLAM]Quaternion 插值/ 用四元数插值来对齐IMU和图像帧

    小白 xff1a 师兄 xff0c 好久没见到你了啊 xff0c 我最近在看IMU xff08 Inertial Measurement Unit xff0c 惯性导航单元 xff09 相关的东西 xff0c 正好有问题求助啊 师兄 xff
  • 【学习SLAM】vins笔记

    VINS ROS source catkin ws devel setup bash 3 1 1 Open three terminals launch the vins estimator rviz and play the bag fi
  • CSDN 还是不能改头像!!!

    都好几个月了 xff0c 技术问题么 xff0c 还是爬梯开大会 xff0c 连这个都不让改了 真不爽
  • 【计算机视觉】opencv姿态解算6 理论算法调研 PNP问题 5种算法

    关于PnP xff08 pespective n point xff09 的一些方法 最小PnP问题 P3P问题中假设没有噪声 xff0c 使用几何约束 xff0c 可以解得相机的位姿 不具有唯一解 P4P问题中分为线性方法和基于P3P的方