Lie Groups for Beginners

作者:Frank Dellaert
February 7, 2016

1. Motivation: Rigid Motions in the Plane

我们从平面移动机器人的一个小例子开始,平面中的移动机器人参数化为 ( x , y , θ ) (x, y, \theta) (x,y,θ)。当我们给定一个微小的前进速度 v x v_x vx,我们知道位置的变化
x ˙ = v x \dot x = v_x x˙=vx
是下面微分方程的解,机器人的初始化位置为 x 0 x_0 x0
x t = x 0 + v x t x_t = x_0 + v_x t xt=x0+vxt
与此类似,我们可以得到y方向上的平移,事实上,对于平移(x和y方向),一般情况下我们有
( x t , y t , θ t ) = ( x 0 + v x t , y 0 + v y t , θ 0 ) (x_t, y_t, \theta_t) = (x_0 + v_xt, y_0+v_yt, \theta_0) (xt,yt,θt)=(x0+vxt,y0+vyt,θ0)
类似的,对于旋转我们有
( x t , y t , θ t ) = ( x 0 , y 0 , θ 0 + ω t ) (x_t, y_t, \theta_t) = (x_0, y_0, \theta_0 + \omega t) (xt,yt,θt)=(x0,y0,θ0+ωt)
其中 ω \omega ω是角速度,测量逆时针方向,单位为rad/s.

然而,如果我们将平移和旋转结合起来,则不成立了!我们不能写作
( x t , y t , θ t ) = ( x 0 + v x t , y 0 + v y t , θ 0 + ω t ) (x_t, y_t, \theta_t) = (x_0 +v_x t , y_0 + v_yt, \theta_0 + \omega t) (xt,yt,θt)=(x0+vxt,y0+vyt,θ0+ωt)
原因是,如果我们根据速度向量 ( v x , v y , ω ) (v_x, v_y,\omega) (vx,vy,ω)移动机器人一个微小量,我们有(一阶近似)
( x δ , y δ , θ δ ) = ( x 0 + v x δ , y 0 + v y δ , θ 0 + ω δ ) (x_\delta, y_\delta, \theta_\delta) = (x_0 + v_x \delta, y_0 + v_y \delta, \theta_0 + \omega \delta) (xδ,yδ,θδ)=(x0+vxδ,y0+vyδ,θ0+ωδ)
但是现在机器人有旋转,对于接下来的增量,速度向量在应用之前被旋转。事实上,机器人在圆形轨迹上运动。
Robot moving along a circular trajectory.

原因是平移和旋转不能够交换:先平移后旋转跟先旋转后平移到达不同的位置,正像说的:如果旋转和平移可以交换,那么我们可以在离开家之前做完所有的旋转。

Approximating a circular trajectory with n steps
为了更近一步,我们必须更加精确的描述机器人如何表现。具体的说,让我们定义 T 1 , T 2 T_1, T_2 T1,T2的组合为
T 1 T 2 = ( x 1 , y 1 , θ 1 ) ( x 2 , y 2 , θ 2 ) = ( x 1 + cos ⁡ θ 1 x 2 − sin ⁡ θ 1 y 2 , y 1 + sin ⁡ θ 1 x 2 + cos ⁡ θ 1 y 2 , θ 1 + θ 2 ) T_1 T_2 = (x_1, y_1, \theta_1)(x_2, y_2, \theta_2) = (x_1+\cos \theta_1 x_2-\sin \theta_1 y_2, y_1+\sin \theta_1 x_2 + \cos \theta_1 y_2, \theta_1 + \theta_2) T1T2=(x1,y1,θ1)(x2,y2,θ2)=(x1+cosθ1x2sinθ1y2,y1+sinθ1x2+cosθ1y2,θ1+θ2
这有点笨拙,所以我们求助于一个技巧:将2D位姿嵌入3×3矩阵的空间中,因此我们可以定义为矩阵乘法组合:
T 1 T 2 = [ R 1 t 1 0 1 ] [ R 2 t 2 0 1 ] = [ R 1 R 2 R 1 t 2 + t 1 0 1 ] T_1 T_2 = \begin{bmatrix} R_1 & t_1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} R_2 & t_2 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} R_1 R_2 & R_1 t_2 + t_1 \\ 0 & 1 \end{bmatrix} T1T2=[R10t11][R20t21]=[R1R20R1t2+t11]
其中矩阵 R R R是2D旋转矩阵,定义为
R = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] R = \begin{bmatrix} \cos \theta & - \sin \theta \\ \sin \theta & \cos \theta \end{bmatrix} R=[cosθsinθsinθcosθ]

现在,机器人做极小的运动可以写为
T ( δ ) = [ cos ⁡ ω δ − sin ⁡ ω δ v x δ sin ⁡ ω δ cos ⁡ ω δ v y δ 0 0 1 ] ≈ [ 1 − ω δ v x δ ω δ 1 v y δ 0 0 1 ] = I + δ [ 0 − ω v x ω 0 v y 0 0 0 ] T(\delta)=\begin{bmatrix} \cos \omega \delta & -\sin \omega \delta & v_x \delta \\ \sin \omega \delta & \cos \omega \delta & v_y \delta \\ 0 & 0 & 1 \end{bmatrix} \approx \begin{bmatrix} 1 & -\omega \delta & v_x \delta \\ \omega \delta & 1 & v_y \delta \\ 0 & 0 & 1 \end{bmatrix}= \mathbf{I} + \delta \begin{bmatrix} 0 & -\omega & v_x \\ \omega & 0 & v_y \\ 0 & 0 & 0 \end{bmatrix} T(δ)=cosωδsinωδ0sinωδcosωδ0vxδvyδ11ωδ0ωδ10vxδvyδ1=I+δ0ω0ω00vxvy0
让我们定义2D twist 向量 ξ = ( v , ω ) \xi=(v,\omega) ξ=(v,ω),上述矩阵可写为
ξ ^ ≜ [ 0 − ω v x ω 0 v y 0 0 0 ] \hat \xi \triangleq \begin{bmatrix} 0 & - \omega & v_x \\ \omega & 0 & v_y \\ 0 & 0 & 0 \end{bmatrix} ξ^0ω0ω00vxvy0

如果我们想要让t更大,我们可以把t划分成更小的时间戳,例如划分成n个,有
T ( t ) = ( I + t n ξ ^ ) . . . n   t i m e s . . . ( I + t n ξ ^ ) = ( I + t n ξ ^ ) n T(t) = (I + \frac{t}{n} \hat \xi)... n \, times ... (I + \frac{t}{n} \hat \xi) = (I + \frac{t}{n} \hat \xi)^n T(t)=(I+ntξ^)...ntimes...(I+ntξ^)=(I+ntξ^)n
结果如图2所示, 当然,如果取n到无穷大,则有
T ( t ) = lim ⁡ n → ∞ ( I + t n ξ ^ ) n T(t) = \lim_{n \rightarrow \infty} (I + \frac{t}{n} \hat \xi)^n T(t)=nlim(I+ntξ^)n
对于实数,该式是指数函数的多项式形式
e x = lim ⁡ n → ∞ ( 1 + x n ) n = ∑ k = 0 ∞ x k k ! e^x = \lim_{n \rightarrow \infty}(1+\frac{x}{n})^n = \sum^{\infty}_{k=0} \frac{x^k}{k!} ex=nlim(1+nx)n=k=0k!xk
该形式可以用来定义方阵,最终的结果表示机器人沿着圆形轨迹运动,得到 ξ ^ \hat \xi ξ^的矩阵指数
T ( t ) = e t ξ ^ ≜ lim ⁡ n → ∞ ( I + t n ξ ^ ) n = ∑ k = 0 ∞ t k k ! ξ ^ k T(t) = e^{t \hat \xi} \triangleq \lim_{n \rightarrow \infty}(I + \frac{t}{n} \hat \xi)^n = \sum^{\infty}_{k=0}\frac{t^k}{k!} \hat \xi^k T(t)=etξ^nlim(I+ntξ^)n=k=0k!tkξ^k
我们称该映射为从2D twist ξ ^ \hat \xi ξ^到2D刚体变化的指数映射。

以上具备李群理论的所有要素。我们称2d刚体变换空间以及空间中的操作为特殊欧几里得群( S E ( 2 ) SE(2) SE(2))。之所以称为李群,是因为它同时是一个拓扑群和一个流形,这意味着乘法和求逆运算是平滑的。2D twists的空间以及下面将要定义的特殊二元操作称为与 S E ( 2 ) SE(2) SE(2)关联的李代数 s e ( 2 ) \mathfrak{se}(2) se(2)

2. Basic Lie Group Concepts

现在,我们定义上面说明的概念,引入一些符号,然后大致了解一下。 在此之后,我们将介绍最常用的李群及其李代数。

2.1 A Manifold and a Group

