安装配置

去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的结果。显然是精度的问题。

自己计算一下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相关推荐

  1. win10+vs2017配置mpi环境的记录(已成功)

    并行计算的课程需要动手实验,需要在电脑上使用mpi 使用mpi有两种选择:虚拟机搭建集群,vs多线程模拟多机. 搭建集群太麻烦,果断放弃.决定使用vs2017多线程环境,通过mpi进行并行计算实验. ...

  2. Open3D:Win10 + VS2017配置Open3D(C++、python)

    累了就要打游戏 2020-08-25 15:13:10  3350  收藏 25 分类专栏: # Open3D 文章标签: 点云 Open3D C++ 版权 Open3D 专栏收录该内容 5 篇文章1 ...

  3. win10+vs2017配置MPI和OpenMP

    点击 https://www.microsoft.com/en-us/download/details.aspx?id=57467 下载msmpisetup.exe msmpisdk.msi 进行ms ...

  4. 在win10(vs2017)下配置Sophus的一些总结

    VS2017+cmake+msbuild配置Sophus(win10) 准备工作 VS2017+cmake 在https://github.com/strasdat/Sophus中的README.rs ...

  5. Win10+VS2017+Ceres-Solver-1.13.0配置

    一.工作准备 VS 2017 Cmake Ceres-solover最新版以及早期版本 gflags glog Eigen 注:下载后的包如下图所示,解压缩所有包至合适位置,本文以"D:\P ...

  6. VS2017配置OpenCV4.0(Win10环境)

    之前一直在使用VS2015,虽然看到VS2017发布了,但由于手头事情比较多,就没有尝试使用,最近突然看到Opencv4.0-alpha发布了,新版本中加入了很多人工智能和机器学习的内容,所以决定系统 ...

  7. WIN10+CGAL+VS2017配置

    最近配置了CGAL4.11.3,环境为WIN10+VS2017按照网上的博客大神指导配置出了个大概,可是依然遇到不少小的问题.在这里总结一下,以供后期参考. 1.CGAL的基本配置可以参考一下两篇博文 ...

  8. Win10下 pcl1.9.1 +vs2017配置教程

    参考链接 Win10下 pcl1.9.1 +vs2017配置教程 - 哔哩哔哩 https://www.jianshu.com/p/ce68c20f4ba6 前言:PCL库安装较简单,参考上述两链接即 ...

  9. 【FLIR工业相机】一、环境配置:win10+VS2017+qt5+spinnaker+opencv+python

    系列文章目录 一.环境配置:win10+VS2017+qt5+spinnaker+opencv+python 二.相机调用:VS2017+qt5调用FLIR工业相机实时成像 三.图像处理:C++调用p ...

最新文章

  1. 动态执行c# 脚本片段
  2. [MATLAB调试笔记]Update magnetic field in one step
  3. php数据库根据相似度排序,php数组字段相似度排序
  4. 性能测试脚本的编写和调试_编写自动调试器以在测试执行期间捕获异常
  5. 时序分析基本概念介绍<input/output delay>
  6. 你是否需要安全运营中心?
  7. 【编程好习惯】永远将头文件作为定义和引用的桥梁
  8. MyBatis和Spring总结
  9. EurekaLog发送邮件问题修正
  10. html诗词赏析网页制作,网页课程设计_诗词鉴赏.pdf
  11. 老打印机USB改无线连接
  12. 【菜鸟学开发系统】学生成绩管理系统(二)
  13. win7 批处理文件默认以管理员身份运行及清除IE缓存脚本
  14. python输出间隔符_python print 使用分隔符 或行尾符
  15. perspective
  16. 国外电子工程师们国内电子工程师火拼(转)
  17. 清华大学公开课线性代数2——第9讲:马尔科夫矩阵和正矩阵
  18. 怎样编配吉他独奏曲(下)
  19. 燕山大学微型计算机三级项目,燕山大学CAD三级项目.doc
  20. symbian大事记

热门文章

  1. 华为设备Telnet远程登录配置
  2. Qdiscs配置TSN网络
  3. 知乎周源微信_每周源代码24-可扩展性版本-.NET中的插件,提供程序,属性,插件和模块...
  4. forcats | tidyverse家族对「分类变量」的解决方案(上)
  5. 服装收银软件的产品优势是什么?
  6. IDEA中@author模板的设置
  7. 中小学计算机技术水平试题,中小学教师计算机技术水平考核试卷笔试试题
  8. 日本欲打造隐形光纤:WiFi提速10倍
  9. CSV文件乱码的解决方案:
  10. 第一期 android源码集合987个实例(从网上摘抄,在此记录下)