【C++】sophus : cartesian.hpp 将欧几里得向量空间(即笛卡尔坐标系)实现为一个李群 (六)...

这段代码定义了一个名为Cartesian 的类,它将欧几里得向量空间(即笛卡尔坐标系)实现为一个李群。它旨在用于教育目的,展示李群如何推广欧几里得向量空间,并用于针对李群接口实现的模板/通用算法。

以下是代码的详细解释:

1. 命名空间和基本定义:

  • 定义了Sophus 命名空间,并在其中定义了Cartesian 类模板,以及Cartesian2Cartesian3Cartesian2d 和Cartesian3d 等常用类型的别名。

2. Eigen traits 特化:

  • Sophus::Cartesian 及其Map 版本特化了Eigen::traits,以便 Eigen 库能够正确处理Cartesian 对象,并将其视为具有特定标量类型和参数类型的对象。这允许Cartesian 对象与 Eigen 的其他类型无缝集成。

3.CartesianBase 类模板:

这是Cartesian 类的基类,包含所有核心功能。

  • 类型定义:

     定义了ScalarParamsTypeDoF(自由度)、num_parameters(参数数量)、N(变换矩阵的维度)、Dim(向量维度)、Transformation(变换矩阵类型)、Point(点类型)、HomogeneousPoint(齐次点类型)、Tangent(切向量类型)、Adjoint(伴随矩阵类型)等类型别名。

  • 伴随变换 (Adj):

     对于交换群(如笛卡尔群),伴随变换始终是单位矩阵。

  • 类型转换 (cast):

     将Cartesian 对象转换为具有不同标量类型的对象。

  • 导数计算:

     提供了计算this * exp(x) 在 x=0 处的导数 (Dx_this_mul_exp_x_at_0) 和log(this^{-1} * x) 在 x=this 处关于 x 的导数 (Dx_log_this_inv_by_x_at_this) 的函数。

  • 求逆 (inverse):

     计算群的逆元,对于笛卡尔群,即向量的加法逆元。

  • 对数映射 (log):

     对于欧几里得向量空间,对数映射只是恒等映射,或者更准确地说,它只是从 NxN 矩阵中提取重要的 M 维向量。

  • 矩阵表示 (matrix):

     返回实例的 (M+1)x(M+1) 矩阵表示,形式为:| I p || o 1 |

  • 群乘法 (operator*):

     对于笛卡尔群,群乘法即向量加法。

  • 群作用于点 (operator*):

     定义了群作用于点和齐次点的操作,本质上也是向量加法。

  • 群作用于直线和平面:

     定义了群作用于直线和超平面的操作。

  • 原地群乘法 (operator*=):

     定义了原地群乘法操作。

  • 参数访问 (params):

     提供了访问内部参数向量的接口。

4.Cartesian 类模板:

这是Cartesian 类的主要实现,继承自CartesianBase

  • 构造函数:

     提供了默认构造函数(初始化为零向量)、拷贝构造函数、从其他CartesianBase 类型的构造函数,以及从 M 维向量或 (M+1)x(M+1) 矩阵构造的构造函数。

  • 数据访问 (data):

     提供了对内部数据的直接读写访问。

  • 指数映射的导数 (Dx_exp_x_at_0,Dx_exp_x,Dx_exp_x_times_point_at_0,Dxi_exp_x_matrix_at_0):

     提供了计算指数映射及其相关导数的函数。

  • 生成器 (generator):

     返回Cartesian(M) 的第 i 个无穷小生成器。

  • 指数映射 (exp):

     对于欧几里得向量空间,指数映射只是构造 (M+1)x(M+1) 齐次矩阵表示。

  • hat 算子 (hat):

     定义了 hat 算子,将切向量映射到李代数。

  • 李括号 (lieBracket):

     对于交换群,李括号始终为 0。

  • 均匀采样 (sampleUniform):

     在每个坐标的 [-1, 1] 范围内进行均匀采样。

  • vee 算子 (vee):

     定义了 vee 算子,是 hat 算子的逆运算。

5.Eigen::Map 特化:

Cartesian 和Cartesian const 特化了Eigen::Map,允许将Cartesian 对象包装在原始数据数组周围,而无需进行复制。

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值