关于SLAM十四讲中 非模板类Sophus库的安装问题

最近开始学习高翔博士的《视觉SLAM十四讲》,第四章要求安装一个非模板类的Sophus库。在安装书中提供的第三方库时出现错误。在安装过程中,使用Cmake ..的时候能够顺利通过,接着执行make命令的时候就会出现错误如下:

***1. Sophus/sophus/so2.cpp:33:26:error: lvalue required as left operand of assignment
unit_complex_.real() = 1.;
2. Sophus/sophus/so2.cpp:33:26:error: lvalue required as left operand of assignment
unit_complex_.imag() = 1.;*
我以为是书中提供的第三方库存在问题,于是按照书中的方法在网上重新下载Sophus库,编译之后仍旧出现这种错误。
自己在网上查找了好久很少有人提出解决这个问题的方法。最终幸运的在一篇博客中找到了解决的方法。鉴于网上的解决方法少,故分享如下。
解决方法如下:

1  SO2::SO2()
2 {
3   //unit_complex_.real() = 1.;
4   //unit_complex_.imag() = 0.;
5   unit_complex_.real(1.); 
6   unit_complex_.imag(0.);
7 }

打开so2..cpp文件,将系统提示出错的位置代码改成上述的代码即可。
用改正后的非模板类Sophus库运行《视觉SLAM十四讲》第四章的实践代码,代码输出的结果是正确的,运行代码结果如下:

SO3 from matrix :     0      0 1.5708

SO3 from vector :     0      0 1.5708

SO3 from quaternion :     0      0 1.5708

so3 =      0      0 1.5708
so3 hat =       0 -1.5708       0
 1.5708       0      -0
     -0       0       0
so3 hat vee=      0      0 1.5708
SO3 update=  7.85398e-05 -7.85398e-05       1.5708

*************************分割线××××××××××××××××××××
SE3 from Rt = 
     0      0 1.5708
1 0 0

SE3 from qt = 
     0      0 1.5708
1 0 0

 se3 =  0.785398 -0.785398         0         0         0    1.5708
se3 hat = 
        0   -1.5708         0  0.785398
   1.5708         0        -0 -0.785398
       -0         0         0         0
        0         0         0         0
se3 hat vee = 
 0.785398 -0.785398         0         0         0    1.5708
SE3 update = 
2.22045e-16          -1           0      1.0001
          1 2.22045e-16           0           0
          0           0           1           0
          0           0           0           1

从正确的运行结果可以知道对于Sophus库的修改是正确的。

这个改正方法是参照网上的,具体的原因本人也不知道。如果有谁看到这篇文章,知道其中的原因,烦请告知!!!

参考的博客地址:一步步完善视觉里程计3——初始位置确定 | 冯兵的博客|内外兼修

你可能感兴趣的:(SLAM)