solvepnp三维位姿估算

2023-05-16

一、前言

关于PNP问题就是指通过世界中的N个特征点与图像成像中的N个像点,计算出其投影关系,从而获得相机或物体位姿的问题。

opencv提供的solvepnp函数就是用来解决pnp问题。利用该函数可以实现测算相机/物体的空间姿态,也可以用来空间定位。


二、solvepnp函数解析

solvepnp函数原型

bool solvePnP(InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int flags=ITERATIVE )

objectPoints:特征点的世界坐标,坐标值需为float型,不能为double型,可以为mat类型,也可以直接输入vector<point3f>

imagePoints:特征点在图像中的像素坐标,可以输入mat类型,也可以直接输入vector<point3f>,注意输入点的顺序要与前面的特征点的世界坐标一一对应

cameraMatrix:相机内参矩阵

distCoeffs:相机的畸变参数【Mat_<double>(5, 1)】

rvec:输出的旋转向量

tvec:输出的平移矩阵

函数分析

solvepnp通过2D点和3D点求解相机的位姿(R,t),在opencv3中常用的方法是epnp, DLS,迭代法。如果3D点分布在一个平面上,那么通过点对(3D点2D点)算出单应矩阵。然后进行SVD分解。如果平面,可直接使用SVD分解。在opencv2中,没有DLS方法。


三、旋转向量转换旋转矩阵

应用罗德里格斯变换

double rm[9];

cv::Mat rotM(3, 3, CV_64FC1, rm);

Rodrigues(rvec, rotM);


四、由旋转矩阵求得姿态角

代码:

float theta_z = atan2(rotMat[1][0], rotMat[0][0])*57.2958;

float theta_y = atan2(-rotMat[2][0], sqrt(rotMat[2][0] * rotMat[2][0] + rotMat[2][2] * rotMat[2][2]))*57.2958;

float theta_x = atan2(rotMat[2][1], rotMat[2][2])*57.2958;


理论:

以下图片内容转载自VShawn


最后得到的三个旋转角度都是相对于世界坐标系的旋转角度。


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

