lsd-slam源码解读第一篇:Sophus/sophus

本文是lsd-slam源码解读系列的第一篇,重点解析Sophus库中的SO3GroupBase。介绍了SO3作为乘法群的概念,并详细解释了如何使用四元数表示旋转,包括转换为旋转矩阵、角速度、邻接矩阵等关键操作。文章通过代码分析,帮助读者理解旋转变换在SLAM中的应用。
摘要由CSDN通过智能技术生成

lsd-slam源码解读第一篇:Sophus/sophus


所谓slam即Real-time Simultaneous Localization and Mapping,实时定位与地图重建,lsd是一个大规模的单目视觉半稠密slam项目,优点和前景我就不多说了,做机器人和AR的朋友们估计早就已经铭记于心,在进入正题之前,我在这里给出官网和代码链接,有兴趣的朋友可以上去看看
官网:http://vision.in.tum.de/research/vslam/lsdslam
代码:https://github.com/tum-vision/lsd_slam

我想在明白任何一个slam算法之前,我们应该首先知道的是几个变换,即平移,旋转,相似以及投影变换
在lsd-slam中,有个三方开源库叫做Sophus/sophus,封装好了前三个变换

不失一般性,为了简单起见,我认为理解了一个文件,其他文件都是类似的,只是有一些由于自由度差异带来的差异而已,我在这里就介绍以一下so3.hpp文件


这几行内容只是一些简单的类型定义或者声明,其中使用了trait技法,不明白trait技法的好处的朋友可以去翻看stl源码解析书上的相关内容

namespace Sophus {
template<typename _Scalar, int _Options=0> class SO3Group;
typedef EIGEN_DEPRECATED SO3Group<double> SO3;
typedef SO3Group<double> SO3d; 
typedef SO3Group<float> SO3f;  
}

template<typename _Scalar, int _Options>
struct traits<Map<Sophus::SO3Group<_Scalar>, _Options> >
    : traits<Sophus::SO3Group<_Scalar, _Options> > {
  typedef _Scalar Scalar;
  typedef Map<Quaternion<Scalar>,_Options> QuaternionType;
};

template<typename _Scalar, int _Options>
struct traits<Map<const Sophus::SO3Group<_Scalar>, _Options> >
    : traits<const Sophus::SO3Group<_Scalar, _Options> > {
  typedef _Scalar Scalar;
  typedef Map<const Quaternion<Scalar>,_Options> QuaternionType;
};
}
}

SO3GroupBase

SO3是一个群,所谓群就是数学意义上的那个群,SO3正好是一个乘法群而已,满足封闭性,单位元,结合律等,我觉得没太大必要去了解数学上一个群甚至李群是如何抽象地定义的(因为那需要你1年左右的高等代数功底和一年左右的抽象代数功底,还有一年左右微分几何的功力),但是理解这个群是如何用于做旋转的,我认为还是很有必要的

template<typename Derived>
class SO3GroupBase {
public:
  typedef typename internal::traits<Derived>::QuaternionType &
  QuaternionReference;
  typedef const typename internal::traits<Derived>::QuaternionType &
  ConstQuaternionReference;

  static const int DoF = 3;
  static const int num_parameters = 4;
  static const int N = 3;

  typedef Matrix<Scalar,N,N> Transforma
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值