李群 G G G既是群又是具有光滑群操作的流形。与之相关联的是李代数 g \mathfrak{g} g,从广义上讲,它可以在单位的正切空间处确定,并完全定义了群在单位附近的表现。从 g \mathfrak{g} g G G G有一个映射,称为指数映射。
e x p : g → G \mathrm{exp}: \mathfrak{g} \rightarrow G exp:gG
它是多对一的映射。可以在原点周围局部定义相应的逆,因此是一个“对数”
l o g : G → g \mathrm{log}:G \rightarrow \mathfrak{g} log:Gg
它将 G G G中单位周围的元素映射到 g \mathfrak{g} g中的元素。

李群的一个重要族是矩阵李群,其元素为n×n可逆矩阵,所有这些矩阵的集合以及矩阵乘法被称为维数为n的一般线性群 G L ( n ) GL(n) GL(n),以及 它的封闭子组是矩阵李群。 我们感兴趣的大多数(如果不是全部)李群将是矩阵李群。

2.2 Lie Algebra

李代数 g \mathfrak{g} g被称为代数,因为它具有二元操作李括号 [ X , Y ] [X,Y] [XY],其性质与 G G G群操作密切相关。例如,与代数相关的矩阵李群,李括号为 [ A , B ] ≜ A B − B A [A, B] \triangleq AB-BA [A,B]ABBA.

李括号对李群操作的关系如下:对于可交换李群, g \mathfrak{g} g中加性向量 X + Y X+Y X+Y模仿了李群操作。例如,在 g \mathfrak{g} g中,如果有 Z = X + Y Z= X + Y Z=X+Y,当通过指数映射到 G G G中我们有
e Z = e X + Y = e X e Y e^Z = e^{X+Y} = e^X e^Y eZ=eX+Y=eXeY
然而,对于非交换李群不适用:
Z = log ⁡ ( e X e Y ) ≠ X + Y Z = \log(e^Xe^Y) \neq X + Y Z=log(eXeY)=X+Y
然而, Z Z Z可利用BCH(Baker-Campbell-Hausdorff)公式计算1:
Z = X + Y + [ X , Y ] / 2 + [ X − Y , [ X , Y ] ] / 12 − [ Y , [ X , [ X , Y ] ] ] / 24 + . . . Z = X +Y + [X,Y ]/2 + [X −Y, [X,Y ]]/12 − [Y, [X, [X,Y ]]]/24 + . . . Z=X+Y+[X,Y]/2+[XY,[X,Y]]/12[Y,[X,[X,Y]]]/24+...

对于交换群李括号是零,我们可以通过 Z = X + Y Z = X + Y Z=X+Y。对于非交换群我们可以使用BCH公式去近似。

2.3 Exponential Coordinates

对于n维矩阵李群,与在李代数 g \mathfrak{g} g中的向量空间 R n \R^n Rn是同构的,我们可以定义hat 运算2:
^ : x ∈ R n → x ^ ∈ g \hat{}: x \in \R^n \rightarrow \hat x \in \mathfrak{g} ^:xRnx^g
表示将n维向量 x ∈ R n x \in \R^n xRn映射到 g \mathfrak{g} g空间元素,在矩阵李群中, g \mathfrak{g} g的元素 x ^ \hat x x^也是 n × n n \times n n×n矩阵,该映射为
x ^ = ∑ i = 1 n x i G i (1) \hat x = \sum_{i=1}^n x_i G^i \tag{1} x^=i=1nxiGi(1)
其中 G i G^i Gi是李群生成器(generators)的 n × n n \times n n×n矩阵。映射 x → x ^ x→x̂ xx^的含义将取决于群 G G G,并且通常具有直观的解释。

2.4 Actions

群元素作用到流形 M M M上是一个重要的概念,例如,2D旋转作用到2D点上,3D旋转作用到3D点上等。尤其是在 M M M G G G的左作用定义为一个平滑的映射 Φ \Phi Φ: G × M → M G \times M \rightarrow M G×MM有:

  1. 单位元素 e e e没有影响,也就是 Φ ( e , p ) = p \Phi(e,p) = p Φ(e,p)=p
  2. 两个作用组合成一个作用: Φ ( g , Φ ( h , p ) ) = Φ ( g h , p ) \Phi(g, \Phi(h, p))=\Phi(gh, p) Φ(g,Φ(h,p))=Φ(gh,p)

n维矩阵群 G G G的作用(action)是乘 R n \R^n Rn上的矩阵向量,
q = A p q = A p q=Ap
其中 p , q ∈ R n p, q \in \R^n p,qRn A ∈ G ⊆ G L ( n ) A \in G \sube GL(n) AGGL(n)

2.5 The Adjoint Map and Adjoint Representation

假设一个点 p p p在坐标系 T T T中表示为 p ′ p' p,也就是 p ′ = T p p' = Tp p=Tp,其中 T T T表示全局坐标 p p p到局部坐标 p ′ p' p的变换。为了作用 A A A,我们首先需要消去作用的 T T T,然后应用 A A A, 然后在结果上在作用 T T T:
q ′ = T A T − 1 p ′ q' = TAT^{-1}p' q=TAT1p
矩阵 T A T − 1 TAT^{-1} TAT1被认为是 A A A的共轭,这是群论的核心要素。
一般,伴随映射(adjoint map) A d g \mathbf{Ad}_g Adg通过 g g g映射群元素 a ∈ G a \in G aG到它的共轭 g a g − 1 gag^{-1} gag1。该映射在群 G G G中获取,但它在李代数 g \mathfrak{g} g有等价的表示:
A d g e x ^ = g   e x p ( x ^ )   g − 1 = e x p ( A d g   x ^ ) \mathbf{Ad}_ge^{\hat{x}} = g \, \mathrm{exp}(\hat{x}) \, g^{-1} = \mathrm{exp}(Ad_g \, \hat{x}) Adgex^=gexp(x^)g1=exp(Adgx^)
其中 A d g : g ↦ g Ad_g: \mathfrak{g} \mapsto \mathfrak{g} Adg:gg表示通过群元素 g g g参数化的映射,也称作伴随表示。 直观的解释是定义在原点(origin),但应用在群元素 g g g上的变化 e x p ( x ^ ) \mathrm{exp}(\hat {x}) exp(x^)可以写作 x ^ \hat{x} x^的伴随 A d g   x ^ Ad_g \, \hat{x} Adgx^

在矩阵李群的特殊情况下,伴随可以写成
A d T   x ^ ≜ T x ^ T − 1 Ad_T \, \hat{x} \triangleq T \hat{x}T^{-1} AdTx^Tx^T1
因此我们有
T e x ^ T − 1 = e T x ^ T − 1 (2) T e^{\hat{x}} T^{-1} = e^{T\hat{x}T^{-1}} \tag{2} Tex^T1=eTx^T1(2)
其中 T ∈ G T \in G TG, x ^ ∈ g \hat {x} \in \mathfrak{g} x^g是n维李代数的 n × n n \times n n×n矩阵。

3. 2D Rotation

我们首先看一个简单的2D旋转群。

3.1 Basics

李群 S O ( 2 ) SO(2) SO(2) 2 × 2 2 \times 2 2×2可逆矩阵的一般线性群 G L ( 2 ) GL(2) GL(2)的子群,它的李代数是 2 × 2 2 \times 2 2×2 斜对称(skew-symmetric)矩阵的向量空间。因为 S O ( 2 ) SO(2) SO(2)是一维流形,所以 s o ( 2 ) \mathfrak{so(2)} so(2) R \reals R同构,我们定义
^ : R ↦ s o ( 2 ) ^ : ω ↦ ω ^ = [ ω ] + \hat{}: \reals \mapsto \mathfrak{so(2)} \\ \hat{} : \omega \mapsto \hat{\omega}= [\omega]_+ ^:Rso(2)^:ωω^=[ω]+
映射角度 ω \omega ω 2 × 2 2 \times 2 2×2斜对称矩阵 [ ω ] + [\omega]_+ [ω]+:
[ w ] + = [ 0 − ω ω 0 ] [w]_+ = \begin{bmatrix} 0 & - \omega \\ \omega & 0 \end{bmatrix} [w]+=[0ωω0]
指数映射的闭合形式为:
e [ ω ] + = [ cos ⁡ ω − sin ⁡ ω sin ⁡ ω cos ⁡ ω ] e^{[\omega]_+} = \begin{bmatrix} \cos \omega & - \sin \omega \\ \sin \omega & \cos \omega \end{bmatrix} e[ω]+=[cosωsinωsinωcosω]

3.2 Diagonalized Form

