MultiCol-Slam里面的cayley变换/参数

cayley变换/参数

参考链接:

  1. http://blog.leanote.com/post/610167078@qq.com/cayley%E5%8F%98%E6%8D%A2
  2. https://blog.youkuaiyun.com/J10527/article/details/70140264

旋转向量与旋转矩阵之间的相互转换是通过罗德里格斯公式建立起来的:

其中r为旋转向量,R为旋转矩阵。其反过程可有下式确定:

除此之外,还有凯莱公式(Cayley formula)可以将旋转向量转化为旋转矩阵,该公式也有说是欧拉发现的:

 

其中A为旋转向量对应的反对称阵。值得一提的是,同一个旋转向量用凯莱公式和罗德里格斯公式转化得到的旋转矩阵通常并不相等,但都是旋转矩阵。

凯莱公式的逆变换为:

使用凯莱公式计算旋转矩阵,计算量会比罗德里格斯公式小很多。

 

MultiCol-Slam 接受的外参传入数据 为对旋转矩阵R进行了CAYLAY变换后的结果,其代码为:

    template<typename T>
    	cv::Matx<T, 3, 1> rot2cayley(const cv::Matx<T, 3, 3>& R)
    	{
    		cv::Matx<T, 3, 3> eyeM = cv::Matx<T, 3, 3>::eye();
     
    		cv::Matx<T, 3, 3> C1 = R - eyeM;
    		cv::Matx<T, 3, 3> C2 = R + eyeM;
    		cv::Matx<T, 3, 3> C = C1 * C2.inv();
     
    		cv::Matx<T, 3, 1> cayley(-C(1, 2), C(0, 2), -C(0, 1));
     
    		return cayley;
    	}

因为旋转矩阵一定是正交矩阵,因此, 对于旋转矩阵R, 进行(R-I)* inv((R+I)) 后生成的矩阵C为反对称矩阵,这里取 -C(1, 2), C(0, 2), -C(0, 1),作为参数传入。反对称矩阵可由一个向量对应,这里的代码实际上是由旋转矩阵经过cayley变换得到旋转向量对应的反对称矩阵,然后提取出来旋转向量。使用cayley变换计算旋转矩阵,计算量会比罗德里格斯公式小很多。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值