HybrIK流程

定义

T = { t k } k = 1 K T=\{t_k\}^K_{k=1} T={tk}k=1K:静止姿态下的关节点坐标。
R = { R p a ( k ) , k } k = 1 K R=\{R_{pa(k), k}\}_{k=1}^K R={Rpa(k),k}k=1K:相对旋转。
Q = { q k } k = 1 K Q=\{q_k\}^K_{k=1} Q={qk}k=1K:根据输入的相对旋转,FK计算出的关节点坐标。
K K K: 关节点数目。
p a ( k ) pa(k) pa(k):第k个节点的父节点。
R p a ( k ) , k R_{pa(k), k} Rpa(k),k:第k个节点关于其父节点的相对旋转。

前向动力学

q k = R k ( t k − t p a ( k ) ) + q p a ( k ) (1) q_k = R_k(t_k - t_{pa(k)}) + q_{pa(k)} \tag{1} qk=Rk(tktpa(k))+qpa(k)(1)

R k = R p a ( k ) R p a ( k ) , k (2) R_k=R_{pa(k)}R_{pa(k),k} \tag{2} Rk=Rpa(k)Rpa(k),k(2)

R k ∈ S O ( 3 ) R_k\in SO(3) RkSO(3):第k个节点关于标注静止姿态空间的全局旋转。

反向动力学

IK是FK的逆过程,输入静止姿态 T T T和目标姿态 P P P, 计算相对旋转矩阵 R R R
R = I K ( P , T ) (3) R = IK(P, T) \tag{3} R=IK(P,T)(3)
理想情况下,求得的旋转矩阵需要满足如下条件:
p k − p p a ( k ) = R k ( t k − t p a ( k ) ) ∀ 1 ≤ k ≤ K (4) p_k - p_{pa(k)} = R_k(t_k - t_{pa(k)}) \quad \forall 1 \leq k \leq K \tag{4} pkppa(k)=Rk(tktpa(k))1kK(4)
FK问题是适定的,IK问题却是病态的,要么无解,要么可能存在许多解可以目前上述条件。

运动学树

在这里插入图片描述

Naive HybrIK

类似FK过程,IK过程可以沿着运动学树迭代进行。
首先,我们要确定根节点的全局旋转 R 0 R_0 R0,可以通过spine, left hip, right hip这三个点的位置和SVD分解求得闭式解。
之后的每一步,以第k步为例,我们假设其父节点 R p a ( k ) R_{pa(k)} Rpa(k)的旋转已知, 根据公式(1)和(2)可得:
R p a ( k ) − 1 ( p k − p p a ( k ) ) = R p a ( k ) , k ( t k − t p a ( k ) ) (5) R^{-1}_{pa(k)}(p_k - p_{pa(k)}) = R_{pa(k),k}(t_k - t_{pa(k)}) \tag{5} Rpa(k)1(pkppa(k))=Rpa(k),k(tktpa(k))(5)

p k ⃗ = R p a ( k ) − 1 ( p k − p p a ( k ) ) t k ⃗ = t k − t p a ( k ) \begin{aligned} \vec{p_k} &= R^{-1}_{pa(k)}(p_k - p_{pa(k)}) \\ \vec{t_k} &= t_k - t_{pa(k)} \end{aligned} pk tk =Rpa(k)1(pkppa(k))=tktpa(k)

可以通过下式计算相对旋转:
R p a ( k ) , k = D ( p k ⃗ , t k ⃗ , ϕ k ) R_{pa(k), k} = D(\vec{p_k}, \vec{t_k}, \phi_k) Rpa(k),k=D(pk ,tk ,ϕk)
ϕ k \phi_k ϕk是网络预测出的第k个节点的twist角。twist角的集合表示为 Φ = { ϕ k } k = 1 K \Phi=\{\phi_k\}_{k=1}^K Φ={ϕk}k=1K,因为旋转矩阵是正交阵,因此 R p a ( k ) − 1 = R p a ( k ) T R^{-1}_{pa(k)}=R^{T}_{pa(k)} Rpa(k)1=Rpa(k)T,使得解算过程可微。
完整的算法流程如下:
输入:Q, T, Φ \Phi Φ
输出:R
第一步先确定根节点0的全局旋转,再沿着运动学树进行下述迭代处理
p k ⃗ ← R p a ( k ) − 1 ( p k − p p a ( k ) ) t k ⃗ ← t k − t p a ( k ) R p a ( k ) , k s w ← D s w ( p k ⃗ , t k ⃗ ) R p a ( k ) , k t w ← D t w ( p k ⃗ , ϕ k ⃗ ) R p a ( k ) , k ← R p a ( k ) , k s w R p a ( k ) , k t w \begin{aligned} \vec{p_k} &\leftarrow R^{-1}_{pa(k)}(p_k - p_{pa(k)}) \\ \vec{t_k} & \leftarrow t_k - t_{pa(k)} \\ R^{sw}_{pa(k), k} & \leftarrow D^{sw}(\vec{p_k}, \vec{t_k} ) \\ R^{tw}_{pa(k), k} & \leftarrow D^{tw}(\vec{p_k}, \vec{\phi_k} ) \\ R_{pa(k),k} & \leftarrow R^{sw}_{pa(k), k}R^{tw}_{pa(k), k} \end{aligned} pk tk Rpa(k),kswRpa(k),ktwRpa(k),kRpa(k)1(pkppa(k))tktpa(k)Dsw(pk ,tk )Dtw(pk ,ϕk )Rpa(k),kswRpa(k),ktw