矩阵 [ 1 ] + [1]_+ [1]+可以通过奇异值 − i , i -i, i i,i和奇异向量 [ 1 i ] {1 \brack i} [i1] [ i 1 ] {i \brack 1} [1i]对角化。对投影几何熟悉的读者认为是(齐次坐标表示的)圆环点,具体有:
[ w ] + = [ 0 − ω ω 0 ] = [ 1 i i 1 ] [ − i ω 0 0 i ω ] [ 1 i i 1 ] − 1 [w]_+ = \begin{bmatrix} 0 & - \omega \\ \omega & 0 \end{bmatrix}= \begin{bmatrix} 1 & i \\ i & 1 \end{bmatrix} \begin{bmatrix} -i \omega & 0 \\ 0 & i \omega \end{bmatrix} \begin{bmatrix} 1 & i \\ i & 1 \end{bmatrix}^{-1} [w]+=[0ωω0]=[1ii1][iω00iω][1ii1]1
因此有
e [ w ] + = 1 2 [ 1 i i 1 ] [ e − i ω 0 0 e i ω ] [ 1 − i − i 1 ] = [ cos ⁡ ω − sin ⁡ ω sin ⁡ ω cos ⁡ ω ] e^{[w]_+} = \frac{1}{2} \begin{bmatrix} 1 & i \\ i & 1 \end{bmatrix} \begin{bmatrix} e^{-i \omega} & 0 \\ 0 & e^{i \omega} \end{bmatrix} \begin{bmatrix} 1 & -i \\ -i & 1 \end{bmatrix} = \begin{bmatrix} \cos \omega & - \sin \omega \\ \sin \omega & \cos \omega \end{bmatrix} e[w]+=21[1ii1][eiω00eiω][1ii1]=[cosωsinωsinωcosω]
其中 e i ω = cos ⁡ ω + i sin ⁡ ω e^{i \omega} = \cos \omega + i \sin \omega eiω=cosω+isinω

3.3 Adjoint

s o ( 2 ) \mathfrak{so(2)} so(2)的伴随是恒等式,对于所有的交换群也一样:
A d R ω ^ = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ 0 − ω ω 0 ] [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] T = w [ − sin ⁡ θ − cos ⁡ θ cos ⁡ θ − sin ⁡ θ ] [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] = [ 0 − ω ω 0 ] Ad_R \hat \omega = \begin{bmatrix} \cos \theta & - \sin \theta \\ \sin \theta & \cos \theta \end{bmatrix} \begin{bmatrix} 0 & -\omega \\ \omega & 0 \end{bmatrix} \begin{bmatrix} \cos \theta & - \sin \theta \\ \sin \theta & \cos \theta \end{bmatrix}^T \\ = w \begin{bmatrix} -\sin \theta & - \cos \theta \\ \cos \theta & -\sin \theta \end{bmatrix} \begin{bmatrix} \cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{bmatrix}= \begin{bmatrix} 0 & - \omega \\ \omega & 0 \end{bmatrix} AdRω^=[cosθsinθsinθcosθ][0ωω0][cosθsinθsinθcosθ]T=w[sinθcosθcosθsinθ][cosθsinθsinθcosθ]=[0ωω0]

A d R ω ^ = ω ^ Ad_R \hat \omega = \hat \omega AdRω^=ω^

3.4 Actions

对于 S O ( 2 ) SO(2) SO(2)的向量空间是 R 2 \reals^2 R2,群操作对应于一个旋转点
q = R p q = R p q=Rp
现在我们想知道通过 ω \omega ω参数化一个增量发生了什么:
q ( ω ) = R e [ ω ] + p q(\omega) = R e^{[\omega]_+} p q(ω)=Re[ω]+p
对于一个小角度 ω \omega ω,我们有
e [ ω ] + ≈ I + [ ω ] + = I + ω [ 1 ] + e^{[\omega]_+} \approx I + [\omega]_+ = I + \omega[1]_+ e[ω]+I+[ω]+=I+ω[1]+
其中 [ 1 ] + [1]_+ [1]+操作像是平面上作用在点的叉积:
[ 1 ] + [ x y ] = R π / 2 [ x y ] = [ − y x ] (3) [1]_+ \begin{bmatrix} x \\ y \end{bmatrix} =R_{\pi/2} \begin{bmatrix} x \\ y \end{bmatrix} =\begin{bmatrix} -y \\ x \end{bmatrix} \tag{3} [1]+[xy]=Rπ/2[xy]=[yx](3)
因此该操作的导数为:
∂ q ( ω ) ∂ ω = R ∂ ω ( e [ ω ] + p ) = R ∂ ω ( ω [ 1 ] + p ) = R H p \frac{\partial q(\omega)}{\partial \omega} = R \frac{\partial}{\omega}(e^{[\omega]_+}p) = R \frac{\partial}{\omega}(\omega [1]_+p) = R H_p ωq(ω)=Rω(e[ω]+p)=Rω(ω[1]+p)=RHp
其中 H p H_p Hp是依赖 p p p 2 × 1 2 \times 1 2×1矩阵:
H p ≜ [ 1 ] + p = [ − p y p x ] H_p \triangleq [1]_+p ={-p_y \brack p_x} Hp[1]+p=[pxpy]

4. 2D Rigid Transformations

4.1 Basics

李群 S E ( 2 ) SE(2) SE(2) 3 × 3 3 \times 3 3×3可逆矩阵的一般线性群 G L ( 3 ) GL(3) GL(3)的子群,它的形式为:
T ≜ [ R t 0 1 ] T \triangleq \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} T[R0t1]
其中 R ∈ S O ( 2 ) R \in SO(2) RSO(2)是一个旋转矩阵, t ∈ R 2 t \in \reals^2 tR2是一个平移向量。 S E ( 2 ) SE(2) SE(2) R 2 \reals^2 R2 S O ( 2 ) SO(2) SO(2)的半直积(semi-direct product),写作 S E ( 2 ) = R 2 ⋊ S O ( 2 ) SE(2) = \reals^2 \rtimes SO(2) SE(2)=R2SO(2),具体的,对于 S E ( 2 ) SE(2) SE(2)中的任何元素 T T T可以写为:
T = [ 1 t 0 1 ] [ R 0 0 1 ] T= \begin{bmatrix} 1 & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} R & 0 \\ 0 & 1 \end{bmatrix} T=[10t1][R001]
它们的组合为
[ R 1 t 1 0 1 ] [ R 2 t 2 0 1 ] = [ R 1 R 2 R 1 t 2 + t 1 0 1 ] \begin{bmatrix} R_1 & t_1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} R_2 & t_2 \\ 0 & 1 \end{bmatrix}= \begin{bmatrix} R_1 R_2 & R_1t_2 + t_1 \\ 0 & 1 \end{bmatrix} [R10t11][R20t21]=[R1R20R1t2+t11]
也可以写成下面按序匹配的方式:
( R 1 , t 1 ) ( R 2 , t 2 ) = ( R 1 R 2 , R 1 t 2 + t 1 ) (R_1, t_1)(R_2, t_2) = (R_1R_2, R_1t_2 + t1) (R1,t1)(R2,t2)=(R1R2,R1t2+t1)
对应的李代数 s e ( 2 ) \mathfrak{se(2)} se(2)是由twist 坐标 ξ ∈ R 3 \xi \in \reals^3 ξR3参数化的 3 × 3 3 \times 3 3×3 twists ξ ^ \hat \xi ξ^向量空间, 该映射为:
ξ ≜ [ v ω ] ↦ ξ ^ ≜ [ [ w ] + v 0 0 ] \xi \triangleq {v \brack \omega} \mapsto \hat \xi \triangleq \begin{bmatrix} [w]_+ & v \\ 0 & 0 \end{bmatrix} ξ[ωv]ξ^[[w]+0v0]
注意,我们认为机器人有位姿 ( x , y , θ ) (x, y, \theta) (x,y,θ),其中一二两项是平移部分,最后一项是旋转部分,它们对应的李群生成器是
G x = [ 0 0 1 0 0 0 0 0 0 ] , G y = [ 0 0 0 0 0 1 0 0 0 ] , G θ = [ 0 − 1 0 1 0 0 0 0 0 ] G^x = \begin{bmatrix} 0 & 0 & 1 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix}, G^y = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 0 & 0 \end{bmatrix}, G^{\theta} = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix} Gx=000000100,Gy=000000010,Gθ=010100000
应用指数映射到twist ξ \xi ξ得到screw motion:
T = e ξ ^ = ( e [ ω ] + , ( I − e [ ω ] + ) v ⊥ ω ) T = e^{\hat \xi} = \Big( e^{[\omega]_+}, (I - e^{[\omega]_+})\frac{v^{\perp}}{\omega}\Big) T=eξ^=(e[ω]+,(Ie[ω]+)ωv)

4.2 The Adjoint Map

