C++ 李群 李代数库 sophus 使用

* sophus 库安装

* 本库为来版本 非模板的版本
* git clone https://github.com//strasdat/Sophus.git
* git checkout a621ff 版本

* 在cmake编译

mkdir build

cd build

cmake ..

make

sudo make install

SO(n) 特殊正交群 对应 n*n 的旋转矩阵 群(集合)

SE(n+1) 特殊欧式群 对应 n*n 的旋转矩阵和 n*1的平移向量 组合成的 变换矩阵 群(集合)
so(n) 对应 的李代数 为 so(n) n×1 列向量 使得向量 和 代数 一一对应 可以使用代数的更新方法来更新 矩阵

SO(3) 表示三维空间的 旋转矩阵 集合 3×3

SE(3) 表示三维空间的 变换矩阵 集合 4×4
李代数 so3的本质就是个三维向量,直接Eigen::Vector3d定义。 3个旋转
李代数 se3的本质就是个六维向量,3个旋转 + 3个平移
### 关于 SLAM 中李群代数的代码实现 在《视觉SLAM十四讲》中提到,为了处理旋转和平移操作中的微分问题,引入了李群代数的概念。由于李群上的运算仅限于乘法而缺乏加法规则,这使得在其上定义导数变得困难[^3]。 针对这一挑战,在实际编程实践中通常会通过指数映射将李群转换至其对应的代数空间内进行计算,因为后者是一个线性的向量空间,允许执行诸如求导这样的操作。下面给出一段简单的 Python 实现例子用于展示如何利用 Sophus 来进行 SE(3) 的基本操作: ```python import sophus as sp from scipy.spatial.transform import Rotation as R def se3_exp_map(w,u): """Compute the exponential map from Lie algebra to Lie group. Args: w (numpy.ndarray): A 3D vector representing angular velocity. u (numpy.ndarray): A 3D vector representing linear velocity. Returns: sophus.SE3: An element of SE(3). """ omega_hat = sp.so3.exp(sp.Vector3d(*w)) v = sp.Vector3d(*u) return sp.SE3(omega_hat, v) if __name__ == "__main__": # Example usage with random values for demonstration purposes only rotation_velocity = [0.1, 0.2, 0.3] translation_velocity = [0.4, 0.5, 0.6] transformation_matrix = se3_exp_map(rotation_velocity, translation_velocity) print(transformation_matrix.matrix()) ``` 上述代码片段展示了怎样创建一个 `sophus` 类型的对象并打印出相应的变换矩阵。这里使用的是 Sophus 这一专门设计用来高效表示 SO(3)/SE(3) 及其对应代数 so(3)/se(3) 的 C++/Python [^4]。 对于更复杂的场景比如轨迹绘制,则可能涉及到读取外部文件以及调用图形如 Pangolin 来可视化结果。这部分工作往往依赖具体的应用需求和个人偏好来决定具体的实施方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EwenWanW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值