【发布时间】:2017-07-02 19:28:04
【问题描述】:
theta=acos((trace(R)-1)/2);
if trace(R)==3
vec = [0 0 0];
axang=[0 0 0 0];
vec(1)=R(3,2)-R(2,3);
vec(2)=R(1,3)-R(3,1);
vec(3)=R(2,1)-R(1,2);
vec=(1/(2*sin(theta)))*vec;
axang = [vec, theta];
elseif trace(R)==-1
vec=[0 0 0;0 0 0];
axang=[0 0 0 0;0 0 0 0];
X=[0 0];
Y=[0 0];
Z=[0 0];
Y(1)=sqrt((R(2,2)+1)/2);
Y(2)=-Y(1);
X(1)=R(2,1)/(2*Y(1));
X(2)=R(2,1)/(2*Y(2));
Z(1)=R(2,3)/(2*Y(1));
Z(2)=R(2,3)/(2*Y(2));
vec(1,:)=[X(1) Y(1) Z(1)];
vec(2,:)=[X(2) Y(2) Z(2)];
axang(1,:)=[vec(1,:), theta];
axang(2,:)=[vec(2,:), theta];
else
vec = [0 0 0];
axang=[0 0 0 0];
vec(1)=R(3,2)-R(2,3);
vec(2)=R(1,3)-R(3,1);
vec(3)=R(2,1)-R(1,2);
vec=(1/(2*sin(theta)))*vec;
axang = [vec, theta];
end
所以这是我的代码,但是当旋转矩阵为时它不起作用
R = [-1 0 0;
0 -1 0;
0 0 1]
代码有什么问题? axang 是一个向量,将轴存储在前三个位置,角度存储在最后一个位置。
【问题讨论】:
-
提供旋转矩阵与轴角形式的关系。 “没用” 是什么意思。有什么错误吗?输出错误?什么?阅读如何根据您的问题创建minimal reproducible example 和edit。
-
啊。 @SardarUsama 谢谢。堆栈溢出的新功能。无论如何解决了我的问题。在一种情况下,我除以 0。当您说“提供旋转矩阵和轴角形式之间的关系”时,您最终帮助了我。还是谢谢。
标签: matlab robotics rotational-matrices