solvepnp三维位姿估算 的相关文章

  • 嵌入式Linux——kmsg:分析/proc/kmsg文件以及写自己的/proc/mymsg

    简介 xff1a 本文主要分析 proc kmsg文件的形成过程以及使用cat proc kmsg查看log buf中的信息时所要经历的代码 并结合上面的分析写自己的 proc mymsg和myprintk Linux内核 xff1a li
  • 嵌入式Linux——学习经历

    简介 xff1a 本文主要介绍我学习嵌入式的经历 并结合自身的经验希望可以对大家有所帮助 视频及教材 xff1a 郭天祥相关视频及教材 xff0c 天狼星相关视频及教材 xff0c 野火迷你相关视频及教材以及韦东山100ask官网所介绍的视
  • 指针简介(3)—— 指针函数与函数指针

    声明 xff1a 本文是阅读周立功老师的程序设计与数据结构后所写 xff0c 很多内容其实是书中的内容 xff0c 所以如果您想了解更多这方面的知识 xff0c 您可以阅读这本书 在前面一节我们简单介绍了指针 数组 指针数组以及数组指针 而
  • Docker常用操作命令

    成功安装Docker之后 启动Docker 如果遇到启动问题请参考 https blog csdn net w1316022737 article details 83692701 下来简单介绍Docker容器常用操作命令 安装操作MySQ
  • DIY 自己的路由器系统

    sudo apt get install subversion build essential libncurses5 dev zlib1g dev gawk git ccache gettext libssl dev xsltproc z
  • (ROS)解决gazebo闪退和tk窗口不显示问题

    问题1 xff1a 运行gazebo的时候 xff0c gazebo窗口闪退 解决办法 xff1a 1 删除gazebo xff0c 重新安装适合的版本然后再重新运行 或者 2 关闭加速3D图形 xff08 需要关闭虚拟机 rostopic
  • 【常见的优化算法介绍】

    常见的优化算法介绍 1 批量梯度下降算法 xff08 batch gradient descent BGD xff09 每次迭代都需要把所有样本都送入 xff0c 这样的好处是每次迭代都顾及了全部的样本 xff0c 做的是全局最优化 但是有
  • 树莓派无显示屏 ssh 连接的方法

    一般来说 xff0c 树莓派买回来很少配置显示屏 xff0c 通常只通过ssh远程登陆来控制树莓派 而树莓派通过ssh连接有三种方法 一 通过网线将树莓派连接到路由器上 这个方法成功率极高 xff0c 我一般都是采用这种方法 1 允许ssh
  • AIRSIM 中文使用手册-2021/4/6

    AIRSIM 中文使用手册 截至2021 4 6 前言1 HomeHome日志变更 2 获取AIRSIM下载二进制文件在Windows上构建在Linux上构建Linux上的DockerAzure上的AirSim开发环境自定义虚幻环境AirS
  • 最新研究:AI已可诊断50种眼疾,1.2秒内确认神经系统疾病

    本文由人工智能观察编译 译者 xff1a Sandy 近年来 xff0c 人工智能技术与医疗健康领域的融合不断加深 xff0c 且在科技巨头与资本巨头积极布局的努力下 xff0c 智能医疗正在不断取得新的突破 而根据 自然医学 xff08
  • 如何将Set转换为Array?

    本文翻译自 xff1a How to convert Set to Array Set seems like a nice way to create Arrays with guaranteed unique elements but i
  • 小米2013校园招聘笔试题

    题目 xff1a 一个数组里 xff0c 除了三个数是唯一出现的 xff0c 其余的都出现偶数个 xff0c 找出这三个数中的任一个 比如数组元素为 1 2 4 5 6 4 2 xff0c 只有1 5 6这三个数字是唯一出现的 xff0c
  • NVIDIA Jetson NX 模组初始化(刷机+扩容)

    项目场景 xff1a 老师让我学习使用NVIDIA Jetson NX做项目开发 于是自己研究一下 由于第一次接触 前期踩坑用了两周时间 特此记录 1 刷机 使用的是NVIDIA Jetson NX 模组 xff0c 网上买大约4 5k x
  • centos+docker设置网易163镜像加速

    镜像加速 鉴于国内网络问题 xff0c 后续拉取 Docker 镜像十分缓慢 xff0c 我们可以需要配置加速器来解决 xff0c 我使用的是网易的镜像地址 xff1a http hub mirror c 163 com 新版的 Docke
  • WSL(ubuntu2204)xfce4安装中文环境和fcitx5框架及中文输入法

    安装中文语言包 sudo apt install language pack zh hans 配置中文显示 首先运行如下命令配置 locale sudo vi etc locale gen 找到 zh CN UTF 8 UTF 8 并取消注
  • detectron2: An object named ‘XXXX‘ was already registered in ‘META_ARCH‘ registry

    根据该作者 https blog csdn net qq 20793791 article details 107924375 所述的方法 xff0c 我又想到了 看我的目录文件是否是 python package xff0c 突然发现虽然
  • ubuntu20.04中python2和python3切换

    Ubuntu 20 04 LTS已经移除Python2 xff0c 默认安装python3 xff0c 但是很多时候还是会经常用到python2 7版本 xff0c 这里首先单独安装python2 7 xff0c 然后配置python2和p
  • ubuntu18.04 pycorrector安装

    今天尝试对语音识别转录后的文字进行纠错 xff0c 然后就试了一下pycorrector xff0c 在安装pycorrector的时候遇见了下面的问题 xff1a base pip install pycorrector Looking

