#代数 #机器人技术

liealg

Lie群和Lie代数在Rust中的实现

2个不稳定版本

0.3.0 2024年4月28日
0.2.0 2024年4月3日
0.1.1 2024年3月10日
0.1.0 2024年3月10日

#385 in 数学

Download history 134/week @ 2024-04-26 7/week @ 2024-05-03 4/week @ 2024-05-17 2/week @ 2024-05-24

279 每月下载量

MIT/Apache

38KB
1K SLoC

liealg

Lie群和Lie代数在Rust中的实现

简介

liealg 是一个用于计算3D空间(SO3和SE3)中的Lie代数和Lie群的库。

应用领域

liealg 主要用于机器人运动学和相关领域。如果您想进行一些通用的Lie群和Lie代数计算,则最好不使用此库。

入门

在您的 Cargo.toml 中添加依赖项

[dependencies]
liealg = "0.1.1"

或者使用 cargo add

cargo add liealg

设计

liealg 中的实体关系如下

  graph TD;
      A[Vec3]-->|hat|B[so3];
      B-->|vee|A;
      B-->|exp|C[SO3];
      C-->|log|B;
      C-->|adjoint|D[AdjSO3];

      E[Vec6]-->|hat|F[se3];
      F-->|vee|E;
      F-->|exp|J[SE3];
      J-->|log|F;
      J-->|adjoint|K[AdjSE3];

SO3和SE3可以相乘矩阵、取逆和3D点。

使用方法

SO3

use liealg::prelude::*;
use liealg::{Vec3, Point};
// construct Vec3
let v = Vec3::new(0., 0., 1.) * FRAC_PI_2;

// hat convert Vec3 to so3
let so3 = v.hat();

// exp convert so3 to SO3
let rot = so3.exp();

// SO3 mat_mul
let _ = rot.mat_mul(&other);

// SO3 inverse
let rot_inv = rot.inv();

// SO3 act on 3D point
let point = Point::new(1., 2., 3.);
let _ = rot.act(&point);

SE3

use liealg::prelude::*;
use liealg::{Vec3, Point};
// construct Vec6
let v = Vec6::new([0., 0., 1], [0., -1., 0.]) * FRAC_PI_2;

// hat convert Vec6 to se3
let se3 = v.hat();

// exp convert se3 to SE3
let t = se3.exp();

// SE3 mat_mul
let _ = t.mat_mul(&other);

// SE3 inverse
let inv = rot.inv();

// SE3 act on 3D point
let point = Point::new(1., 2., 3.);
let _ = rot.act(&point);

依赖项

~3MB
~57K SLoC