伴随
A d T ξ ^ = T ξ ^ T − 1 = [ R t 0 1 ] [ [ ω ] + v 0 0 ] [ R T − R T t 0 1 ] = [ [ ω ] + − [ ω ] + t + R v 0 0 ] = [ [ ω ] + R v − t ⊥ ω 0 0 ] (4) \begin{aligned} Ad_T \hat \xi &= T \hat \xi T^{-1} \\ &=\begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} [\omega]_+ & v \\ 0 & 0 \end{bmatrix} \begin{bmatrix} R^T & -R^Tt \\ 0 & 1 \end{bmatrix} \\ &=\begin{bmatrix} [\omega]_+ & -[\omega]_+t + Rv \\ 0 & 0 \end{bmatrix} \\ &=\begin{bmatrix} [\omega]_+ & Rv - t^{\perp} \omega \\ 0 & 0 \end{bmatrix} \tag{4} \end{aligned} AdTξ^=Tξ^T1=[R0t1][[ω]+0v0][RT0RTt1]=[[ω]+0[ω]+t+Rv0]=[[ω]+0Rvtω0](4)
由此我们可以通过平面twist坐标表示伴随映射
[ v ′ ω ′ ] = [ R − t ⊥ 0 1 ] [ v ω ] {v^{'} \brack \omega^{'}} = \begin{bmatrix} R & - t^{\perp} \\ 0 & 1 \end{bmatrix} {v \brack \omega} [ωv]=[R0t1][ωv]

4.3 actions

S E ( 2 ) SE(2) SE(2)在2D点上的作用是通过使用齐次坐标将点嵌入 R 3 \reals^3 R3中来完成
q ^ = [ q 1 ] = [ R t 0 1 ] [ p 1 ] = T p ^ \hat q = {q \brack 1} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix}{p \brack 1}=T \hat p q^=[1q]=[R0t1][1p]=Tp^
S E ( 3 ) SE(3) SE(3)类似(下面),我们可以在局部T坐标系中计算速度 ξ ^ p ^ \hat \xi \hat p ξ^p^:
ξ ^ p ^ = [ [ ω ] + v 0 0 ] [ p 1 ] = [ [ ω ] + p + v 0 ] \hat \xi \hat p = \begin{bmatrix} [\omega]_+ & v \\ 0 & 0 \end{bmatrix} {p \brack 1}= \begin{bmatrix} [\omega]_+p +v \\ 0 \end{bmatrix} ξ^p^=[[ω]+0v0][1p]=[[ω]+p+v0]
仅取最上面的两行,我们可以把它作为 R 2 \reals^2 R2上的速度,因为 H p H_p Hp是直接作用在指数坐标 ξ \xi ξ上的 2 × 3 2 \times 3 2×3矩阵:
[ ω ] + p + v = v + R π / 2 p ω = [ I 2 R π / 2 p ] [ v ω ] = H p ξ [\omega]_+p + v = v + R_{\pi/2}p \omega = \begin{bmatrix} I_2 & R_{\pi/2}p \end{bmatrix} \begin{bmatrix} v \\ \omega \end{bmatrix} =H_p \xi [ω]+p+v=v+Rπ/2pω=[I2Rπ/2p][vω]=Hpξ

5. 3D Rotations

5.1 Basics

李群 S O ( 3 ) SO(3) SO(3) 3 × 3 3 \times 3 3×3可逆矩阵的一般线性群 G L ( 3 ) GL(3) GL(3)的子群,它的李代数 s e ( 3 ) \mathfrak{se(3)} se(3) 3 × 3 3 \times 3 3×3斜对称(skew-symmetric)矩阵 ω ^ \hat \omega ω^的线性空间。因为 S O ( 3 ) SO(3) SO(3)是一个三维流形, s o ( 3 ) \mathfrak{so(3)} so(3) R 3 \reals^3 R3同构,我们定义映射
^ : R 3 → s o ( 3 ) ^ : ω → ω ^ = [ ω ] × \hat{}:\reals^3 \to \mathfrak{so(3)} \\ \hat{}: \omega \to \hat \omega = [\omega]_\times ^:R3so(3)^:ωω^=[ω]×
它映射三维向量 ω \omega ω到斜对称矩阵 [ ω ] × [\omega]_\times [ω]×:
[ ω ] × = [ 0 − ω z ω y ω z 0 − ω x − ω y ω x 0 ] = ω x G x + ω y G y + ω z G z [\omega]_\times = \begin{bmatrix} 0 & - \omega_z & \omega_y \\ \omega_z & 0 & -\omega_x \\ -\omega_y & \omega_x & 0 \end{bmatrix}=\omega_x G^x+\omega_yG^y + \omega_zG^z [ω]×=0ωzωyωz0ωxωyωx0=ωxGx+ωyGy+ωzGz
这里矩阵 G i G^i Gi S O ( 3 ) SO(3) SO(3)的生成器,
G x = ( 0 0 0 0 0 − 1 0 1 0 ) , G y = ( 0 0 1 0 0 0 − 1 0 0 ) , G z = ( 0 − 1 0 1 0 0 0 0 0 ) G^{x} =\begin{pmatrix} 0 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{pmatrix}, G^y = \begin{pmatrix} 0 & 0 & 1 \\ 0 & 0 & 0 \\ -1 & 0 & 0 \end{pmatrix}, G^z=\begin{pmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix} Gx=000001010,Gy=001000100,Gz=010100000
分别对应到绕着X, Y, Z的旋转, s o ( 3 ) \mathfrak{so(3)} so(3)中的李括号 [ x , y ] [x, y] [x,y]对应到 R 3 \reals^3 R3中的叉积 x × y x \times y x×y

因此,对于三维向量 ω \omega ω有一个对应的旋转
R = e [ ω ] × R = e^{[\omega]_\times} R=e[ω]×
它定义了已知 ω \omega ω作为canonical 或者指数坐标, S O ( 3 ) SO(3) SO(3)的canonical 参数化。它等价于旋转的轴角表示,其中单位向量 ω / θ \omega/\theta ω/θ定义旋转轴,旋转角 θ \theta θ定义旋转量的大小。
指数映射的闭合形式可以通过Rodrigues 公式2计算
e ω ^ = I + sin ⁡ θ θ ω ^ + 1 − cos ⁡ θ θ 2 ω ^ 2 (5) e^{\hat \omega} = I + \frac{\sin \theta}{\theta} \hat \omega + \frac{1-\cos \theta}{\theta^2} \hat \omega^2 \tag{5} eω^=I+θsinθω^+θ21cosθω^2(5)
其中 ω ^ 2 = ω ω T − I \hat \omega^2 = \omega \omega^T - I ω^2=ωωTI, ω ω t \omega \omega^t ωωt ω \omega ω的外积,因此,一个效率上更好的变体是
e ω ^ = ( cos ⁡ θ ) I + sin ⁡ θ θ ω ^ + 1 − cos ⁡ θ θ 2 ω ω T (6) e^{\hat \omega} = (\cos \theta)I + \frac{\sin \theta}{\theta} \hat \omega + \frac{1-\cos \theta}{\theta^2} \omega \omega^T \tag{6} eω^=(cosθ)I+θsinθω^+θ21cosθωωT(6)

5.2 Diagonalized Form