R s w = D s w ( p ⃗ , t ⃗ ) = I + s i n α [ n ⃗ ] × + ( 1 − c o s α ) [ n ⃗ ] × 2 R^{sw} = D^{sw}(\vec{p}, \vec{t}) = I + sin\alpha[\vec{n}]_{\times} + (1 - cos\alpha)[\vec{n}]_{\times}^2 Rsw=Dsw(p ,t )=I+sinα[n ]×+(1cosα)[n ]×2

R t w = D t w ( p ⃗ , ϕ ) = I + s i n ϕ ∣ ∣ t ⃗ ∣ ∣ [ n ⃗ ] × + ( 1 − c o s ϕ ) ∣ ∣ t ⃗ ∣ ∣ 2 [ n ⃗ ] × 2 R^{tw} = D^{tw}(\vec{p}, \phi) = I + \frac{sin\phi}{||\vec{t}||}[\vec{n}]_{\times} + \frac{(1 - cos\phi)}{||\vec{t}||^2}[\vec{n}]_{\times}^2 Rtw=Dtw(p ,ϕ)=I+t sinϕ[n ]×+t 2(1cosϕ)[n ]×2
n ⃗ = t ⃗ × p ⃗ ∣ ∣ t ⃗ × p ⃗ ∣ ∣ \vec{n} = \frac{\vec{t}\times\vec{p}} {||\vec{t} \times \vec{p}||} n =t ×p t ×p
[ t ⃗ ] × [\vec{t}]_{\times} [t ]× t ⃗ \vec{t} t 的对称矩阵。

在这里插入图片描述

Adaptive HybrIK

Naive HybrIK过程看着是有效的,它遵循了 ∣ ∣ q k − q p a ( k ) ∣ ∣ = ∣ ∣ t k − t p a ( k ) ∣ ∣ ||q_k - q_{pa(k)}||=||t_k - t_{pa(k)}|| qkqpa(k)=tktpa(k)这个假设。
但不幸的是,3D关键点估计方法的预测结果,并不总是能和静止姿态模板一致。如果使用Naive HybrIK的方式,这个误差会沿着运动学树一直累计。
在这里插入图片描述

q p a ( k ) ← R p a ( k ) ( t p a ( k ) − t p a 2 ( k ) ) + q p a 2 ( k ) p k ⃗ ← R p a ( k ) − 1 ( p k − q p a ( k ) ) t k ⃗ ← t k − t p a ( k ) R p a ( k ) , k s w ← D s w ( p k ⃗ , t k ⃗ ) R p a ( k ) , k t w ← D t w ( p k ⃗ , ϕ k ⃗ ) R p a ( k ) , k ← R p a ( k ) , k s w R p a ( k ) , k t w \begin{aligned} q_{pa(k)} &\leftarrow R_{pa(k)}(t_{pa(k)} - t_{pa^2(k)}) + q_{pa^2(k)} \\ \vec{p_k} &\leftarrow R^{-1}_{pa(k)}(p_k - q_{pa(k)}) \\ \vec{t_k} & \leftarrow t_k - t_{pa(k)} \\ R^{sw}_{pa(k), k} & \leftarrow D^{sw}(\vec{p_k}, \vec{t_k} ) \\ R^{tw}_{pa(k), k} & \leftarrow D^{tw}(\vec{p_k}, \vec{\phi_k} ) \\ R_{pa(k),k} & \leftarrow R^{sw}_{pa(k), k}R^{tw}_{pa(k), k} \end{aligned} qpa(k)pk tk Rpa(k),kswRpa(k),ktwRpa(k),kRpa(k)(tpa(k)tpa2(k))+qpa2(k)Rpa(k)1(pkqpa(k))tktpa(k)Dsw(pk ,tk )Dtw(pk ,ϕk )Rpa(k),kswRpa(k),ktw

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值