Least-Squares Rigid Motion Using SVD
摘要
本注释总结了计算对齐两组对应点的最优的刚体变换的步骤。
问题陈述
令
P
=
{
p
1
,
p
2
,
.
.
.
,
p
n
}
\mathcal{P} = \{p_1,p_2,...,p_n\}
P={p1,p2,...,pn}和
Q
=
{
q
1
,
q
2
,
.
.
.
,
q
n
}
\mathcal{Q}=\{q_1,q_2,...,q_n\}
Q={q1,q2,...,qn}是
R
d
R^d
Rd空间内的两组对应的点。我们希望找到一个刚性的变换,在最小二乘的意义上最优地对齐两个点集,也就是说,我们寻求一个旋转
R
R
R和一个平移向量
t
t
t来满足
(
R
,
t
)
=
arg min
R
∈
S
O
(
d
)
,
t
∈
R
d
∑
i
=
1
n
w
i
∣
∣
(
R
p
i
+
t
)
−
q
i
∣
∣
2
(1)
(R,t) = \argmin_{R \in SO(d),t \in R^d}\sum_{i=1}^{n}{w_i ||(Rp_i+t) - q_i||^2} \tag{1}
(R,t)=R∈SO(d),t∈Rdargmini=1∑nwi∣∣(Rpi+t)−qi∣∣2(1)
其中
w
i
>
0
w_i > 0
wi>0是每个点对的权重。
在下文中,我们详细介绍了
R
R
R和
t
t
t的推导过程;对最终结果感兴趣的读者可以跳过证明,直接进入第4节。
计算平移
假设
R
R
R被固定并定义
F
(
t
)
=
∑
i
=
1
n
w
i
∣
∣
(
R
p
i
+
t
)
−
q
i
∣
∣
2
F(t) = \sum_{i=1}^{n}{w_i || (Rp_i+t) - q_i ||^2}
F(t)=∑i=1nwi∣∣(Rpi+t)−qi∣∣2。我们可以通过取
F
(
t
)
F(t)
F(t)相对于
t
t
t的导数并寻找它的根来找到最优平移:
0
=
∂
F
∂
t
=
∑
i
=
1
n
2
w
i
(
R
p
i
+
t
−
q
i
)
=
2
t
(
∑
i
=
1
n
w
i
)
+
2
R
(
∑
i
=
1
n
w
i
p
i
)
−
2
∑
i
=
1
n
w
i
q
i
(2)
0 = \frac{\partial F}{\partial t} = \sum_{i=1}^{n}{2 w_i (Rp_i + t -q_i)} \\ = 2t(\sum_{i=1}^{n}{w_i}) + 2R (\sum_{i=1}^{n}{w_ip_i}) - 2\sum_{i=1}^{n}{w_iq_i} \tag{2}
0=∂t∂F=i=1∑n2wi(Rpi+t−qi)=2t(i=1∑nwi)+2R(i=1∑nwipi)−2i=1∑nwiqi(2)
定义
p
ˉ
=
∑
i
=
1
n
w
i
p
i
∑
i
=
1
n
w
i
,
q
ˉ
=
∑
i
=
1
n
w
i
q
i
∑
i
=
1
n
w
i
(3)
\bar{p} = \frac{ \sum_{i=1}^{n}{w_ip_i} }{\sum_{i=1}^{n}{w_i}},\bar{q} = \frac{ \sum_{i=1}^{n}{w_iq_i} }{\sum_{i=1}^{n}{w_i}} \tag{3}
pˉ=∑i=1nwi∑i=1nwipi,qˉ=∑i=1nwi∑i=1nwiqi(3)
通过重新排列公式(2)的项,我们得到
t
=
q
ˉ
−
R
p
ˉ
(4)
t = \bar{q} - R \bar{p} \tag{4}
t=qˉ−Rpˉ(4)
换句话说,最佳平移
t
t
t将被变换的点集
p
\mathcal{p}
p的加权质心映射到点集
Q
\mathcal{Q}
Q的加权质心。让我们将最优的
t
t
t插入我们的目标函数:
∑
i
=
1
n
w
i
∣
∣
(
R
p
i
+
t
)
−
q
i
∣
∣
2
=
∑
i
=
1
n
w
i
∣
∣
R
p
i
+
q
ˉ
−
R
p
ˉ
−
q
i
∣
∣
2
=
∑
i
=
1
n
w
i
∣
∣
R
(
p
i
−
p
ˉ
)
−
(
q
i
−
q
ˉ
)
∣
∣
2
(5)
\sum_{i=1}^{n}{w_i || (Rp_i + t) - q_i ||^2} = \sum_{i=1}^{n}{w_i || Rp_i + \bar{q} - R\bar{p} - q_i ||^2} \\ = \sum{i=1}^{n}{w_i || R(p_i - \bar{p}) - (q_i - \bar{q}) ||^2} \tag{5}
i=1∑nwi∣∣(Rpi+t)−qi∣∣2=i=1∑nwi∣∣Rpi+qˉ−Rpˉ−qi∣∣2=∑i=1nwi∣∣R(pi−pˉ)−(qi−qˉ)∣∣2(5)
因此,我们可以集中精力计算旋转
R
R
R。通过重构这个问题,使得平移为零:
x
i
=
p
i
−
p
ˉ
,
y
i
=
q
i
−
q
ˉ
(6)
x_i = p_i - \bar{p} , y_i = q_i - \bar{q} \tag{6}
xi=pi−pˉ,yi=qi−qˉ(6)
所以我们寻找最佳旋转
R
R
R,使其满足
R
=
arg min
R
∈
S
O
(
d
)
∑
i
=
1
n
w
i
∣
∣
R
x
i
−
y
i
∣
∣
2
(7)
R = \argmin_{R \in SO(d)} \sum_{i=1}^{n}{w_i || Rx_i - y_i ||^2} \tag{7}
R=R∈SO(d)argmini=1∑nwi∣∣Rxi−yi∣∣2(7)
计算旋转
让我们简化公式(7)中试图最小化的表达式:
∣
∣
R
x
i
−
y
i
∣
∣
2
=
(
R
x
i
−
y
i
)
T
(
R
x
i
−
y
i
)
=
(
x
i
T
R
T
−
y
i
T
)
(
R
x
i
−
y
i
)
=
x
i
T
R
T
R
x
i
−
y
i
T
R
x
i
−
x
i
T
R
T
y
i
+
y
i
T
y
i
=
x
i
T
x
i
−
y
i
T
R
x
i
−
x
i
T
R
T
y
i
+
y
i
T
y
i
(8)
||Rx_i - y_i||^2 = (Rx_i - y_i)^T(Rx_i - y_i) = (x_i^TR^T - y_i^T)(Rx_i - y_i) \\ = x_i^TR^TRx_i - y_i^TRx_i - x_i^TR^Ty_i + y_i^Ty_i \\ = x_i^Tx_i - y_i^TRx_i - x_i^TR^Ty_i + y_i^Ty_i \tag{8}
∣∣Rxi−yi∣∣2=(Rxi−yi)T(Rxi−yi)=(xiTRT−yiT)(Rxi−yi)=xiTRTRxi−yiTRxi−xiTRTyi+yiTyi=xiTxi−yiTRxi−xiTRTyi+yiTyi(8)
我们通过旋转矩阵的正交性(
R
R
T
=
R
T
R
=
I
RR^T = R^TR = I
RRT=RTR=I)来完成最后一步。
请注意,
x
i
T
R
T
y
i
x_i^TR^Ty_i
xiTRTyi是一个标量:
x
i
T
x_i^T
xiT维度为
1
×
d
1 \times d
1×d,
R
T
R^T
RT维度为
d
×
d
d \times d
d×d并且
y
i
y_i
yi的维度为
d
×
1
d \times 1
d×1。对于任何标量
a
a
a,我们通常都有
a
=
a
T
a=a^T
a=aT,因此
x
i
T
R
T
y
i
=
(
x
i
T
R
T
y
i
)
T
=
y
i
T
R
x
i
(9)
x_i^TR^Ty_i = (x_i^TR^Ty_i)^T = y_i^TRx_i \tag{9}
xiTRTyi=(xiTRTyi)T=yiTRxi(9)
因此我们有
∣
∣
R
x
i
−
y
i
∣
∣
2
=
x
i
T
x
i
−
2
y
i
T
R
x
i
+
y
i
T
y
i
(10)
|| Rx_i - y_i ||^2 = x_i^Tx_i - 2y_i^TRx_i + y_i^Ty_i \tag{10}
∣∣Rxi−yi∣∣2=xiTxi−2yiTRxi+yiTyi(10)
让我们看看要最小化的代价函数,并使用上面的表达式进行替换:
arg min
R
∈
S
O
(
d
)
∑
i
=
1
n
w
i
∣
∣
R
x
i
−
y
i
∣
∣
2
=
arg min
R
∈
S
O
(
d
)
∑
i
=
1
n
w
i
(
x
i
T
x
i
−
2
y
i
T
R
x
i
+
y
i
T
y
i
)
=
arg min
R
∈
S
O
(
d
)
(
∑
i
=
1
n
w
i
x
i
T
x
i
−
2
∑
i
=
1
n
w
i
y
i
T
R
x
i
+
∑
i
=
1
n
w
i
y
i
T
y
i
)
=
arg min
R
∈
S
O
(
d
)
(
−
2
∑
i
=
1
n
w
i
y
i
T
R
x
i
)
(11)
\argmin_{R \in SO(d)} \sum_{i=1}^{n}{w_i || Rx_i - y_i ||^2} = \argmin_{R \in SO(d)} \sum_{i=1}^{n}{w_i (x_i^Tx_i - 2y_i^TRx_i + y_i^Ty_i)} \\ = \argmin_{R \in SO(d)} (\sum_{i=1}^{n}{w_ix_i^Tx_i - 2\sum_{i=1}^{n}{w_i y_i^T R x_i}} + \sum_{i=1}^{n}{w_iy_i^Ty_i}) \\ = \argmin_{R \in SO(d)}(-2 \sum_{i=1}^{n}{w_i y_i^T R x_i}) \tag{11}
R∈SO(d)argmini=1∑nwi∣∣Rxi−yi∣∣2=R∈SO(d)argmini=1∑nwi(xiTxi−2yiTRxi+yiTyi)=R∈SO(d)argmin(i=1∑nwixiTxi−2i=1∑nwiyiTRxi+i=1∑nwiyiTyi)=R∈SO(d)argmin(−2i=1∑nwiyiTRxi)(11)
最后一步(移除
∑
i
=
1
n
w
i
x
i
T
x
i
\sum_{i=1}^{n}{w_ix_i^Tx_i}
∑i=1nwixiTxi 和
∑
i
=
1
n
w
i
y
i
T
y
i
\sum_{i=1}^{n}{w_iy_i^Ty_i}
∑i=1nwiyiTyi)成立,因为这些表达式根本不依赖于
R
R
R,所以移除它们不会影响最小值。最小化表达式乘以标量也是如此,所以我们有
arg min
R
∈
S
O
(
d
)
(
−
2
∑
i
=
1
n
w
i
y
i
T
R
x
i
)
=
arg max
R
∈
S
O
(
d
)
∑
i
=
1
n
w
i
y
i
T
R
x
i
(12)
\argmin_{R \in SO(d)}(-2 \sum_{i=1}^{n}{w_i y_i^T R x_i}) = \argmax_{R \in SO(d)} \sum_{i=1}^{n}{w_i y_i^T R x_i} \tag{12}
R∈SO(d)argmin(−2i=1∑nwiyiTRxi)=R∈SO(d)argmaxi=1∑nwiyiTRxi(12)
我们定义
∑
i
=
1
n
w
i
y
i
T
R
x
i
=
t
r
(
W
Y
T
R
X
)
(13)
\sum_{i=1}^{n}{w_iy_i^TRx_i} = tr(WY^TRX) \tag{13}
i=1∑nwiyiTRxi=tr(WYTRX)(13)
其中
W
=
d
i
a
g
(
w
1
,
w
2
,
.
.
.
,
w
n
)
W = diag(w_1,w_2,...,w_n)
W=diag(w1,w2,...,wn)是带加权对角元素
w
i
w_i
wi的
n
×
n
n \times n
n×n对角矩阵;
Y
Y
Y是一个以
y
i
y_i
yi为列的
d
×
n
d \times n
d×n矩阵,
X
X
X是一个以
x
i
x_i
xi为列的
d
×
n
d \times n
d×n矩阵。我们提醒读者,方阵的迹是对角线上元素的和:
t
r
(
A
)
=
∑
i
=
1
n
a
i
i
tr(A) = \sum_{i=1}^{n}{a_{ii}}
tr(A)=∑i=1naii。参见图1来了解代数操作的说明。
因此,我们正在寻找一个最大化
t
r
(
W
Y
T
R
X
)
tr(WY^TRX)
tr(WYTRX)的旋转
R
R
R。矩阵迹具有性质
t
r
(
A
B
)
=
t
r
(
B
A
)
(14)
tr(AB) = tr(BA) \tag{14}
tr(AB)=tr(BA)(14)
对于任何矩阵维度允许的矩阵
A
A
A和
B
B
B。因此
t
r
(
W
Y
T
R
X
)
=
t
r
(
(
W
Y
T
)
(
R
X
)
)
=
t
r
(
R
X
W
Y
T
)
(15)
tr(WY^TRX) = tr((WY^T)(RX) ) = tr(RXWY^T) \tag{15}
tr(WYTRX)=tr((WYT)(RX))=tr(RXWYT)(15)
让我们定义
d
×
d
d\times d
d×d的协方差矩阵
S
=
X
W
Y
T
S= XWY^T
S=XWYT。对
S
S
S进行SVD分解:
S
=
U
Σ
V
T
(16)
S = U \Sigma V^T \tag{16}
S=UΣVT(16)
现在将分解替换到我们试图最大化的代价函数中:
t
r
(
R
X
W
Y
T
)
=
t
r
(
R
S
)
=
t
r
(
R
U
Σ
V
T
)
=
t
r
(
Σ
V
T
R
U
)
(17)
tr(RXWY^T) = tr(RS) = tr(RU\Sigma V^T) = tr(\Sigma V^T RU) \tag{17}
tr(RXWYT)=tr(RS)=tr(RUΣVT)=tr(ΣVTRU)(17)
最后一步是使用迹的属性(14)实现的。注意
V
V
V,
R
R
R和
U
U
U都是正交矩阵,所以
M
=
V
T
R
U
M = V^TRU
M=VTRU也是正交矩阵。这意味着
M
M
M的列是正交向量,特别是,对于每个
M
M
M的列
m
j
m_j
mj,
m
j
T
m
j
=
1
m_j^Tm_j = 1
mjTmj=1。因此
M
M
M的所有元素
m
i
j
≤
1
m_{ij} \leq 1
mij≤1:
1
=
m
j
T
m
j
=
∑
i
=
1
d
m
i
j
2
→
m
i
j
2
≤
1
→
∣
m
i
j
∣
≤
1
(18)
1 = m_j^Tm_j = \sum_{i=1}^{d}{m_{ij}^2} \to m_{ij}^2 \leq 1 \to |m_{ij}| \leq 1 \tag{18}
1=mjTmj=i=1∑dmij2→mij2≤1→∣mij∣≤1(18)
那么
t
r
(
Σ
M
)
tr(\Sigma M)
tr(ΣM)的最大可能值是多少?请记住,
Σ
\Sigma
Σ是一个对角矩阵,具有非负元素
σ
1
,
σ
2
,
.
.
.
,
σ
d
≥
0
\sigma_1 , \sigma_2 ,..., \sigma_d \geq 0
σ1,σ2,...,σd≥0。因此:
t
r
(
Σ
M
)
=
(
σ
1
σ
2
⋱
σ
d
)
(
m
11
m
12
⋯
m
1
d
m
21
m
22
⋯
m
2
d
⋮
⋮
⋮
⋮
m
d
1
m
d
2
⋯
m
d
d
)
=
∑
i
=
1
d
σ
i
m
i
i
≤
∑
i
=
1
d
σ
i
(19)
tr(\Sigma M) = \begin{pmatrix} \sigma_1 & & & \\ & \sigma_2 & & \\ & & \ddots & \\ & & & \sigma_d\end{pmatrix} \begin{pmatrix} m_{11} & m_{12} & \cdots & m_{1d} \\ m_{21} & m_{22} & \cdots & m_{2d} \\ \vdots & \vdots & \vdots & \vdots \\ m_{d1} & m_{d2} & \cdots & m_{dd} \end{pmatrix} = \sum_{i=1}^{d}{\sigma_i m_{ii}} \leq \sum_{i=1}^{d}{\sigma_i} \tag{19}
tr(ΣM)=⎝⎜⎜⎛σ1σ2⋱σd⎠⎟⎟⎞⎝⎜⎜⎜⎛m11m21⋮md1m12m22⋮md2⋯⋯⋮⋯m1dm2d⋮mdd⎠⎟⎟⎟⎞=i=1∑dσimii≤i=1∑dσi(19)
因此,如果
m
i
i
=
1
m_{ii} = 1
mii=1,则迹最大化。因为
M
M
M是正交矩阵,这意味着
M
M
M必须是单位矩阵!
I
=
M
=
V
T
R
U
→
V
=
R
U
→
R
=
V
U
T
(20)
I = M = V^T RU \to V = RU \to R = VU^T \tag{20}
I=M=VTRU→V=RU→R=VUT(20)
旋转反射
我们刚才描述的过程找到了最优的正交矩阵,除了旋转之外,它还可能包含反射。想象一下,点集 P \mathcal{P} P是点集合 Q \mathcal{Q} Q的完美反射。然后我们会发现反射完美地对齐了两个点集,并在公式(7)中产生零代价,在这种情况下它是全局最小值。然而,如果我们严格要求它是一个旋转,可能就不会有一个完美对齐点集的旋转。
检查是
R
=
V
U
T
R = VU^T
R=VUT否是旋转很简单:如果
d
e
t
(
V
U
T
)
=
−
1
det(VU^T)= -1
det(VUT)=−1,则它包含一个反射,否则
d
e
t
(
V
U
T
)
=
+
1
det(VU^T)= +1
det(VUT)=+1。假设
d
e
t
(
V
U
T
)
=
1
det(VU^T)= 1
det(VUT)=1。限制
R
R
R为旋转等同于限制
M
M
M为反射。我们现在想找到一个反射来最大化:
t
r
(
Σ
M
)
=
σ
1
m
11
+
σ
2
m
22
+
.
.
.
+
σ
d
m
d
d
=
f
(
m
11
,
m
22
,
.
.
.
,
m
d
d
)
(21)
tr(\Sigma M) = \sigma_1m_{11} + \sigma_2 m_{22} + ... + \sigma_d m_{dd} = f(m_{11},m_{22},...,m_{dd}) \tag{21}
tr(ΣM)=σ1m11+σ2m22+...+σdmdd=f(m11,m22,...,mdd)(21)
请注意,
f
f
f只取决于
M
M
M的对角线,而不是它的其他元素。我们现在考虑
m
i
i
m_{ii}
mii作为变量
(
m
11
,
.
.
.
,
m
d
d
)
(m_{11},...,m_{dd})
(m11,...,mdd)。这是
n
n
n阶反射矩阵的所有对角线元素的集合。令人惊讶的是,它的结构非常简单。事实上,A.Horn[1]的一个结果表明,
n
n
n阶旋转矩阵的所有对角线的集合等于点集
(
±
1
,
.
.
.
,
±
1
)
(\pm1,...,\pm1)
(±1,...,±1)的凸包,偶数个坐标为
−
1
-1
−1。因为任何反射矩阵都可以通过反转旋转矩阵一行的符号来构造,反之亦然,所以我们优化的集合是具有非偶数个
−
1
-1
−1的点集
(
±
1
,
.
.
.
,
±
1
)
(\pm1,...,\pm1)
(±1,...,±1)的凸包。
由于我们的定义域是凸多面体,所以线性函数
f
f
f在其顶点处有极值。对角线
(
1
,
1
,
.
.
.
,
1
)
(1,1,...,1)
(1,1,...,1)不在域中,因为它有偶数个
−
1
-1
−1(即零),因此下一个最佳选择是
(
1
,
1
,
.
.
.
,
1
,
−
1
)
(1,1,...,1,−1)
(1,1,...,1,−1):
t
r
(
Σ
M
)
=
σ
1
+
σ
2
+
.
.
.
+
σ
d
−
1
−
σ
d
(22)
tr(\Sigma M) = \sigma_1 + \sigma_2 + ... + \sigma_{d-1} - \sigma_d \tag{22}
tr(ΣM)=σ1+σ2+...+σd−1−σd(22)
这个值是在我们的定义域的一个顶点上得到的,并且比形式
(
±
1
,
.
.
.
,
±
1
)
(\pm1,...,\pm1)
(±1,...,±1)除了
(
1
,
1
,
.
.
.
,
1
)
(1,1,...,1)
(1,1,...,1)的组合更大,因为
σ
d
\sigma_d
σd是最小的奇异值。
总而言之,我们得出这样一个事实,如果
d
e
t
(
V
U
T
)
=
−
1
det(VU^T)= -1
det(VUT)=−1,我们需要
M
=
V
T
R
U
=
(
1
1
⋱
1
−
1
)
→
R
=
V
(
1
1
⋱
1
−
1
)
U
T
(23)
M = V^TRU = \begin{pmatrix} 1 & & & & \\ & 1 & & & \\ & & \ddots & & \\ & & & 1 & \\ & & & & -1 \end{pmatrix} \to R = V\begin{pmatrix} 1 & & & & \\ & 1 & & & \\ & & \ddots & & \\ & & & 1 & \\ & & & & -1 \end{pmatrix}U^T \tag{23}
M=VTRU=⎝⎜⎜⎜⎜⎛11⋱1−1⎠⎟⎟⎟⎟⎞→R=V⎝⎜⎜⎜⎜⎛11⋱1−1⎠⎟⎟⎟⎟⎞UT(23)
我们可以写出一个包含两种情况的通用公式,
d
e
t
(
V
U
T
)
=
1
det(VU^T) = 1
det(VUT)=1和
d
e
t
(
V
U
T
)
=
1
det(VU^T)= 1
det(VUT)=1:
R
=
V
(
1
1
⋱
1
d
e
t
(
V
U
T
)
)
U
T
(24)
R = V\begin{pmatrix} 1 & & & & \\ & 1 & & & \\ & & \ddots & & \\ & & & 1 & \\ & & & & det(VU^T) \end{pmatrix}U^T \tag{24}
R=V⎝⎜⎜⎜⎜⎛11⋱1det(VUT)⎠⎟⎟⎟⎟⎞UT(24)
刚体运动计算-概述
让我们总结一下计算最有平移
t
t
t和旋转
R
R
R的步骤
∑
i
=
1
n
w
i
∣
∣
(
R
p
i
+
t
)
−
q
i
∣
∣
2
\sum_{i=1}^{n}{w_i ||(Rp_i+t) - q_i||^2}
i=1∑nwi∣∣(Rpi+t)−qi∣∣2
- 计算两个点集的加权质心
p ˉ = ∑ i = 1 n w i p i ∑ i = 1 n w i , q ˉ = ∑ i = 1 n w i q i ∑ i = 1 n w i \bar{p} = \frac{ \sum_{i=1}^{n}{w_ip_i} }{\sum_{i=1}^{n}{w_i}},\bar{q} = \frac{ \sum_{i=1}^{n}{w_iq_i} }{\sum_{i=1}^{n}{w_i}} pˉ=∑i=1nwi∑i=1nwipi,qˉ=∑i=1nwi∑i=1nwiqi - 计算去中心的坐标
x i = p i − p ˉ , y i = q i − q ˉ x_i = p_i - \bar{p} , y_i = q_i - \bar{q} xi=pi−pˉ,yi=qi−qˉ - 计算
d
×
d
d \times d
d×d的协方差矩阵
S = X W Y T S= XWY^T S=XWYT
其中 W = d i a g ( w 1 , w 2 , . . . , w n ) W = diag(w_1,w_2,...,w_n) W=diag(w1,w2,...,wn)是带加权对角元素 w i w_i wi的 n × n n \times n n×n对角矩阵; Y Y Y是一个以 y i y_i yi为列的 d × n d \times n d×n矩阵, X X X是一个以 x i x_i xi为列的 d × n d \times n d×n矩阵。 - 计算奇异值分解
S
=
U
Σ
V
T
S = U\Sigma V^T
S=UΣVT,旋转矩阵可以由以下公式求出
R = V ( 1 1 ⋱ 1 d e t ( V U T ) ) U T R = V\begin{pmatrix} 1 & & & & \\ & 1 & & & \\ & & \ddots & & \\ & & & 1 & \\ & & & & det(VU^T) \end{pmatrix}U^T R=V⎝⎜⎜⎜⎜⎛11⋱1det(VUT)⎠⎟⎟⎟⎟⎞UT - 计算最优的平移
t = q ˉ − R p ˉ t = \bar{q} - R \bar{p} t=qˉ−Rpˉ