当前位置: 首页 > news >正文

李代数和李群的转化方法

0、简介:

主要介绍常用李代数和李群的转化方法,具体公式参考《slam入门-李群和李代数-第2讲》
李代数:so(3),se(3)
李 群:SO(3),SE(3)

1.1指数映射:so(3)->SO(3)

function RMatrix=Exp(so)
%so:Li_algebra,3-dimension column vector;
%RMatrix:li_group,3x3 matrix;
%Exp mapping
angle=norm(so);
axis=so/angle;
RMatrix=AAToRMatrix(axis,angle);
end

1.2指数映射:se(3)->SE(3)

function TMatrix=Exp_se(se)
%se:se(3),Li_algebra,6-dimension column vector,first 3 are rotate,last 3 are pretranslate;
%TMatrix:li_group,4x4 matrix;
%Exp mapping
RMatrix=Exp(se(1:3));
angle=norm(se(1:3));
axis=se(1:3)/angle;
J=sin(angle)/angle*eye(3)+(1-sin(angle)/angle)*axis*axis'+(1-cos(angle))/angle*getSkewSym(axis);
t=J*se(4:6);
TMatrix(1:3,1:3)=RMatrix;
TMatrix(1:3,4)=t;
TMatrix(4,1:4)=[0 0 0 1];
end

1.3对数映射:SO(3)->so(3)

function so=Log(RMatrix)
%so:Li_algebra,3-dimension column vector;
%RMatrix:li_group,3x3 matrix;
%Log mapping
[axis,angle]=RMatrixToAA(RMatrix);;
so=angle*axis;
end

1.4对数映射:SE(3)->se(3)

function se=Log_se(TMatrix)
%se:se(3),Li_algebra,6-dimension column vector,first 3 are rotate,last 3 are pretranslate;
%TMatrix:li_group,4x4 matrix;
%Log mapping
RMatrix=TMatrix(1:3,1:3);
[axis,angle]=RMatrixToAA(RMatrix);
so=angle*axis;
J=sin(angle)/angle*eye(3)+(1-sin(angle)/angle)*axis*axis'+(1-cos(angle))/angle*getSkewSym(axis);
rou=inv(J)*TMatrix(1:3,4);
se=[so;rou];
end

1.5辅助函数:向量->反对称矩阵

function Matrix=getSkewSym(v)
%v:column vector,is a point
%Matrix:is the skew symmetric matrix of vector
[rows,cols]=size(v);
if rows~=3
   error("It must be a column vector"); 
end
Matrix=[0, -v(3), v(2);
        v(3), 0, -v(1);
        -v(2), v(1), 0];
end

1.6辅助函数:反对称矩阵->向量

function [v1,v2,v3]=getUnSkewSym(matrix)
%v:column vector,is a point
%Matrix:is the skew symmetric matrix of vector
[rows,cols]=size(matrix);
if rows~=3 || cols~=3
   error("It must be 3x3 matrix"); 
end
if matrix(1,1)~=0 || matrix(2,2)~=0 || matrix(3,3)~=0
   error("Diag must be 0"); 
end
if matrix(1,2)~=-1*matrix(2,1) || matrix(1,3)~=-1*matrix(3,1) ||  matrix(2,3)~=-1*matrix(3,2) 
   error("It must be SkewSymMatrix"); 
end
v1=-1*matrix(2,3);
v2=matrix(1,3);
v3=-1*matrix(1,2);

1.7 轴角->旋转矩阵

function RMatrix=AAToRMatrix(axis,angle)
RMatrix=cos(angle)*eye(3)+(1-cos(angle))*axis*axis.'+sin(angle)*getSkewSym(axis);
end

1.8 旋转矩阵->轴角

function [axis,angle] = RMatrixToAA(Rmatrix)
angle=acos((trace(Rmatrix)-1)/2);
[v,~]=eig(Rmatrix);
axis=v(:,1);
end

相关文章:

  • 计算机专业知识【软件开发中的常用图表:E - R图、HIPO、DFD、N - S、PAD详解】
  • STM32 HAL库USART串口中断编程:演示数据丢失
  • AI 百炼成神:线性回归,预测房价
  • ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL基本配置和使用
  • PID控制学习
  • [java详细总结] java中的String详解
  • PhotoShop新版脚本编辑工具安装
  • cornerstone3D学习笔记-MPR
  • Web 后端 请求与响应
  • 【Javascript Day17】事件传播、事件对象
  • 基于C++重构muduo网络库搭建HTTP服务器项目设计及反思
  • ffmpeg 多路流处理在iOS的具体使用
  • OpenCV机器学习(6)朴素贝叶斯分类器(Naive Bayes Classifier)cv::ml::NormalBayesClassifier的使用
  • Java内存模型(JMM)深度解析:从并发问题到解决方案
  • Webpack 基础入门
  • 代码随想录第三十五天| 46. 携带研究材料(第六期模拟笔试) 416. 分割等和子集
  • 计算机网络基础知识
  • Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
  • 跟着AI学习vue3第三章
  • Meta 正在押注人形机器人领域
  • 绥化做网站/如何做百度免费推广
  • 中国神鹰网站建设/app推广拉新一手渠道
  • 哪里有广告设计制作的培训/seo新方法
  • 外包客服平台/满足seo需求的网站
  • 网站留言怎么做/最近几天的新闻大事
  • 局域网网站建设教程/东莞优化网站关键词优化