3D数学笔记——四元数的旋转

  • 四元数与3D旋转

          现在我们可以来讨论四元数与3D旋转之间的关联了。

          回忆一下之前讨论过的3D旋转,如果我们需要将一个向量v沿着一个用单位向量所定义的u旋转θ度,那么我们可以将这个向量v分解为正交与旋转轴的v⊥ 以及平行于旋转轴的 v∥.我们可以对这两个分量分别进行旋转,获得v ′ ⊥ 和 v ′ ∥.

将它们相加就是 v 旋转之后的结果 v ′ = v ′ ∥ + v ′ ⊥.

          我们可以将这些向量定义为纯四元数:

                     

        那么我们就能得到

                        

       和之前一样,我们在这里也分开讨论 v⊥ 和 v∥ 的情况.

1.  v⊥ 的旋转

     我们首先讨论正交与旋转轴的v⊥.我们之前推导过,如果向量v⊥.正交与旋转轴u,那么

                                                          

      但是我们仍然遗留下来一个u × v⊥,幸运的是,利用四元数的性质,我们可以将它写成四元数的形式,我们之前推导过,如果有两个纯四元数类似地,

                                               

因为 v⊥ 正交于 u,所以 u · v⊥ = 0,也就是说

                                                       

注意,uv⊥ 同样是一个纯四元数.我们离最终的结论已经很近了!将这个等式以及 之前定义的纯四元数代入,我们就能获得:

                                                   

因为四元数的乘法遵守分配律,我们可以继续变换这个等式:

                                                     

你应该可以注意到,如果我们将 (cos(θ) + sin(θ)u) 看做是一个四元数,我们就能 将旋转写成四元数的乘积了.到此为止,我们已经将旋转与四元数的积联系起来了. 如果令 q = cos(θ) + sin(θ)u,我们能得到:

                                                  

如果我们能构造一个 q,那么我们就能完成这个旋转了.我们可以对 q 继续进行变 形:

                                                    

    也就是说如果旋转轴u的坐标为旋转角为θ,那么完成这一旋转所需要的四元数q可以构造成

                                                      

    这样我们就完成了对v⊥ 的旋转,

                                                  

2.   v∥ 的旋转

      接下来是平行于旋转轴的 v∥.我们之前讨论过,如果一个向量 v∥ 平行于 u,那么 旋转不会对它作出任何的变换,也就是说:

                                                          

3.   v 的旋转

       有了这些知识,我们能够获得一般情况下 v ′ 的结果了:

                           

我们当然可以像以前那样将 v∥ 和 v⊥ 拆开,继续进行化简.但是这里我们不会这么 做,因为我们有更好的办法来进一步化简它. 在进一步化简之前,我们需要证明几个引理:

          

这个引理的证明很简单,只需要使用 Graßmann 积和一些三角恒等式就可以了:

其实这个引理的几何意义就是,如果绕着同一个轴 u 连续旋转 θ 度两次,那么所做 出的变换等同于直接绕着 u 旋转 2θ 度. 有了这个引理,我们再来回忆一下四元数逆的定义:

                                                         

现在,我们就能够对原本的旋转公式进行变形了:

           

在这里,我们引入了一个新的四元数 根据刚刚证明的 引理,我们可以验证

                                 

你应该能够注意到,和 q 一样,∥p∥ = 1,p 也是一个单位四元数,也就是

                                      

将这个结果代入之前的等式:

                              

我们还能进一步化简这个公式,但在继续之前还需要再证明两个引理:

               

这个引理的证明同样需要用到 Graßmann 积.我们先计算等式左边:

    

接下来计算等式的右边:

          

下面是第二个引理:

    

它的证明与之前的引理完全类似:

   

现在,我们就能对之前的公式做出最后的变形了:

                                      

显然,(v∥ + v⊥) 其实就是 v,所以

                                        

  •    旋转的复合

           在这一小节里,我们来证明一下使用四元数的旋转是可以复合的.旋转的复合其实 在我们之前证明 q 2 = [cos(2θ), sin(2θ)u] 的时候就已经涉及到一点了,但是这里我 们考虑的是更一般的情况.

           假设有两个表示沿着不同轴,不同角度旋转的四元数 q1, q2,我们先对 v 进行 q1 的 变换,再进行 q2 的变换,变换的结果是什么呢?

         我们不妨将这两次变换分步进行.首先,我们实施 q1 的变换,变换之后的 v为:

                                                                   

接下来,对 v ′ 进行 q2 的变换,得到 v ′′:

                                                                 

我们需要对这两个变换进行复合,写为一个等价变换的形式:

                                                                 

为了写成上面这种形式,我们还需要一个引理:

            

仍然使用与之前类似的方法:

              

所以,我们能得到: 

                             

           这也就是说,qnet = q2q1.注意四元数乘法的顺序,我们先进行的是 q1 的变换,再 进行 q2 的变换.这和矩阵与函数的复合非常相似,都是从右往左叠加.

  • 双倍覆盖问题

          四元数与 3D 旋转的关系并不是一对一的,同一个 3D 旋转可以使用两个不同的四 元数来表示.对任意的单位四元数

,q 与 −q 代表的是同 一个旋转.如果 q 表示的是沿着旋转轴 u 旋转 θ 度,那么 −q 代表的是沿着相反的旋 转轴 −u 旋转 (2π − θ) 度

        

所以,这个四元数旋转的角度为 2 π − 1 2 θ = 2π − θ.从下面的图中我们可以看 到,这两个旋转是完全等价的:

               

其实从四元数的旋转公式中也能推导出相同的结果:

                                                             

 

open3d是一个用于处理三维数据(点云、三维模型等)的开源库。点云配准是将两个或多个点云数据进行对齐的过程,以便在一个全局坐标系下进行比较、分析或重建。其中,四元数法是一种常用的点云配准方法。 四元数是一种用四个实数表示的扩充复数,可以用于描述旋转变换。在点云配准中,使用四元数法是因为其具有以下优势: 第一,四元数具有紧凑的表示形式,只需要四个实数即可表示旋转变换,相较于旋转矩阵的九个实数表示方式节省了存储空间,降低了计算复杂度。 第二,四元数法能够有效地避免了“万向锁”问题。万向锁是指在使用欧拉角进行坐标变换时,由于旋转过程中会出现奇点,导致旋转角度无法精确表示的问题。而四元数法不会出现这个问题,具有更好的数值稳定性。 在open3d中,点云配准的四元数法通常有以下几个步骤: 首先,计算两个点云之间的特征描述子,例如FPFH(Fast Point Feature Histograms)或SHOT(Signature of Histograms of Orientations)。这些描述子能够表示点云的局部几何信息。 然后,根据特征描述子的相似性,寻找初始的点对应关系。 接下来,通过最小化点云之间的误差指标,例如最小化点到平面的距离或最小化点到点的距离,来优化点对应关系,并计算出旋转矩阵。 将旋转矩阵转换为四元数表示,即可完成点云的配准过程。 四元数法是open3d中常用的点云配准方法之一,其能够高效地实现点云的准确对齐。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值