随机推荐

  • libxcb-xinerama.so.0: cannot open shared object file: No such file or directory

    今天在ubutnu 18 04上装了mayavi 但是写代码可视化点云的时候出现了下面的情况 xff1a QLibraryPrivate loadPlugin failed on 34 home eric anaconda3 envs po
  • 生产者/消费者模式(转载)

    简介 在实际的软件开发过程中 xff0c 经常会碰到如下场景 xff1a 某个模块负责产生数据 xff0c 这些数据由另一个模块来负责处理 xff08 此处的模块是广义的 xff0c 可以是类 函数 线程 进程等 xff09 产生数据的模块
  • 【飞控学习】APM和PX4飞控源码下载及安装

    对于无人机开发的专业人员来说 xff0c APM和PX4是现今市面上最强大的2个开源无人机飞控 学习和查看他们2者的源码 xff0c 将会提高我们对整个无人机的姿态解算和控制的深入理解 现在我们就来下载2者的源码和安装查看2者源码的软件 1
  • Skye无人机换遥控接收机遇到的坑

    Skye的接收机是可以直接用天地飞对码的 xff0c 如果要更换接收机的话需要支持sbus协议或者要有个转码器 xff0c 要更换接收机的话要特别注意 xff0c skye主板上集成了一个反相器 xff01 如果用单片机自己做转码器的话直接
  • opencv算法移植到嵌入式平台(1): opencv工程打包成库

    1 将要用到的opencv 相关的库打包 xff0c 利用你要移植的平台第三方编译器进行交叉编译 xff0c 因为如果你利用其它编译器即使编译通过了 xff0c 在另外的工程调用时也会提示错误 xff0c 一般会报错误 xff1a unde
  • 值得你关注的Android6.0上的重要变化(一)

    伴随着众多新特性和新功能 xff0c Android6 0 xff08 API level 23 xff09 在系统和API上都有着诸多的改变 本文着重介绍几个关键变化 xff0c 以帮助你理解这些改变对你的APP产生的影响 一 运行时权限
  • 编译开源LibreOffice的Android版本——开源Office文档查看器

    项目近期需要用到文档查看器 xff0c 现有的WPS之类确实比较好用 xff0c 无奈还需要对应用做些处理 xff0c 只好寻找开源的实现 开源的文档查看器主要两种方式 xff0c 一种是完整的Android版本实现 xff0c 直接拿来即
  • Linux下利用信号的异步串口中断响应

    先悔过一下 因为一个月前就在学习这个 xff0c 当时解决的差不多了 xff0c 想着抽个空再记录这些 xff0c 没想到这么短的时间就已经忘得 差不多了 xff0c 真是不好 xff0c 应该趁热打铁 废话不多说了 xff0c 这里主要介
  • 值得你关注的Android8.0(Android O)上的重要变化

    刚适配完Android7 0还没多久 xff0c 就看到Google官方推出的Android8 0 xff08 Android O xff09 的开发者预览版新闻 xff0c 我的心情你可以好好想想 对于上层应用开发者的我来说 xff0c
  • Android应用流量统计——NetworkStatsManager使用

    在没有Root的情况下 xff0c Android应用流量统计在6 0之前一直没有太好的办法 xff0c 官方虽然提供了TrafficStats xff0c 但其主要功能是设备启动以来流量的统计信息 xff0c 和时间信息无法很好的配合 最
  • Java处理http协议相关初步(二)——httpserver

    这里的HttpServer xff0c 并不是哪里专门下载的类库了 xff0c 而是在JDK1 6中自带的 xff0c 在com sun net httpserver包中 xff0c 提供了简单的较高层次意义上的Http ServerAPI
  • Android源码下载与编译之emulator与adb

    最近碰到一个问题 xff0c 就是Android的emulator只能打开16个 xff0c 在网上找到文章有说adb连接数量是16个的 xff0c 但是没说这个avd也只能16个 xff08 当然是在一台电脑上 xff09 于是 xff0
  • 自动化刷EOS资金盘(类Fomo3D)游戏

    7月底在以太坊的Fomo3D游戏异常火爆 xff0c 两三天后 xff0c 在EOS主网上 xff0c 国内各种仿品相继上线 xff0c 留心观察 xff0c 这些游戏里都有着自动化交易的身影 本文为你分析如何实现一个简单的EOS自动化交易
  • 毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(三)

    接着上篇 xff0c 这篇侧重于具体的笔试 面试的问题 xff0c 至于是哪个公司的就不去追究了 xff0c 但一定是经常问到的 xff0c 而且我嵌入式系统工程师和移动开发工程师都参与了 xff0c 问题要区别看待 xff0c 那么自然就
  • 你投资的那些EOS“侧链”都还好么?

    EOS侧链BOS的启动声势浩大 xff0c 引得一众EOS超级节点与公司参与支持 xff0c 也招来币圈大佬老猫的质疑 xff0c 直言 熊市 xff0c 我劝你善良 xff1b 近几日 xff0c 曾被称作是EOS上首条侧链的FIBOS开
  • 销毁3417万枚EOS与被刺激的EOS价格——理解增发与销毁机制

    eosio saving帐号销毁的3417万枚EOS与REX锁住的6000多万枚EOS xff0c 都刺激不了EOS价格 xff0c 甚至仍有下跌的趋势 xff0c 而几天后一觉醒来 xff0c 不管BTC还是EOS都在疯涨 xff0c 过
  • Error executing aapt: Return code -1073741819

    总会有让人喷血的事情勾起写博客的欲望 xff0c 希望能坚持 折腾了两天的是个小问题 xff0c 就是标题上的Error executing aapt Return code 1073741819 解决的方法也很简单参考1中所述 xff0c
  • EOS的危险信号——记主网上线一周年后

    市值已经跌落到第八 xff0c 除了期待即将推出的社交应用 Voice 能给 EOS 注入新的活力外 xff0c 我已经很难找到 EOS 上的新热点 xff0c 而一些危险的信号 xff0c 可能对 EOS 的发展带来负面的影响 xff0c
  • 五轴机械臂实现视觉抓取--realsense深度相机和五自由度机械臂

    前言 xff1a 要实现视觉抓取 xff0c 首先需要实现机械臂的驱动 xff0c 深度相机的目标识别 xff0c 能够反馈位置 1 实现机械臂在ROS层的控制 2 基于深度相机目标物体的空间坐标反馈 xff0c 需要知道摄像头中物体的像素
  • solvepnp三维位姿估算

    一 前言 关于PNP问题就是指通过世界中的N个特征点与图像成像中的N个像点 xff0c 计算出其投影关系 xff0c 从而获得相机或物体位姿的问题 opencv提供的solvepnp函数就是用来解决pnp问题 利用该函数可以实现测算相机 物