安装配置

去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. 二维码扫描和应用跳转
  2. SQL Server 数据文件的页面分部情况
  3. [29期] 打仗、打球、打游戏、打代码。。。
  4. 在我看来,代码审查就是在排大便...
  5. Xcode模拟器simulators安装
  6. 分享31个游戏源代码总有一个是你想要的
  7. WinRAR 永久去除弹窗广告
  8. js判断对象是否有某个属性
  9. echarts常见图形-横向柱状图(六)
  10. 按月统计的sql语句
  11. 手机显示一帧的流程是如何实现?
  12. 快速乘-在乘法溢出的边缘疯狂试探
  13. 上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道。...
  14. css td边框重复,表格线边框重复css解决方法
  15. 安装gosublime插件出现See the `Quirks` section of USAGE.md for info
  16. -----前端换肤----
  17. java(jsp技术)
  18. Understand Selections in D3
  19. Vue中的深坑——component和components
  20. 转载:深度工作:充分使用每一份脑力

热门文章

  1. java 每月定时发送_java实现指定时间触发一个事件(比如定时发送短信)
  2. echarts圆环百分比图示
  3. 极大似然估计的思想是什么
  4. Hadoop环境搭建之zookeeper安装
  5. 网页设计前端作品(大一)HTML+CSS
  6. 打工仔:如何来做微创业
  7. 计算机的工作原理是什么选择题,计算机系统的组成及工作原理试题及答案
  8. 【1】基于ATmega 8A -PU 的蓝牙遥控电源插座设计——【1、总体方案设计】
  9. Html+js:识别多个二维码并发送链接
  10. SpringBoot实战历程第一阶段-钟林森-专题视频课程