最近开始学习高翔博士的《视觉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——初始位置确定 | 冯兵的博客|内外兼修