因为3D旋转 R R R保持轴 ω \omega ω不变,因此 R R R可以被对角化为
R = C ( e − i θ 0 0 0 e i θ 0 0 0 1 ) C − 1 R = C \begin{pmatrix} e^{-i\theta} & 0 & 0 \\ 0 & e^{i\theta} & 0 \\ 0 & 0 & 1 \end{pmatrix}C^{-1} R=Ceiθ000eiθ0001C1
其中 C = ( c 1 c 2 ω / θ ) C=(c_1 \enspace c_2 \enspace \omega/\theta) C=(c1c2ω/θ) c 1 , c 2 c_1 , c_2 c1,c2是complex 特征向量,对应绕着 ω \omega ω的2D旋转。这也意味着,通过(2)有
ω ^ = C ( − i θ 0 0 0 i θ 0 0 0 0 ) C − 1 \hat \omega = C \begin{pmatrix} -i \theta & 0 & 0 \\ 0 & i \theta & 0 \\ 0 & 0 & 0 \end{pmatrix} C^{-1} ω^=Ciθ000iθ0000C1
在该情况下, C C C有 complex 列, 而且我们还有
ω ^ = B ( 0 − θ 0 θ 0 0 0 0 0 ) B T (7) \hat \omega = B \begin{pmatrix} 0 & - \theta & 0 \\ \theta & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix} B^T \tag{7} ω^=B0θ0θ00000BT(7)
其中 B = ( b 1 b 2 ω / θ ) B=(b_1 \enspace b_2 \enspace \omega/\theta) B=(b1b2ω/θ), b 1 , b 2 b_1, b_2 b1,b2是通过源点且与 ω \omega ω正交的一组二维平面的基。很明显从3.2节,我们有
c 1 = B ( 1 i 0 ) , c 2 = B ( i 1 0 ) c_1 = B \begin{pmatrix} 1 \\ i \\ 0 \end{pmatrix},c_2=B \begin{pmatrix} i \\ 1 \\ 0 \end{pmatrix} c1=B1i0,c2=Bi10
当我们求幂(7)时,我们得到绕着 ω / θ \omega / \theta ω/θ轴,大小为 θ \theta θ的2D旋转:
R = B ( cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ c o s θ 0 0 0 1 ) B T R = B \begin{pmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & cos \theta & 0 \\ 0 & 0 & 1 \end{pmatrix} B^T R=Bcosθsinθ0sinθcosθ0001BT
接下来的 R R R使用前面的Rodrigues公式并扩展以上,我们有
R = ( cos ⁡ θ ) ( b 1 b 1 T + b 2 b 2 T ) + ( sin ⁡ θ ) ( b 2 b 1 T − b 1 b 2 T ) + ω ω T / θ 2 R = (\cos \theta) (b_1b_1^T + b_2b_2^T) + (\sin \theta)(b_2b_1^T -b_1b_2^T ) + \omega \omega^T / \theta^2 R=(cosθ)(b1b1T+b2b2T)+(sinθ)(b2b1Tb1b2T)+ωωT/θ2
因为 B B B是旋转矩阵,我们有 B B T = b 1 b 1 T + b 2 b 2 T + ω ω T / θ 2 = I BB^T = b_1b_1^T + b_2b_2^T + \omega \omega^T/\theta^2 = I BBT=b1b1T+b2b2T+ωωT/θ2=I,使用(7)很容易得到 b 2 b 1 T − b 1 b 2 T = ω ^ / θ b_2b_1^T-b_1b_2^T = \hat \omega / \theta b2b1Tb1b2T=ω^/θ,因此
R = ( cos ⁡ θ ) ( I − ω ω T / θ 2 ) + ( sin ⁡ θ ) ( ω ^ / θ ) + ω ω T / θ 2 R = (\cos \theta)(I - \omega \omega^T/ \theta^2) + (\sin \theta)(\hat \omega/\theta) + \omega\omega^T/\theta^2 R=(cosθ)(IωωT/θ2)+(sinθ)(ω^/θ)+ωωT/θ2
它与(6)等价。

5.3 The Adjoint Map

对于旋转矩阵 R R R,我们可以证明(见附录 性质9)下面的恒等式:
R [ ω ] × R T = [ R ω ] × (8) R[\omega]_\times R^T = [R \omega]_\times \tag{8} R[ω]×RT=[Rω]×(8)
因此,给定性质(8) s o ( 3 ) \mathfrak{so(3)} so(3)的伴随映射可简化为:
A d R [ ω ] × = R [ ω ] × R T = [ R ω ] × Ad_R [\omega]_\times = R[\omega]_\times R^T = [R \omega]_\times AdR[ω]×=R[ω]×RT=[Rω]×
而且将轴 ω \omega ω旋转到 R ω R \omega Rω,就可以用指数坐标表示。
举个例子,在 R R R系中的一个点 p p p应用轴角旋转 ω \omega ω,我们可以:

  1. 首先将 p p p变换到世界坐标系(可参见2.5节),应用 ω \omega ω(即在世界坐标系中应用),然后旋转回来:
    q = R e [ ω ] × R T q = R e^{[\omega]_\times}R^T q=Re[ω]×RT
  2. 即应用变换后的轴角变换 A d R [ ω ] × = [ R ω ] × Ad_R[\omega]_\times = [R \omega]_\times AdR[ω]×=[Rω]×:
    q = e [ R ω ] × p q = e^{[R \omega]_\times}p q=e[Rω]×p

5.4 Actions

对于 S O ( 3 ) SO(3) SO(3),向量空间是 R 3 \reals^3 R3,群操作应用到一个旋转点
q = R p q = R p q=Rp
我们现在想知道通过参数化增量 ω \omega ω会发生什么:
q ( ω ) = R e [ ω ] × p q(\omega) = Re^{[\omega]_\times}p q(ω)=Re[ω]×p
因此导数为:
∂ q ( ω ) ∂ ω = R ∂ ∂ ω ( e [ ω ] × p ) = R ∂ ∂ ω ( [ ω ] × p ) = R [ − p ] × \frac{\partial q(\omega)}{\partial \omega} = R \frac{\partial}{\partial \omega}(e^{[\omega]_\times}p) = R \frac{\partial}{\partial \omega}([\omega]_\times p) = R[-p]_\times ωq(ω)=Rω(e[ω]×p)=Rω([ω]×p)=R[p]×
为得到最后一个等式,有:
[ ω ] × p = ω × p = − p × ω = [ − p ] × ω [\omega]_\times p = \omega \times p = -p \times \omega= [-p]_\times \omega [ω]×p=ω×p=p×ω=[p]×ω

6 3D Rigid Transformations

李群 S E ( 3 ) SE(3) SE(3) 4 × 4 4 \times 4 4×4可逆矩阵的一般线性群的子群,其形式为:
T ≜ [ R t 0 1 ] T \triangleq \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} T[R0t1]
其中 R ∈ S O ( 3 ) R \in SO(3) RSO(3)是旋转矩阵, t ∈ R 3 t \in \reals^3 tR3是平移向量。
也可以写成下面按序匹配的方式:
( R 1 , t 1 ) ( R 2 , t 2 ) = ( R 1 R 2 , R 1 t 2 + t 1 ) (R_1, t_1)(R_2, t_2) = (R_1R_2, R_1t_2 + t_1) (R1,t1)(R2,t2)=(R1R2,R1t2+t1)
它的李代数 s e ( 3 ) \mathfrak{se(3)} se(3)是 参数化 4 × 4 4 \times 4 4×4 twist ξ ^ \hat \xi ξ^向量空间, ξ ^ \hat \xi ξ^的twist 坐标是 ξ ∈ R 6 \xi \in \reals^6 ξR6, 有映射
ξ ≜ [ ω v ] → ξ ^ ≜ [ [ ω ] × v 0 0 ] \xi \triangleq {\omega \brack v} \to \hat \xi \triangleq \begin{bmatrix} [\omega]_\times & v \\ 0 & 0 \end{bmatrix} ξ[vω]ξ^[[ω]×0v0]
注意我们遵循 Frank Park 惯例,前三项表示旋转,后三项表平移。因此,对于该参数化, S E ( 3 ) SE(3) SE(3)的生成器是
G 1 = [ 0 0 0 0 0 0 − 1 0 0 1 0 0 0 0 0 0 ] , G 2 = [ 0 0 1 0 0 0 0 0 − 1 0 0 0 0 0 0 0 ] G 3 = [ 0 − 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ] G 4 = [ 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ] , G 5 = [ 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ] , G 6 = [ 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ] G^1 = \begin{bmatrix} 0 & 0 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{bmatrix}, G^2 = \begin{bmatrix} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ -1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{bmatrix} G^3= \begin{bmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{bmatrix} \\ G^4= \begin{bmatrix} 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{bmatrix}, G^5 = \begin{bmatrix} 0 & 0 & 0 & 0 \\ 0 & 0 & 0& 1\\ 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 \end{bmatrix}, G^6= \begin{bmatrix} 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \end{bmatrix} G1=0000001001000000,G2=0010000010000000G3=0100100000000000G4=0000000000001000,G5=0000000000000100,G6=0000000000000010
应用指数映射到 twist ξ \xi ξ得到一个在 S E ( 3 ) 中 的 SE(3)中的 SE(3)screw motion:
T = e x p   ξ ^ T = \mathrm{exp} \, \hat \xi T=expξ^
指数映射的闭合解2为:
e x p ( [ ω v ] ^ t ) = [ e [ ω ] × t ( I − e [ ω ] × t ) ( ω × v ) + ω ω T v t 0 1 ] \mathrm{exp} \Big(\widehat {\omega \brack v} t\Big) = \begin{bmatrix} e^{[\omega]_\times t} & (I - e^{[\omega]_\times t})(\omega \times v) + \omega \omega^T vt \\ 0 & 1 \end{bmatrix} exp([vω] t)=[e[ω]×t0(Ie[ω]×t)(ω×v)+ωωTvt1]

6.1 The Adjoint Map

伴随
A d T ξ ^ = T ξ T − 1 = [ R t 0 1 ] [ [ ω ] × v 0 0 ] [ R T − R T t 0 1 ] = [ [ R ω ] × − [ R ω ] × t + R v 0 0 ] = [ [ R ω ] × t × R ω + R v 0 0 ] \begin{aligned} Ad_T \hat \xi &= T \xi T^{-1} \\ &=\begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} [\omega]_\times & v \\ 0 & 0 \end{bmatrix} \begin{bmatrix} R^T & - R^Tt \\ 0 & 1 \end{bmatrix} \\ &=\begin{bmatrix} [R\omega]_\times & -[R \omega]_\times t + Rv \\ 0 & 0 \end{bmatrix} \\ &= \begin{bmatrix} [R\omega]_\times & t \times R \omega + Rv \\ 0 & 0 \end{bmatrix} \end{aligned} AdTξ^=TξT1=[R0t1][[ω]×0v0][RT0RTt1]=[[Rω]×0[Rω]×t+Rv0]=[[Rω]×0t×Rω+Rv0]
从上面我们可以用twist 坐标表示伴随映射2:
[ ω ′ v ′ ] = [ R 0 [ t ] × R R ] [ ω v ] {\omega^{\prime} \brack v^{\prime}}= \begin{bmatrix} R & 0 \\ [t]_\times R & R \end{bmatrix}{\omega \brack v} [vω]=[R[t]×R0R][vω]

