win10+VS2017配置sophus
安装配置
去github(https://github.com/strasdat/Sophus)下载对应的zip。注意:视觉SLAM十四讲中提到最早Sophus是非模板类(只有双精度)的版本,后来的版本有了更多不同精度的选择,上面给出的链接是由strasdat维护的Sophus库,最新版本早已经是模板类版本。
书(2017年的)中使用的是非模板类版本a621ff
解压缩zip,使用cmake编译
一般情况下会报错,点击报错那一行最右侧的省略号,手动添加Eigen3的路径
在cmake后的文件夹中找到Sophus.sln,使用VS打开
在VS下调好对应的版本,32还是64,Debug还是Release(32和64没有比较,Debug和Release是一样的),右键ALL_BUILD-生成,再右键INSTALL-生成。然后看控制台输出文件的路径。去那里找到build后的Sophus文件夹
不知道怎么设置的,我的VS将build之后的文件弄到默认工程目录下面去而不是和sln同一目录。不过无所谓,去把它抓回来。
将build生成的Sophus文件夹下的include添加到包含目录:
项目-配置-C/C++-常规-附加包含目录-D:\xx\xx\xx\include
include目录下有一个sophus文件夹,内容如下:
这些hpp文件里同时完成了实现。
用certutil -hashfile命令计算一下hash值,写个批处理分别在Debug和Release生成的目录下跑一遍,其实Debug和Release生成出来都是一样的
安装和使用过程中的一些问题
1.生成INSTALL时,报错MSB3073 命令setlocal ...balabala
参考(https://blog.csdn.net/u013001137/article/details/107732691)
以管理员权限运行VS即可
2.“Eigen::TriangularViewImpl<_MatrixType,_Mode,Eigen::Dense>::_assignProduct: 无法将函数与现有的声明匹配
参考(https://blog.csdn.net/CUSTESC/article/details/104516521)
在头文件中,同时include Eigen头文件和using namespace cv就会报该错误。
这里同时让自己意识到了平时编码的不规范,正规来说,using namespace应该放在cpp文件中。以往头文件我都是这么写的
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;void test(Mat m,string str);
当将using namespace cv移动到cpp文件中后,上面头文件中的参数部分Mat和string就会报错,就需要改成
#include <opencv2/opencv.hpp>void test(cv::Mat m,std::string str);
这也是为什么我们在调用库函数的时候能看到每个参数的命名空间
3.在将一个旋转矩阵转换成李代数时弹出了错误
RR的类型是Mat_<double>
Eigen::Matrix3d Rvec;Rvec <<RR.at<double>(0, 0), RR.at<double>(0, 1), RR.at<double>(0, 2),RR.at<double>(1, 0), RR.at<double>(1, 1), RR.at<double>(1, 2),RR.at<double>(2, 0), RR.at<double>(2, 1), RR.at<double>(2, 2);Sophus::SO3<double> SO3_R(R);
提示我输入的矩阵R不是正交矩阵,还帮我输出了RR^T的结果。显然是精度的问题。
只需降低精度,由double换成float即可
Eigen::Matrix3f Rvec;Rvec <<(float)RR.at<double>(0, 0), (float)RR.at<double>(0, 1), (float)RR.at<double>(0, 2),(float)RR.at<double>(1, 0), (float)RR.at<double>(1, 1), (float)RR.at<double>(1, 2),(float)RR.at<double>(2, 0), (float)RR.at<double>(2, 1), (float)RR.at<double>(2, 2);Sophus::SO3<float> SO3_R(Rvec);
4.Eigen和Opencv矩阵转换问题
像上面那样一位一位地将矩阵元素填入虽然能实现转换,但是也太麻烦了。就想着有没有简单的方法能够实现Eigen和Opencv的矩阵转换。
参考(https://humfrey.blog.csdn.net/article/details/107387479)
有函数cv2eigen和eigen2cv来进行Eigen和opencv的矩阵类型转换
所需头文件
#include <Eigen/Core>
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
#include <opencv2/opencv.hpp>
例如上面3中旋转矩阵RR到R的转换,就可以从
Eigen::Matrix3f Rvec;
Rvec <<(float)RR.at<double>(0, 0), (float)RR.at<double>(0, 1), (float)RR.at<double>(0, 2),(float)RR.at<double>(1, 0), (float)RR.at<double>(1, 1), (float)RR.at<double>(1, 2),(float)RR.at<double>(2, 0), (float)RR.at<double>(2, 1), (float)RR.at<double>(2, 2);
替换成
Eigen::Matrix3f R;
cv::cv2eigen(RR, R);
想要转换回去
cv::eigen2cv(R, RR);
sophus的一个李代数转换过程
Eigen::Matrix3f R;
Sophus::SO3<datatype> SO3_R(R);//旋转矩阵构造SO3
Eigen::Vector3f so3 = SO3_R.log();//对数映射,得到对应李代数
Sophus::SO3<float> SO3_R2 = Sophus::SO3f::exp(so3);//指数映射,李代数到旋转矩阵
Eigen::Matrix<float, 3, 3> m = SO3_R2.matrix();//Sophus的SO3到Eigen的矩阵
cv::eigen2cv(m, RR);
win10+VS2017配置sophus相关推荐
- win10+vs2017配置mpi环境的记录(已成功)
并行计算的课程需要动手实验,需要在电脑上使用mpi 使用mpi有两种选择:虚拟机搭建集群,vs多线程模拟多机. 搭建集群太麻烦,果断放弃.决定使用vs2017多线程环境,通过mpi进行并行计算实验. ...
- Open3D:Win10 + VS2017配置Open3D(C++、python)
累了就要打游戏 2020-08-25 15:13:10 3350 收藏 25 分类专栏: # Open3D 文章标签: 点云 Open3D C++ 版权 Open3D 专栏收录该内容 5 篇文章1 ...
- win10+vs2017配置MPI和OpenMP
点击 https://www.microsoft.com/en-us/download/details.aspx?id=57467 下载msmpisetup.exe msmpisdk.msi 进行ms ...
- 在win10(vs2017)下配置Sophus的一些总结
VS2017+cmake+msbuild配置Sophus(win10) 准备工作 VS2017+cmake 在https://github.com/strasdat/Sophus中的README.rs ...
- Win10+VS2017+Ceres-Solver-1.13.0配置
一.工作准备 VS 2017 Cmake Ceres-solover最新版以及早期版本 gflags glog Eigen 注:下载后的包如下图所示,解压缩所有包至合适位置,本文以"D:\P ...
- VS2017配置OpenCV4.0(Win10环境)
之前一直在使用VS2015,虽然看到VS2017发布了,但由于手头事情比较多,就没有尝试使用,最近突然看到Opencv4.0-alpha发布了,新版本中加入了很多人工智能和机器学习的内容,所以决定系统 ...
- WIN10+CGAL+VS2017配置
最近配置了CGAL4.11.3,环境为WIN10+VS2017按照网上的博客大神指导配置出了个大概,可是依然遇到不少小的问题.在这里总结一下,以供后期参考. 1.CGAL的基本配置可以参考一下两篇博文 ...
- Win10下 pcl1.9.1 +vs2017配置教程
参考链接 Win10下 pcl1.9.1 +vs2017配置教程 - 哔哩哔哩 https://www.jianshu.com/p/ce68c20f4ba6 前言:PCL库安装较简单,参考上述两链接即 ...
- 【FLIR工业相机】一、环境配置:win10+VS2017+qt5+spinnaker+opencv+python
系列文章目录 一.环境配置:win10+VS2017+qt5+spinnaker+opencv+python 二.相机调用:VS2017+qt5调用FLIR工业相机实时成像 三.图像处理:C++调用p ...
最新文章
- 动态执行c# 脚本片段
- [MATLAB调试笔记]Update magnetic field in one step
- php数据库根据相似度排序,php数组字段相似度排序
- 性能测试脚本的编写和调试_编写自动调试器以在测试执行期间捕获异常
- 时序分析基本概念介绍<input/output delay>
- 你是否需要安全运营中心?
- 【编程好习惯】永远将头文件作为定义和引用的桥梁
- MyBatis和Spring总结
- EurekaLog发送邮件问题修正
- html诗词赏析网页制作,网页课程设计_诗词鉴赏.pdf
- 老打印机USB改无线连接
- 【菜鸟学开发系统】学生成绩管理系统(二)
- win7 批处理文件默认以管理员身份运行及清除IE缓存脚本
- python输出间隔符_python print 使用分隔符 或行尾符
- perspective
- 国外电子工程师们国内电子工程师火拼(转)
- 清华大学公开课线性代数2——第9讲:马尔科夫矩阵和正矩阵
- 怎样编配吉他独奏曲(下)
- 燕山大学微型计算机三级项目,燕山大学CAD三级项目.doc
- symbian大事记
热门文章
- 华为设备Telnet远程登录配置
- Qdiscs配置TSN网络
- 知乎周源微信_每周源代码24-可扩展性版本-.NET中的插件,提供程序,属性,插件和模块...
- forcats | tidyverse家族对「分类变量」的解决方案(上)
- 服装收银软件的产品优势是什么?
- IDEA中@author模板的设置
- 中小学计算机技术水平试题,中小学教师计算机技术水平考核试卷笔试试题
- 日本欲打造隐形光纤:WiFi提速10倍
- CSV文件乱码的解决方案:
- 第一期 android源码集合987个实例(从网上摘抄,在此记录下)