sophus库遇到的问题

问题报错

系统环境

ubuntu20.
sophus版本具体未知,是r3live直接在tools目录中拷贝的一份sophus源码,然后cpp文件直接include。

报错信息

Sophus ensure failed in function 'Sophus::SO3<Scalar_, Options>::SO3
(const Transformation&) [with Scalar_ = double; int Options = 0; Sophus::SO3
<Scalar_, Options>::Transformation = Eigen::Matrix<double, 3, 3>]', file
 '/home/xz/code/visual_lidar_slam/r3live_velodyne_mapbased/src/r3live_noted-
 master/r3live/./src/tools/lib_sophus/so3.hpp', line 472.
R is not orthogonal:
            1 -4.89682e-11 -1.01423e-10
-4.89682e-11            1  -4.0662e-12
-1.01423e-10  -4.0662e-12            1

看信息应该是给一个so3赋值的时候,3*3的旋转矩阵并不是正交矩阵 ,所以报错.

问题解决方法

在声明so3d的时候需要将旋转矩阵正交化后再给so3d初始化。
源代码:

Sophus::SO3d reg_so3 = Sophus::SO3d(reg_pose.block<3,3>(0,0));

修改后:

Sophus::SO3d reg_so3 = Sophus::SO3d(Eigen::Quaterniond(reg_pose.block<3,3>
(0,0)).normalized().toRotationMatrix());

就是先转成四元数正交化后再转回旋转矩阵。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,您遇到问题是在编译时出现了"undefined reference to `Sophus::SE3::SE3()'"和"collect2: error: ld returned 1 exit status"的错误。这通常是由于链接错误引起的。 要解决这个问题,您可以尝试以下几个步骤: 1. 确保您已经正确安装了Sophus,并且路径设置正确。根据引用中的代码,Sophus的路径被设置为"/usr/local/lib/libSophus.so"。请确保该路径下存在正确的文件。 2. 检查CMakeLists.txt文件中的设置是否正确。根据引用中的代码,您需要使用find_package命令找到Sophus,并将其链接到您的可执行文件中。请确保find_package命令和target_link_libraries命令的设置正确。 3. 检查您的代码中是否正确包含了Sophus的头文件。根据引用中的代码,您需要包含"sophus/so3.h"和"sophus/se3.h"这两个头文件。请确保这两个头文件的路径设置正确,并且文件存在。 如果您已经尝试了上述步骤但问题仍然存在,您可以尝试以下额外的解决方法: 1. 清理并重新构建您的项目。您可以尝试删除build文件夹,并重新运行cmake和make命令来重新构建项目。 2. 检查您的编译器和链接器是否支持Sophus的版本。有时候,不同版本的可能与您的编译器和链接器不兼容,导致链接错误。您可以尝试更新Sophus的版本或使用与您的编译器和链接器兼容的版本。 3. 如果您使用的是IDE(如CLion),请确保您的项目设置正确,并且Sophus被正确地包含和链接到项目中。 希望以上解决方法能帮助您解决问题。如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值