6.2 Actions

S E ( 3 ) SE(3) SE(3)在3D点上的作用是通过使用齐次坐标将点嵌入 R 4 \reals^4 R4中来完成
q ^ = [ q 1 ] = [ R p + t 1 ] = [ R t 0 1 ] [ p 1 ] = T p ^ \hat q = {q \brack 1} = { Rp + t \brack 1} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix}{p \brack 1} = T \hat p q^=[1q]=[1Rp+t]=[R0t1][1p]=Tp^
现在我们想知道通过 ξ \xi ξ参数化增量pose会发生什么:
q ^ ( ξ ) = T e ξ ^ p ^ \hat q(\xi) = T e^{\hat \xi} \hat p q^(ξ)=Teξ^p^
因此导数是
q ^ ( ξ ) ∂ ξ = T ∂ ∂ ξ ( ξ ^ p ^ ) \frac{\hat q(\xi)}{\partial \xi} = T \frac{\partial }{\partial \xi}(\hat \xi \hat p) ξq^(ξ)=Tξ(ξ^p^)
其中 ξ ^ p ^ \hat \xi \hat p ξ^p^对应 R 4 \reals^4 R4中的速度(在局部坐标系T):
ξ ^ p ^ = [ [ ω ] × v 0 0 ] [ p 1 ] = [ ω × p + v 0 ] \hat \xi \hat p = \begin{bmatrix} [\omega]_\times & v \\ 0 & 0 \end{bmatrix}{p \brack 1} = {\omega \times p + v\brack 0} ξ^p^=[[ω]×0v0][1p]=[0ω×p+v]
请注意,速度与投影几何中无穷大的点如何相似:它们对应于指示变化方向和大小的自由矢量。通过取最上面的三行,我们可以把它写成 R 3 \reals^3 R3中的速度,因为 H p H_p Hp是直接作用在指数坐标 ξ \xi ξ上的 3 × 6 3 \times 6 3×6矩阵:
ω × p + v = − p × ω + v = [ − [ p ] × I 3 ] [ ω v ] \omega \times p + v = -p \times \omega + v = \Big[ -[p]_\times \enspace I_3\Big] {\omega \brack v} ω×p+v=p×ω+v=[[p]×I3][vω]
得到导数:
∂ q ^ ( ξ ) ∂ ξ = T ∂ ∂ ξ ( ξ ^ p ^ ) = T [ − [ p ] × I 3 0 0 ] \frac{\partial \hat q(\xi)}{\partial \xi} = T \frac{\partial}{\partial \xi}(\hat \xi \hat p)=T \begin{bmatrix} -[p]_\times & I_3 \\ 0 & 0 \end{bmatrix} ξq^(ξ)=Tξ(ξ^p^)=T[[p]×0I30]
逆操作 T − 1 p T^{-1}p T1p
q ^ = [ q 1 ] = [ R T ( p − t ) 1 ] = [ R T − R T t 0 1 ] [ p 1 ] = T − 1 p ^ \hat q = {q \brack 1} = {R^T(p-t) \brack 1} = \begin{bmatrix} R^T & -R^Tt \\ 0 & 1 \end{bmatrix} {p \brack 1} = T^{-1} \hat p q^=[1q]=[1RT(pt)]=[RT0RTt1][1p]=T1p^

7. 3D Similarity Transformations

3D相似变换群 S i m ( 3 ) Sim(3) Sim(3)是如下形式的 4 × 4 4 \times 4 4×4可逆矩阵集合
T ≜ [ R t 0 s − 1 ] T \triangleq \begin{bmatrix} R & t \\ 0 & s^{-1} \end{bmatrix} T[R0ts1]
其中 s s s是标量,有各种不同的李代数生成器表示,但我们使用
G 1 = ( 0 0 0 0 0 0 − 1 0 0 1 0 0 0 0 0 0 ) , G 2 = ( 0 0 1 0 0 0 0 0 − 1 0 0 0 0 0 0 0 ) , G 3 = ( 0 − 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ) , G 4 = ( 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ) , G 5 = ( 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ) , G 6 = ( 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ) , G 7 = ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 − 1 ) G^1 = \begin{pmatrix} 0 & 0 & 0& 0 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{pmatrix}, G^2 = \begin{pmatrix} 0 & 0 & 1& 0 \\ 0 & 0 & 0 & 0 \\ -1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{pmatrix}, G^3 = \begin{pmatrix} 0 & -1 & 0& 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{pmatrix} ,\\ G^4 = \begin{pmatrix} 0 & 0 & 0& 1 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{pmatrix}, G^5 = \begin{pmatrix} 0 & 0 & 0& 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{pmatrix}, G^6 = \begin{pmatrix} 0 & 0 & 0& 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \end{pmatrix}, \\ G^7 = \begin{pmatrix} 0 & 0 & 0& 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & -1 \end{pmatrix} G1=0000001001000000,G2=0010000010000000,G3=0100100000000000,G4=0000000000001000,G5=0000000000000100,G6=0000000000000010,G7=0000000000000001

7.1 Actions

S E ( 3 ) SE(3) SE(3)在3D点上的作用是通过使用齐次坐标将点嵌入 R 4 \reals^4 R4中来完成
q ^ = [ q s − 1 ] = [ R p + t s − 1 ] = [ R t 0 s − 1 ] [ p 1 ] = T p ^ \hat q = {q \brack s^{-1}} = {Rp+t \brack s^{-1}} = \begin{bmatrix} R & t \\ 0 & s^{-1} \end{bmatrix} {p \brack 1} = T \hat p q^=[s1q]=[s1Rp+t]=[R0ts1][1p]=Tp^
相对于 T T T ξ \xi ξ的导数 D 1 f ( ξ ) D_1f(\xi) D1f(ξ) T H ( p ) TH(p) TH(p), 其中
H ( p ) = G j k i p j = [ 0 z − y 1 0 0 0 − z 0 x 0 1 0 0 y − x 0 0 0 0 0 0 0 0 0 0 0 − 1 ] H(p) = G^i_{jk}p^j = \begin{bmatrix} 0 & z & -y & 1 & 0 & 0 & 0 \\ -z & 0 & x & 0 & 1 & 0 & 0 \\ y & -x & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & -1 \end{bmatrix} H(p)=Gjkipj=0zy0z0x0yx001000010000000001
换言之
D 1 f ( ξ ) = [ R t 0 s − 1 ] [ − [ p ] × I 0 0 0 − 1 ] = [ − R [ p ] × R − t 0 0 − s − 1 ] D_1f(\xi) = \begin{bmatrix} R & t \\ 0 & s^{-1} \end{bmatrix} \begin{bmatrix} -[p]_\times & I & 0 \\ 0 & 0& -1 \end{bmatrix} = \begin{bmatrix} -R[p]_\times & R & -t \\ 0 & 0& -s^{-1} \end{bmatrix} D1f(ξ)=[R0ts1][[p]×0I001]=[R[p]×0R0ts1]
这是对齐次坐标的作用的导数。转变成非齐次坐标是
[ q a ] → q / a {q \brack a} \to q/a [aq]q/a
它的导数为
[ a − 1 I 3 − q a − 2 ] \Big[ a^{-1}I_3 \enspace -qa^{-2}\Big] [a1I3qa2]
对于 a = s − 1 a = s^{-1} a=s1,我们有
D 1 f ( ξ ) = [ s I 3 − q s 2 ] [ − R [ p ] × R − t 0 0 − s − 1 ] = [ − s R [ p ] × s R − s t + q s ] = [ − s R [ p ] × s R s R p ] D_1f(\xi) = \Big[ sI_3 \enspace -qs^2 \Big] \begin{bmatrix} -R[p]_\times & R & -t \\ 0 & 0& -s^{-1} \end{bmatrix}= \Big[ -sR[p]_\times \enspace sR \enspace -st + qs \Big] = \Big[ -sR[p]_\times \enspace sR \enspace sRp\Big] D1f(ξ)=[sI3qs2][R[p]×0R0ts1]=[sR[p]×sRst+qs]=[sR[p]×sRsRp]

8. 2D Affine Transformations

李群 A f f ( 2 ) Aff(2) Aff(2) 3 × 3 3 \times 3 3×3可逆矩阵的一般线性群的子群,它映射无穷远线到本身(无穷远线),即保持并行性。仿射变换 A A A可以写作3
[ m 11 m 12 t 1 m 21 m 22 t 2 0 0 k ] \begin{bmatrix} m_{11} & m_{12} & t_1 \\ m_{21} & m_{22} & t_2 \\ 0 & 0 & k \end{bmatrix} m11m210m12m220t1t2k
其中 M ∈ G L ( 2 ) , t ∈ R 2 M \in GL(2), t \in \reals^2 MGL(2),tR2,k是使得 d e t ( A ) = 1 det(A)=1 det(A)=1的标量。正如 S E ( 2 ) SE(2) SE(2)是半直积一样, A f f ( 2 ) = R 2 ⋊ G L ( 2 ) Aff(2) = \reals^2 \rtimes GL(2) Aff(2)=R2GL(2) 也是半直积。特别的,任何仿射变换 A A A可以写为
A = [ 0 t 0 1 ] [ M 0 0 k ] A = \begin{bmatrix} 0 & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} M & 0 \\ 0 & k \end{bmatrix} A=[00t1][M00k]
它们的组合为
A 1 A 2 = [ M 1 t 1 0 k 1 ] [ M 2 t 2 0 k 2 ] = [ M 1 M 2 M 2 t 2 + k 2 t 1 0 k 1 k 2 ] A_1A_2 = \begin{bmatrix} M_1 & t_1 \\ 0 & k_1 \end{bmatrix} \begin{bmatrix} M_2 & t_2 \\ 0 & k_2 \end{bmatrix}= \begin{bmatrix} M_1M_2 & M_2t_2 + k_2 t_1 \\ 0 & k_1k_2 \end{bmatrix} A1A2=[M10t1k1][M20t2k2]=[M1M20M2t2+k2t1k1k2]
由此可以得出, S O ( 2 ) SO(2) SO(2) S E ( 2 ) SE(2) SE(2)群都是子群,其中 S O ( 2 ) ⊂ S E ( 2 ) ⊂ A f f ( 2 ) SO(2) \subset SE(2) \subset Aff(2) SO(2)SE(2)Aff(2)。通过仔细选择生成器,我们在关联的李代数之间保持了这种层次,特别的, s e ( 2 ) \mathfrak{se(2)} se(2)
G 1 = [ 0 0 1 0 0 0 0 0 0 ] , G 2 = [ 0 0 0 0 0 1 0 0 0 ] , G 3 = [ 0 − 1 0 1 0 0 0 0 0 ] G^1 = \begin{bmatrix} 0 & 0 & 1 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix}, G^2 = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 0 & 0 \end{bmatrix}, G^3 = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix} G1=000000100,G2=000000010,G3=010100000
使用下面的三个生成器可以被拓展到李代数 a f f ( 2 ) \mathfrak{aff(2)} aff(2)
G 4 = [ 0 1 0 1 0 0 0 0 0 ] , G 5 = [ 1 0 0 0 − 1 0 0 0 0 ] , G 6 = [ 0 0 0 0 − 1 0 0 0 1 ] G^4 = \begin{bmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0& 0 \end{bmatrix}, G^5= \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 0 \end{bmatrix}, G^6= \begin{bmatrix} 0 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix} G4=010100000G5=100010000G6=000010001
因此,李代数 a f f ( 2 ) \mathfrak{aff(2)} aff(2)是通过6个参数 a ∈ R 6 a \in \reals^6 aR6参数化的 3 × 3 3 \times 3 3×3增量仿射变换的向量空间,该映射
a → a ^ ≜ [ a 5 a 4 − a 3 a 1 a 4 + a 3 − a 5 − a 6 a 2 0 0 a 6 ] a \to \hat a \triangleq \begin{bmatrix} a_5 & a_4 - a_3 & a_1 \\ a_4 + a_3 & -a_5-a_6 & a_2 \\ 0 & 0 & a_6 \end{bmatrix} aa^a5a4+a30a4a3a5a60a1a2a6
注意 G 5 , G 6 G^5, G^6 G5,G6改变了 x , y x, y x,y的尺度(缩放),但行列式(determinant)没有变化:
e x G 5 = e x p [ x 0 0 0 − x 0 0 0 0 ] = [ e x 0 0 0 e − x 0 0 0 1 ] , e x G 6 = e x p [ 0 0 0 0 − x 0 0 0 x ] = [ 1 0 0 0 e − x 0 0 0 e x ] e^{xG_5} = \mathrm{exp} \begin{bmatrix} x & 0 & 0 \\ 0 & -x & 0 \\ 0 & 0 & 0 \end{bmatrix}= \begin{bmatrix} e^x & 0 & 0 \\ 0 & e^{-x} & 0 \\ 0 & 0 & 1 \end{bmatrix}, \\ e^{xG_6} = \mathrm{exp} \begin{bmatrix} 0 & 0 & 0 \\ 0 & -x & 0 \\ 0 & 0 & x \end{bmatrix}= \begin{bmatrix} 1& 0 & 0 \\ 0 & e^{-x} & 0 \\ 0 & 0 & e^x \end{bmatrix} exG5=expx000x0000=ex000ex0001,exG6=exp0000x000x=1000ex000ex
通过选择使 x x x y y y的缩放比例更直接对应可能更好
G 5 = [ 1 0 0 0 0 0 0 0 − 1 ] , G 6 = [ 0 0 0 0 1 0 0 0 − 1 ] G^5= \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & -1 \end{bmatrix}, G^6= \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & -1 \end{bmatrix} G5=100000001G6=000010001
因此
e x G 5 = e x p [ x 0 0 0 0 0 0 0 − x ] = [ e x 0 0 0 1 0 0 0 1 / e x ] , e x G 6 = e x p [ 0 0 0 0 x 0 0 0 − x ] = [ 1 0 0 0 e x 0 0 0 1 / e x ] e^{xG_5} = \mathrm{exp} \begin{bmatrix} x & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & -x \end{bmatrix}= \begin{bmatrix} e^x & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1/e^x \end{bmatrix}, \\ e^{xG_6} = \mathrm{exp} \begin{bmatrix} 0 & 0 & 0 \\ 0 & x & 0 \\ 0 & 0 & -x \end{bmatrix}= \begin{bmatrix} 1& 0 & 0 \\ 0 & e^{x} & 0 \\ 0 & 0 & 1/e^x \end{bmatrix} exG5=expx0000000x=ex00010001/ex,exG6=exp0000x000x=1000ex0001/ex

9. 2D Homographies

当以2D投影空间 p 3 \mathscr{p}^3 p3表示对图像的操作时,3D旋转是2D单应性的一种特殊情况。 现在,根据4 3中的论述粗略地处理这些内容。

9.1 Basics

李群 S L ( 3 ) SL(3) SL(3)是一般线性群 G L ( 3 ) GL(3) GL(3)的子群,它是行列式为1的 3 × 3 3 \times 3 3×3的可逆矩阵。单应性生成了2D投影空间的变换, 且 A f f ( 2 ) ⊂ S L ( 3 ) Aff(2) \subset SL(3) Aff(2)SL(3)
通过增加两个生成器可以扩展 a f f ( 2 ) \mathfrak{aff(2)} aff(2)到李代数 s l ( 3 ) \mathfrak{sl(3)} sl(3)
G 7 = [ 0 0 0 0 0 0 1 0 0 ] , G 8 = [ 0 0 0 0 0 0 0 1 0 ] G^7 = \begin{bmatrix} 0 & 0& 0 \\ 0 & 0 & 0 \\ 1 & 0 & 0 \end{bmatrix}, G^8 = \begin{bmatrix} 0 & 0& 0 \\ 0 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix} G7=001000000,G8=000001000
,8个参数参数化的增量单应矩阵 h ^ \hat h h^ 3 × 3 3 \times 3 3×3的向量空间,该映射为
h → h ^ ≜ [ h 5 h 4 − h 3 h 1 h 4 + h 3 − h 5 − h 6 h 2 h 7 h 8 h 6 ] h \to \hat h \triangleq \begin{bmatrix} h_5 & h_4 - h_3 & h_1 \\ h_4 + h_3 & -h_5-h_6 & h_2 \\ h_7 & h_8 & h_6 \end{bmatrix} hh^h5h4+h3h7h4h3h5h6h8h1h2h6

9.2 Tensor Notation

  • 二维投影空间A和B之间的单应性可以用张量记号 H A B H^B_A HAB表示
  • 然后应用单应性是张量连接 x B = H A B x A x^B = H^B_A x^A xB=HABxA,将A中的点映射到B中的点。

Appendix: Proof of Proerty 9

R [ ω ] × R T = R [ ω ] × [ a 1 a 2 a 3 ] = R [ ω × a 1 ω × a 2 ω × a 3 ] = [ a 1 ( ω × a 1 ) a 1 ( ω × a 2 ) a 1 ( ω × a 3 ) a 2 ( ω × a 1 ) a 2 ( ω × a 2 ) a 2 ( ω × a 3 ) a 3 ( ω × a 1 ) a 3 ( ω × a 2 ) a 3 ( ω × a 3 ) ] = [ ω ( a 1 × a 1 ) ω ( a 2 × a 1 ) ω ( a 3 × a 1 ) ω ( a 1 × a 2 ) ω ( a 2 × a 2 ) ω ( a 3 × a 2 ) ω ( a 1 × a 3 ) ω ( a 2 × a 3 ) ω ( a 3 × a 3 ) ] = [ 0 − ω a 3 ω a 2 ω a 3 0 − ω a 1 − ω a 2 ω a 1 0 ] = [ R ω ] × \begin{aligned} R[\omega]_\times R^T & = R[\omega]_\times [a_1 \enspace a_2 \enspace a_3] \\ &= R[\omega \times a_1 \enspace \omega \times a_2 \enspace \omega \times a_3] \\ &= \begin{bmatrix} a_1(\omega \times a_1 ) & a_1(\omega \times a_2) & a_1(\omega \times a_3) \\ a_2(\omega \times a_1 ) & a_2(\omega \times a_2) & a_2(\omega \times a_3) \\ a_3(\omega \times a_1 ) & a_3(\omega \times a_2) & a_3(\omega \times a_3) \end{bmatrix} \\ &= \begin{bmatrix} \omega(a_1 \times a_1 ) & \omega(a_2 \times a_1) & \omega (a_3 \times a_1) \\ \omega(a_1 \times a_2 ) & \omega(a_2 \times a_2) & \omega (a_3 \times a_2) \\ \omega(a_1 \times a_3 ) & \omega(a_2 \times a_3) & \omega (a_3 \times a_3) \end{bmatrix} \\ &= \begin{bmatrix} 0 & - \omega a_3 & \omega a_2 \\ \omega a_3 & 0 & -\omega a_1 \\ -\omega a_2 & \omega a_1 & 0 \end{bmatrix} \\ &=[R \omega]_{\times} \end{aligned} R[ω]×RT=R[ω]×[a1a2a3]=R[ω×a1ω×a2ω×a3]=a1(ω×a1)a2(ω×a1)a3(ω×a1)a1(ω×a2)a2(ω×a2)a3(ω×a2)a1(ω×a3)a2(ω×a3)a3(ω×a3)=ω(a1×a1)ω(a1×a2)ω(a1×a3)ω(a2×a1)ω(a2×a2)ω(a2×a3)ω(a3×a1)ω(a3×a2)ω(a3×a3)=0ωa3ωa2ωa30ωa1ωa2ωa10=[Rω]×
其中 a 1 , a 2 , a 3 a_1, a_2, a_3 a1,a2,a3 R R R的行向量,上面我们使用了旋转矩阵的正交性和triple 积规则:
a ( b × c ) = b ( c × a ) = c ( a × b ) a(b \times c) = b(c \times a) = c(a \times b) a(b×c)=b(c×a)=c(a×b)
类似,在不需要证明:
R ( a × b ) = R a × R b R(a \times b) = Ra \times Rb R(a×b)=Ra×Rb

Appendix:Alternative Generators for s l ( 3 ) \mathfrak{sl(3)} sl(3)

s l ( 3 ) \mathfrak{sl(3)} sl(3)的生成器:
G 1 = [ 0 0 1 0 0 0 0 0 0 ] , G 2 = [ 0 0 0 0 0 1 0 0 0 ] , G 3 = [ 0 1 0 0 0 0 0 0 0 ] , G 4 = [ 0 0 0 1 0 0 0 0 0 ] , G 5 = [ 1 0 0 0 − 1 0 0 0 0 ] , G 6 = [ 0 0 0 0 − 1 0 0 0 1 ] , G 7 = [ 0 0 0 0 0 0 1 0 0 ] , G 8 = [ 0 0 0 0 0 0 0 1 0 ] G^1 = \begin{bmatrix} 0 & 0 & 1 \\ 0 & 0 & 0 \\ 0 & 0& 0 \end{bmatrix}, G^2 = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 0& 0 \end{bmatrix} ,G^3 = \begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & 0 \\ 0 & 0& 0 \end{bmatrix}, \\ G^4 = \begin{bmatrix} 0 & 0 & 0 \\ 1 & 0 & 0 \\ 0 & 0& 0 \end{bmatrix}, G^5 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0& 0 \end{bmatrix}, G^6 = \begin{bmatrix} 0 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0& 1 \end{bmatrix}, \\ G^7 = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & 0 \\ 1 & 0& 0 \end{bmatrix}, G^8 = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix} G1=000000100,G2=000000010,G3=000100000,G4=010000000,G5=100010000,G6=000010001,G7=001000000,G8=000001000
我们选择不同线性组合作为基。


  1. B.C. Hall. Lie Groups, Lie Algebras, and Representations: An Elementary Introduction. Springer, 2000. ↩︎

  2. R.M. Murray, Z. Li, and S. Sastry. A Mathematical Introduction to Robotic Manipulation. CRC Press, 1994. ↩︎ ↩︎ ↩︎ ↩︎

  3. C. Mei, S. Benhimane, E. Malis, and P. Rives. Efficient homography-based tracking and 3-D
    reconstruction for single-viewpoint sensors. IEEE Trans. Robotics, 24(6):1352–1364, Dec.2008. ↩︎ ↩︎

  4. C. Mei, S. Benhimane, E. Malis, and P. Rives. Homography-based tracking for central cata-
    dioptric cameras. In IEEE/RSJ Intl. Conf. on Intelligent Robots and Systems (IROS), October 2006. ↩︎

李群的一本书,是扫描版,书的质量不错。 This book is intended for a one year graduate course on Lie groups and Lie algebras. The author proceeds beyond the representation theory of compact Lie groups (which is the basis of many texts)and provides a carefully chosen range of material to give the student the bigger picture. For compact Lie groups, the Peter-Weyl theorem, conjugacy of maximal tori (two proofs), Weyl character formula and more are covered. The book continues with the study of complex analytic groups, then general noncompact Lie groups, including the Coxeter presentation of the Weyl group, the Iwasawa and Bruhat decompositions, Cartan decomposition, symmetric spaces, Cayley transforms, relative root systems, Satake diagrams, extended Dynkin diagrams and a survey of the ways Lie groups may be embedded in one another. The book culminates in a "topics" section giving depth to the student's understanding of representation theory, taking the Frobenius-Schur duality between the representation theory of the symmetric group and the unitary groups as a unifying theme, with many applications in diverse areas such as random matrix theory, minors of Toeplitz matrices, symmetric algebra decompositions, Gelfand pairs, Hecke algebras, representations of finite general linear groups and the cohomology of Grassmannians and flag varieties.   Daniel Bump is Professor of Mathematics at Stanford University. His research is in automorphic forms, representation theory and number theory. He is a co-author of GNU Go, a computer program that plays the game of Go. His previous books include Automorphic Forms and Representations (Cambridge University Press 1997)and Algebraic Geometry (World Scientific 1998).
### 初学者Django学习资源 对于希望入门Django框架的学习者来说,选择合适的教程和资源至关重要。初次接触Django时,建议先了解Python的基础语法以及Web开发的基本概念。 #### 资源推荐 1. **官方文档** 官方文档提供了详尽的指南,涵盖了从安装到高级特性的各个方面[^1]。虽然可能对完全的新手有些难度,但对于有编程基础的人来说是非常有价值的参考资料。 2. **视频课程** Reindert-Jan Ekker提供的在线课程是一个不错的选择。该课程不仅讲解了如何创建基本的应用程序,还特别强调了虚拟环境的重要性——这是任何Python项目启动前的关键步骤之一[^2]。此课程大约持续90分钟左右,非常适合想要快速上手的人群。 3. **书籍** 对于喜欢通过阅读来学习的朋友,《轻量级数据库驱动网络应用》一书深入浅出地介绍了Django的核心功能及其最佳实践方法;而《Django设计模式与最佳实践》则更侧重于架构层面的知识传授。 4. **动手练习平台** 实践是掌握技能的最佳途径。Codecademy上的互动式Django路径允许用户在一个安全可控环境中编写真实代码片段并即时获得反馈。 5. **社区支持** 加入活跃的技术交流群体可以获得及时的帮助和支持。Stack Overflow 和 Reddit 的 r/learnprogramming 子版块都是很好的去处,在那里可以找到许多志同道合的同学一起探讨问题。 ```python # 创建一个新的Django项目示例 django-admin startproject mysite cd mysite/ python manage.py migrate python manage.py runserver ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值