主頁 >  其他 > 三維空間剛體運動4-1:四元數表示變換(超細講解加代碼)

三維空間剛體運動4-1:四元數表示變換(超細講解加代碼)

2020-09-19 12:19:13 其他

三維空間剛體運動4-1:四元數表示變換(超細講解加代碼)

  • 1. 四元數的定義
    • 1.1 為什么使用四元數
    • 1.2 復數與四元數
    • 1.3 四元數的形式
  • 2. 四元數的運算
  • 3. 用四元數表示旋轉
    • 3.1 四元數與旋轉關系
    • 3.2 四元數與3D旋轉幾何證明
      • 3.2.1 w ⊥ w_{\perp} w?的旋轉
      • 3.2.2 w ∥ w_{\parallel} w?的旋轉
      • 3.2.3 w w w的旋轉
  • 4. 四元數到其它旋轉表示的相互轉換
    • 4.1 旋轉向量
    • 4.2 旋轉矩陣
    • 4.3 歐拉角
  • 5. 四元數的其他性質
    • 5.1 旋轉的復合
    • 5.2 雙倍覆寫
    • 5.3 指數形式
  • 6. 實踐
    • 6.1 四元數常規運算
    • 6.2 坐標變換

本篇繼續參照高翔老師《視覺SLAM十四講從理論到實踐》,講解四元數表示變換,博文將原第三講分為四部分來講解:1、旋轉矩陣和變換矩陣;2、旋轉向量與羅德里格斯公式;3、歐拉角與萬向(節)鎖;4-1、四元數表示變換;4-2、四元數差值,本文相對于原文會適當精簡,同時為便于理解,會加入一些注解和補充知識點,本篇為第四部分:四元數表示變換,另外三部分請參照博主的其他博文,
本篇文章,博主猶豫了很久,一是四元數東西較多,怕寫不好;二是已經有些人寫的非常好,基本疑問都解決了,后來者難以超越,博主在附錄會做推薦;三是作取舍真的太難,寫的太多篇幅太長,寫的少又怕涵蓋不全,然而自己挖的坑哭著也要填上,博主會盡量釋疑,做一些修補作業,也只求沒有錯誤紕漏,另外寫的不好的地方還請見諒,也歡迎多提意見,博主會盡量完善,

1. 四元數的定義

1.1 為什么使用四元數

旋轉矩陣用9個量描述3自由度的旋轉,具有冗余性;歐拉角和旋轉向量是緊湊的,但具有奇異性,事實上,我們找不到不帶奇異性的三維向量描述方式,
回憶之前學習過的復數,我們用復數集 C \mathbb{C} C表示復平面上的向量,可以表示為 z = a + b i z=a+bi z=a+bi的形式,其中 a , b ∈ R a,b\in R a,bR而且 i 2 = ? 1 i^{2}=-1 i2=?1,而復數的乘法則表示復平面上的旋轉:例如,乘上復數 i i i相當于逆時針把一個復向量旋轉 9 0 ° 90^{\circ } 90°,類似的,在表達三維空間旋轉時,也有一種類似于復數的代數:四元數(Quaternion),四元數是Hamilton找到的一種擴展的復數,它既是緊湊的,也沒有奇異性,如果說缺點,四元數不夠直觀,其運算稍復雜些,

1.2 復數與四元數

把四元數與復數類比可以幫助你更快地理解四元數,例如,當我們想要將復平面的向量旋轉 θ \theta θ角時,可以給這個復向量乘以 e i θ e^{i\theta} eiθ,這是極坐標表示的復數,它也可以寫成普通的形式,只要用歐拉公式即可: e i θ = c o s θ + s i n θ . e^{i\theta} = cos\theta + sin\theta. eiθ=cosθ+sinθ.
歐拉公式將指數函式的定義域擴大到了復數域,建立和三角函式和指數函式的關系,被譽為“數學中的天橋”,歐拉公式的簡單推導如下, e x e^{x} ex的泰勒展開式為:
e x = 1 + x + 1 2 ! x 2 + 1 3 ! x 3 + ? ? ? e^{x} = 1+x+\frac{1}{2!}x^{2}+\frac{1}{3!}x^{3}+\cdot \cdot \cdot ex=1+x+2!1?x2+3!1?x3+??? x x x替換為 i θ i\theta iθ
e i θ = 1 + i θ + 1 2 ! ( i θ ) 2 + 1 3 ! ( i θ ) 3 + 1 4 ! ( i θ ) 4 + 1 5 ! ( i θ ) 5 + 1 6 ! ( i θ ) 6 + 1 7 ! ( i θ ) 7 + 1 8 ! ( i θ ) 8 + ? ? ? = 1 + i θ ? 1 2 ! θ 2 ? 1 3 ! i θ 3 + 1 4 ! θ 4 + 1 5 ! i θ 5 ? 1 6 ! θ 6 ? 1 7 ! i θ 7 + 1 8 ! θ 8 + ? ? ? = ( 1 ? θ 2 2 ! + θ 4 4 ! ? θ 6 6 ! + θ 8 8 ! ? ? ? ? ) + i ( θ ? θ 3 3 ! + θ 5 5 ! ? θ 7 7 ! + ? ? ? ) = c o s θ + s i n θ . \begin{aligned} e^{i\theta} &= 1+i\theta+\frac{1}{2!}(i\theta)^{2}+\frac{1}{3!}(i\theta)^{3}+\frac{1}{4!}(i\theta)^{4}+\frac{1}{5!}(i\theta)^{5}+\frac{1}{6!}(i\theta)^{6}+\frac{1}{7!}(i\theta)^{7}+\frac{1}{8!}(i\theta)^{8}+\cdot \cdot \cdot \\ &= 1+i\theta-\frac{1}{2!}\theta^{2}-\frac{1}{3!}i\theta^{3}+\frac{1}{4!}\theta^{4}+\frac{1}{5!}i\theta^{5}-\frac{1}{6!}\theta^{6}-\frac{1}{7!}i\theta^{7}+\frac{1}{8!}\theta^{8}+\cdot \cdot \cdot \\ &= (1-\frac{\theta^{2}}{2!}+\frac{\theta^{4}}{4!}-\frac{\theta^{6}}{6!}+\frac{\theta^{8}}{8!}-\cdot \cdot \cdot)+i(\theta-\frac{\theta^{3}}{3!}+\frac{\theta^{5}}{5!}-\frac{\theta^{7}}{7!}+\cdot \cdot \cdot ) \\ &= cos\theta + sin\theta. \end{aligned} eiθ?=1+iθ+2!1?(iθ)2+3!1?(iθ)3+4!1?(iθ)4+5!1?(iθ)5+6!1?(iθ)6+7!1?(iθ)7+8!1?(iθ)8+???=1+iθ?2!1?θ2?3!1?iθ3+4!1?θ4+5!1?iθ5?6!1?θ6?7!1?iθ7+8!1?θ8+???=(1?2!θ2?+4!θ4??6!θ6?+8!θ8?????)+i(θ?3!θ3?+5!θ5??7!θ7?+???)=cosθ+sinθ.? θ = π \theta=\pi θ=π時,帶入歐拉公式得到: e i π = c o s π + i s i n π = ? 1 ? e i π + 1 = 0 e^{i\pi} = cos\pi + isin\pi = -1 \Rightarrow e^{i\pi} + 1 = 0 eiπ=cosπ+isinπ=?1?eiπ+1=0其中 e i π + 1 = 0 e^{i\pi} + 1 = 0 eiπ+1=0就是歐拉恒等式,它被譽為上帝公式,因為 e 、 π 、 i e 、 \pi 、 i eπi、乘法單位元1、加法單位元0,這五個重要的數學元素全部被包含在內,在數學愛好者眼里,仿佛一行詩道盡了數學的美好,歐拉公式的詳細說明可參見《歐拉公式之美》,
歐拉公式的右側正是一個單位長度的復數,所以在二維情況下,旋轉可以有單位復數來描述,類似的,可以看到,三維旋轉可以有單位四元數來描述,

1.3 四元數的形式

四元數的定義和復數非常類似,唯一的區別就是四元數有三個虛部,而復數只有一個,所有的四元數 q ∈ H q \in \mathbb{H} qH H \mathbb{H} H代表四元數的發現者William Rowan Hamilton)都可以寫成如下形式: q = q 0 + q 1 i + q 2 j + q 3 k . \mathbf{q}=q_{0}+q_{1}i+q_{2}j+q_{3}k. q=q0?+q1?i+q2?j+q3?k.其中 i , j , k i,j,k i,j,k為四元數的三個虛部,這三個虛部滿足以下關系式: { i 2 = j 2 = k 2 = ? 1 i j = k , j i = ? k j k = i , k j = ? i k i = j , i k = ? j . \left\{\begin{matrix} i^{2}=j^{2}=k^{2}=-1\\ ij=k,ji=-k\\ jk=i,kj=-i\\ ki=j,ik=-j \end{matrix}\right.. ????????i2=j2=k2=?1ij=k,ji=?kjk=i,kj=?iki=j,ik=?j?.
如果把 i , j , k i,j,k i,j,k看成三個坐標軸,那么它們與自己的乘法和復數一樣,相互之間的乘法和外積一樣,有時,人們也用一個標量和一個向量來表達四元數: q = [ s , v ] T , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] T ∈ R 3 . \mathbf{q}= [s, v]^{T}, s=q_{0} \in \mathbb{R},v=[q_{1},q_{2},q_{3}]^{T} \in \mathbb{R}^{3}. q=[s,v]T,s=q0?R,v=[q1?,q2?,q3?]TR3.這里, s s s稱為四元數的實部,而 v v v稱為它的虛部,如果一個四元數的虛部為0,則稱為實四元數,反之,若實部為0,則稱為虛四元數純四元數
如果 ∥ q ∥ = 1 \left \| q \right \|=1 q=1,那么 q q q單位四元數,可以用單位四元數表示三維空間中任意一個旋轉,不過這種表達方式和復數有著微妙的不同,在復數中,乘以 i i i意味著旋轉 9 0 ° 90^{\circ } 90°,而在四元數中,乘以 i i i對應著旋轉 18 0 ° 180^{\circ } 180°,這樣才能保證$ i j = k ij=k ij=k的性質,而 i 2 = ? 1 i^{2}=-1 i2=?1,意味著繞 i i i軸旋轉 36 0 ° 360^{\circ } 360°后得到一個相反的東西,也就是要旋轉兩周才會和它原先的樣子相等,
下面我們看一下四元數之間的運演算法則,

2. 四元數的運算

四元數和復數一樣,可以進行一系列的運算,常見的有四則運算、共軛、求逆、數乘等,下面分別介紹,
現有兩個四元數 q a , q b q_{a},q_{b} qa?qb?,它們的向量表示為 [ s a , v a ] T [s_{a}, v_{a}]^{T} [sa?,va?]T [ s b , v b ] T [s_{b}, v_{b}]^{T} [sb?,vb?]T,其中 v a = x a i + y a j + z a k , v b = x b i + y b j + z b k v_{a}=x_{a}i+y_{a}j+z_{a}k,v_{b}=x_{b}i+y_{b}j+z_{b}k va?=xa?i+ya?j+za?kvb?=xb?i+yb?j+zb?k,或者原始四元數表示為: q a = s a + x a i + y a j + z a k , q b = s b + x b i + y b j + z b k . q_{a}=s_{a}+x_{a}i+y_{a}j+z_{a}k,q_{b}=s_{b}+x_{b}i+y_{b}j+z_{b}k. qa?=sa?+xa?i+ya?j+za?kqb?=sb?+xb?i+yb?j+zb?k.那么,其運算可表示如下:

  1. 加法和減法 q a ± q b = [ s a ± s b , v a ± v b ] q_{a}\pm q_{b}=[s_{a}\pm s_{b},v_{a}\pm v_{b}] qa?±qb?=[sa?±sb?,va?±vb?]

  2. 乘法
    乘法是把 q a q_{a} qa?的每一項與 q b q_{b} qb?的每一項相乘,最后相加,整理得: q a q b = s a s b ? x a x b ? y a y b ? z a z b + ( s a x b + x a s b + y a z b ? z a y b ) i + ( s a y b ? x a z b + y a s b + z a x b ) j + ( s a z b + x a y b ? y a x b ? z a s b ) k . \begin{aligned} q_{a}q_{b} &=s_{a}s_{b}-x_{a}x_{b}-y_{a}y_{b}-z_{a}z_{b} \\ &+ (s_{a}x_{b}+x_{a}s_{b}+y_{a}z_{b}-z_{a}y_{b})i \\ &+ (s_{a}y_{b}-x_{a}z_{b}+y_{a}s_{b}+z_{a}x_{b})j \\ &+ (s_{a}z_{b}+x_{a}y_{b}-y_{a}x_{b}-z_{a}s_{b})k. \end{aligned} qa?qb??=sa?sb??xa?xb??ya?yb??za?zb?+(sa?xb?+xa?sb?+ya?zb??za?yb?)i+(sa?yb??xa?zb?+ya?sb?+za?xb?)j+(sa?zb?+xa?yb??ya?xb??za?sb?)k.?雖然稍微復雜,但形式上還是整齊有序的,如果寫成向量形式并利用內外積運算,該表達會更加簡潔: q a q b = [ s a s b ? v a T v b , s a v b + s b v a + v a × v b ] q_{a}q_{b}=[s_{a}s_{b}-v_{a}^{T}v_{b},s_{a}v_{b}+s_{b}v_{a}+v_{a}\times v_{b}] qa?qb?=[sa?sb??vaT?vb?,sa?vb?+sb?va?+va?×vb?]這個結果也稱為 G r a B m a n n GraBmann GraBmann積,它是四元數與旋轉聯系起來的關鍵,
    另外,由于最后一項外積的存在,四元數乘法通常是不可交換的,除非 v a v_{a} va? v b v_{b} vb? R \mathbb{R} R中共線,此時外項積為零,

  3. 模長
    四元數的模長定義為: ∥ q a ∥ = s a 2 + x a 2 + y a 2 + z a 2 \left \| q_{a} \right \|=\sqrt{s_{a}^{2}+x_{a}^{2}+y_{a}^{2}+z_{a}^{2}} qa?=sa2?+xa2?+ya2?+za2? ?可以驗證,兩個四元數乘積的模即模的乘積,這使得單位四元數相乘后仍是單位四元數: ∥ q a q b ∥ = ∥ q a ∥ ∥ q b ∥ \left \| q_{a}q_{b} \right \|=\left \| q_{a} \right \|\left \| q_{b} \right \| qa?qb?=qa?qb?

  4. 共軛
    四元數的共軛是把虛部取成相反數: q a ? = s a ? x a i ? y a j ? z a k = [ s a , ? v a ] . q_{a}^{*}=s_{a}-x_{a}i-y_{a}j-z_{a}k=[s_{a}, -v_{a}]. qa??=sa??xa?i?ya?j?za?k=[sa?,?va?].四元數共軛與其本身相乘,會得到一個實四元數,其實部為模長的平方: q ? q = q q ? = [ s 2 + v T v , 0 ] T q^{*}q=qq^{*}=[s^{2}+v^{T}v,0]^{T} q?q=qq?=[s2+vTv,0]T


  5. 一個四元數的逆為: q ? 1 = q ? / ∥ q ∥ q^{-1}=q^{*}/\left \| q \right\| q?1=q?/q按此定義,四元數和自己的逆的乘積為實四元數 1 1 1 q q ? 1 = q ? 1 q = q q ? / ∥ q ∥ 2 = 1 qq^{-1}=q^{-1}q=qq^{*}/\left \| q \right\|^{2}=1 qq?1=q?1q=qq?/q2=1如果 q \mathbf{q} q為單位四元數,其逆和共軛就是同一個量,同時,乘積的逆具有和矩陣相似的性質: ( q a q b ) ? 1 = q b ? 1 q a ? 1 (q_{a}q_{b})^{-1}=q_{b}^{-1}q_{a}^{-1} (qa?qb?)?1=qb?1?qa?1?

  6. 數乘
    又稱標量乘法,四元數可以與數相乘: k q = [ k s , k v ] T k\mathbf{q}=[ks,kv]^{T} kq=[ks,kv]T

3. 用四元數表示旋轉

3.1 四元數與旋轉關系

我們可以用四元數表達對一個點的旋轉,假設有一個空間三維點 p = [ x , y , z ] ∈ R 3 p=[x,y,z] \in \mathbb{R}^{3} p=[x,y,z]R3,以及一個由單位四元數 q q q指定的旋轉,三維點 p p p經過 q q q的旋轉后變為 p ′ p^{'} p,如果使用矩陣描述,那么有 p ′ = R p p^{'}=Rp p=Rp,而如何用四元數描述旋轉呢?
首先,把三維空間點用一個虛四元數來描述: w = [ 0 , x , y , z ] T = [ 0 , v ] T w=[0,x,y,z]^{T}=[0,v]^{T} w=[0,x,y,z]T=[0,v]T相當于把四元數的3個虛部和空間中的3個軸相對應,那么,旋轉后的點 w ′ w^{'} w可表示為這樣的乘積: w ′ = q w q ? 1 w^{'}=qwq^{-1} w=qwq?1這里的乘法均為四元數乘法,結果也是四元數,最后把 w ′ w^{'} w的虛部取出,即得旋轉之后點的坐標,并且可以驗證,計算結果的實部為0,即為虛四元數,
下面從幾何的角度進一步講解四元數與3D旋轉之間的關聯,如果只是簡單應用,不需要了解幾何證明程序,則本小節就足夠了,

3.2 四元數與3D旋轉幾何證明

回憶一下《旋轉向量與羅德里格斯公式》討論的內容:如果我們需要將一個向量 v v v沿著一個用單位向量所定義的旋轉軸 u u u旋轉 θ \theta θ度,那么可以將其拆分為正交于旋轉軸的 v ⊥ v_{\perp } v?以及平行于旋轉軸的 v ∥ v_{\parallel } v?,進行旋轉后獲得 v ⊥ ′ v_{\perp }^{'} v? v ∥ ′ v_{\parallel }^{'} v?,相加后得到旋轉后的結果 v ′ = v ⊥ ′ + v ∥ ′ v^{'}=v_{\perp }^{'}+v_{\parallel }^{'} v=v?+v?
將這些向量定義為純四元數,下表 q q q代表對應四元數:
w = [ 0 , v ] w ′ = [ 0 , v ′ ] w ⊥ = [ 0 , v ⊥ ] w ⊥ ′ = [ 0 , v ⊥ ′ ] w ∥ = [ 0 , v ∥ ] w ∥ ′ = [ 0 , v ∥ ′ ] u q = [ 0 , u ] \begin{aligned} & w=[0,v] && w^{'}=[0,v^{'}] \\ & w_{\perp }=[0,v_{\perp }] && w^{'}_{\perp }=[0,v^{'}_{\perp }] \\ & w_{\parallel }=[0,v_{\parallel }] && w^{'}_{\parallel }=[0,v^{'}_{\parallel }] \\ & u_{q}=[0,u]\end{aligned} ?w=[0,v]w?=[0,v?]w?=[0,v?]uq?=[0,u]??w=[0,v]w?=[0,v?]w?=[0,v?]?那么我們就能得到: w = w ⊥ + w ∥ w ′ = w ⊥ ′ + w ∥ ′ \begin{aligned} w=w_{\perp }+w_{\parallel } && w^{'}=w^{'}_{\perp }+w^{'}_{\parallel }\end{aligned} w=w?+w???w=w?+w??和之前一樣,這里也分開討論 w ⊥ w_{\perp } w? w ∥ w_{\parallel } w?的情況,

3.2.1 w ⊥ w_{\perp} w?的旋轉

之前推導過,如果一個向量 v ⊥ v_{\perp } v?正交于旋轉軸 u u u,那么 v ⊥ ′ = c o s ( θ ) v ⊥ + s i n ( θ ) ( u × v ⊥ ) v^{'}_{\perp }=cos(\theta)v_{\perp }+sin(\theta)(u\times v_{\perp }) v?=cos(θ)v?+sin(θ)(u×v?)將三維向量替換為對應的四元數, v ⊥ ′ v^{'}_{\perp } v? v ⊥ v_{\perp } v?可以直接替換,而對于 u × v ⊥ u\times v_{\perp } u×v?,由于 w w ⊥ = [ ? u ? v ⊥ , u × v ⊥ ] = [ 0 , u × v ⊥ ] = u × v ⊥ \begin{aligned}ww_{\perp} &=[-u\cdot v_{\perp},u\times v_{\perp}] \\ &=[0,u\times v_{\perp}] \\ &= u\times v_{\perp}\end{aligned} ww??=[?u?v?,u×v?]=[0,u×v?]=u×v??將之前定義的四元數帶入,就能得到 w ⊥ ′ = c o s ( θ ) w ⊥ + s i n ( θ ) ( u q w ⊥ ) w^{'}_{\perp }=cos(\theta)w_{\perp }+sin(\theta)(u_{q}w_{\perp}) w?=cos(θ)w?+sin(θ)(uq?w?)因為四元數遵守分配率,可以繼續變換這個等式: w ⊥ ′ = ( c o s ( θ ) + s i n ( θ ) u q ) w ⊥ w^{'}_{\perp }=(cos(\theta)+sin(\theta)u_{q})w_{\perp} w?=(cos(θ)+sin(θ)uq?)w?此時,可以將 c o s ( θ ) + s i n ( θ ) u q cos(\theta)+sin(\theta)u_{q} cos(θ)+sin(θ)uq?看作一個四元數,記為 q q q,且 ∥ q ∥ = 1 \left \| q \right \|=1 q=1(讀者可以自證,用到 ∥ u ∥ = 1 \left \| u \right \|=1 u=1),這樣我們就能將旋轉寫成四元數的乘積了,到此為止,我們已經將旋轉與四元數的積聯系起來了,由此得到 w ⊥ ′ = q w ⊥ w^{'}_{\perp }=qw_{\perp} w?=qw?也就是說,如果旋轉軸 u u u的坐標為 u = [ u x u y u z ] u=\begin{bmatrix} u_{x}\\ u_{y}\\ u_{z} \end{bmatrix} u=???ux?uy?uz?????,旋轉角為 θ \theta θ,那么完成這一旋轉所需要的四元數 q q q可以構造為: q = c o s ( θ ) + s i n ( θ ) u q = [ c o s ( θ ) , 0 ] + [ 0 , s i n ( θ ) u ] = [ c o s ( θ ) , s i n ( θ ) u ] = c o s ( θ ) + s i n ( θ ) u x i + s i n ( θ ) u y j + s i n ( θ ) u z k \begin{aligned}q &= cos(\theta)+sin(\theta)u_{q} \\ &= [cos(\theta),0]+[0, sin(\theta)u] \\ &= [cos(\theta), sin(\theta)u] \\ &= cos(\theta)+sin(\theta)u_{x}i+sin(\theta)u_{y}j+sin(\theta)u_{z}k\end{aligned} q?=cos(θ)+sin(θ)uq?=[cos(θ),0]+[0,sin(θ)u]=[cos(θ),sin(θ)u]=cos(θ)+sin(θ)ux?i+sin(θ)uy?j+sin(θ)uz?k?總結一下,得到定理3D旋轉公式(正交四元數型):當 v ⊥ v_{\perp} v?正交于旋轉軸 u u u時,旋轉 θ \theta θ角度之后的 v ⊥ ′ v^{'}_{\perp} v?可以使用四元數乘法來獲得,令 w ⊥ = [ 0 , v ⊥ ] w_{\perp}=[0,v_{\perp}] w?=[0,v?] q = [ c o s ( θ ) , s i n ( θ ) u ] q=[cos(\theta), sin(\theta)u] q=[cos(θ),sin(θ)u],那么: w ⊥ ′ = q w ⊥ w^{'}_{\perp }=qw_{\perp} w?=qw?

3.2.2 w ∥ w_{\parallel} w?的旋轉

接下來是平行于旋轉軸的 w ∥ w_{\parallel} w?,之前已經討論過,如果一個向量 v ∥ v_{\parallel} v?平行于 u u u,那么旋轉 θ \theta θ后對它不會做出任何變換,由此得到定理3D旋轉公式(平行四元數型):當 v ∥ v_{\parallel} v?平行于旋轉軸 u u u時,旋轉 θ \theta θ角度之后的 v ∥ ′ v^{'}_{\parallel} v?用四元數可以寫為: w ∥ ′ = w ∥ w^{'}_{\parallel}=w_{\parallel} w?=w?

3.2.3 w w w的旋轉

有了前面的結論,我們可以獲得一般情況下 w ′ w^{'} w的結果了: w ′ = w ∥ ′ + w ⊥ ′ = w ∥ + q w ⊥ \begin{aligned} w^{'} &= w^{'}_{\parallel}+w^{'}_{\perp} \\ &= w_{\parallel}+qw_{\perp}\end{aligned} w?=w?+w?=w?+qw??在進一步化簡之前,引入三個引理:

  1. 如果 q = [ c o s ( θ ) , s i n ( θ ) u ] q = [cos(\theta), sin(\theta)u] q=[cos(θ),sin(θ)u],而且 u u u為單位向量,那么 q 2 = q q = [ c o s ( 2 θ ) , s i n ( 2 θ ) u ] q^{2}=qq=[cos(2\theta),sin(2\theta)u] q2=qq=[cos(2θ),sin(2θ)u]
  2. 假設 w ∥ = [ 0 , v ∥ ] w_{\parallel}=[0,v_{\parallel}] w?=[0,v?]是一個純四元數,而 q = [ α , β u ] q=[\alpha,\beta u] q=[α,βu],其中 u u u是一個單位向量, α , β ∈ R \alpha, \beta \in \mathbb{R} α,βR,在這種條件下,如果 v ∥ v_{\parallel} v?平行于 u u u,那么 q v ∥ = v ∥ q qv_{\parallel}=v_{\parallel}q qv?=v?q
  3. 假設 w ⊥ = [ 0 , v ⊥ ] w_{\perp}=[0,v_{\perp}] w?=[0,v?]是一個純四元數,而 q = [ α , β u ] q=[\alpha,\beta u] q=[α,βu],其中 u u u是一個單位向量, α , β ∈ R \alpha, \beta \in \mathbb{R} α,βR,在這種條件下,如果 v ⊥ v_{\perp} v?平行于 u u u,那么 q v ⊥ = v ⊥ q ? qv_{\perp}=v_{\perp}q^{*} qv?=v?q?

關于引理的證明,讀者可以參考文獻2,這里不再擴展,
為方便證明,再引入一個新的四元數 p = [ c o s ( 1 2 θ ) , s i n ( 1 2 θ ) u ] p=[cos(\frac{1}{2}\theta),sin(\frac{1}{2}\theta)u] p=[cos(21?θ),sin(21?θ)u] q = p 2 q=p^{2} q=p2 ∥ p ∥ = 1 \left \| p \right \|=1 p=1,現在,我們就能對原本的旋轉公式進行變形了: w ′ = w ∥ + q w ⊥ = p p ? 1 w ∥ + p p w ⊥ = p p ? w ∥ + p p w ⊥ = p w ∥ p ? + p w ⊥ p ? = p ( w ∥ + w ⊥ ) p ? = p w p ? \begin{aligned} w^{'} &= w_{\parallel}+qw_{\perp} \\ &= pp^{-1}w_{\parallel}+ppw_{\perp} \\ &= pp^{*}w_{\parallel}+ppw_{\perp} \\ &= pw_{\parallel}p^{*}+pw_{\perp}p^{*} \\ &=p(w_{\parallel}+w_{\perp})p^{*} \\ &= pw_{}p^{*}\end{aligned} w?=w?+qw?=pp?1w?+ppw?=pp?w?+ppw?=pw?p?+pw?p?=p(w?+w?)p?=pw?p??至此,我們就解開了四元數與3D旋轉之間的謎題,3D空間中任意一個旋轉都能夠用一個三個四元數相乘的形式表達出來,
綜上,我們可以總結出一個定理3D旋轉公式(一般情況四元數型):任意向量 v v v沿著以單位向量定義的旋轉軸 u u u旋轉 θ \theta θ度之后的 v ′ v^{'} v,可以使用四元數乘法來獲得,令 w = [ 0 , v ] , q = [ c o s ( 1 2 θ ) , s i n ( 1 2 θ ) u ] w=[0,v],q=[cos(\frac{1}{2}\theta),sin(\frac{1}{2}\theta)u] w=[0,v],q=[cos(21?θ),sin(21?θ)u],那么: w ′ = q w q ? = q w q ? 1 w^{'}=qwq^{*}=qwq^{-1} w=qwq?=qwq?1這里用的是 1 2 θ \frac{1}{2}\theta 21?θ而不是 θ \theta θ,這是因為 q q q做的就是一個 1 2 θ \frac{1}{2}\theta 21?θ的旋轉,而 q ? q^{*} q? q ? 1 q^{-1} q?1也做了一個 1 2 θ \frac{1}{2}\theta 21?θ的旋轉,我們進行了兩次旋轉,而不是一次,這兩次旋轉的結果是一個旋轉角為 θ \theta θ的旋轉,下圖或可解釋旋轉的程序:在這里插入圖片描述
w ′ = q w q ? = q w q ? 1 w^{'}=qwq^{*}=qwq^{-1} w=qwq?=qwq?1,我的理解是:對向量 v v v轉化成的純四元數 w w w,經過 q q q的旋轉 q w qw qw后,得到實部不為0的普通四元數,這時沒辦法映射到三維超平面(總不能轉著圈就轉到了四維空間吧),結果與最初的點不在同一三維空間,為了解決這個問題,先對第四維(角度)旋轉一半,再用逆或共軛旋轉回來,這時正好將產生的第四維變為0,重新回到初始的三維超平面空間,這樣不僅解決了奇點問題,也不會產生冗余資料,不知道 H a m i l t o n Hamilton Hamilton怎么想到的,太牛了,

4. 四元數到其它旋轉表示的相互轉換

任意單位四元數描述了一個旋轉,該旋轉也可用旋轉向量、旋轉矩陣或歐拉角描述,現在來考察四元數與旋轉向量、旋轉矩陣或歐拉角的相互轉換關系,

4.1 旋轉向量

本節介紹旋轉向量與四元數之間的轉換關系,
繞坐標軸的多次旋轉可以等效為繞某一轉軸旋轉一定的角度,假設已知等效旋轉軸方向單位旋轉向量 u u u的坐標為 u = [ u x u y u z ] u=\begin{bmatrix} u_{x}\\ u_{y}\\ u_{z} \end{bmatrix} u=???ux?uy?uz?????,旋轉角為 θ \theta θ,根據3.2.3推導的定理3D旋轉公式(一般情況四元數型),設其等效的單位四元數為 q = [ q 0 , q 1 , q 2 , q 3 ] q=[q_{0},q_{1},q_{2},q_{3}] q=[q0?,q1?,q2?,q3?],則有: { q 0 = c o s ( 1 2 θ ) q 1 = u x s i n ( 1 2 θ ) q 2 = u y s i n ( 1 2 θ ) q 3 = u z s i n ( 1 2 θ ) (4.1) \left\{\begin{matrix} q_{0}=cos(\frac{1}{2}\theta )\\ q_{1}=u_{x}sin(\frac{1}{2}\theta )\\ q_{2}=u_{y}sin(\frac{1}{2}\theta )\\ q_{3}=u_{z}sin(\frac{1}{2}\theta ) \end{matrix}\right.\tag{4.1} ????????q0?=cos(21?θ)q1?=ux?sin(21?θ)q2?=uy?sin(21?θ)q3?=uz?sin(21?θ)?(4.1)
同理,當已知單位四元數 q = [ q 0 , q 1 , q 2 , q 3 ] q=[q_{0},q_{1},q_{2},q_{3}] q=[q0?,q1?,q2?,q3?],其對應的旋轉角 θ \theta θ和旋轉向量 u u u為: { θ = 2 arccos ? q 0 [ u x , u y , u z ] T = [ q 1 , q 2 , q 3 ] T / sin ? ( 2 θ ) (4.2) \left\{\begin{matrix} \theta=2\arccos q_{0}\\ [u_{x},u_{y},u_{z}]^{T}=[q_{1},q_{2},q_{3}]^{T}/\sin(\frac{2}{\theta }) \end{matrix}\right.\tag{4.2} {θ=2arccosq0?[ux?,uy?,uz?]T=[q1?,q2?,q3?]T/sin(θ2?)?(4.2)

4.2 旋轉矩陣

已知單位四元數 q q q,根據博文《三維空間剛體運動2:旋轉向量與羅德里格斯公式》中的羅德里格斯公式展開式(2.3)及本文公式(4.2),將單位旋轉向量 u u u及旋轉角 θ \theta θ替換為單位四元數 q q q,省去計算程序,得到單位四元數到旋轉矩陣的轉換公式為: R = [ 1 ? 2 q 2 2 ? 2 q 3 2 2 ( q 1 q 2 ? q 0 q 3 ) 2 ( q 1 q 3 + q 0 q 2 ) 2 ( q 1 q 2 + q 0 q 3 ) 1 ? 2 q 1 2 ? 2 q 3 2 2 ( q 2 q 3 ? q 0 q 1 ) 2 ( q 1 q 3 ? q 0 q 2 ) 2 ( q 2 q 3 + q 0 q 1 ) 1 ? 2 q 1 2 ? 2 q 2 2 ] (4.3) R=\begin{bmatrix} 1-2q_{2}^{2}-2q_{3}^{2} & 2(q_{1}q_{2}-q_{0}q_{3}) & 2(q_{1}q_{3}+q_{0}q_{2})\\ 2(q_{1}q_{2}+q_{0}q_{3}) & 1-2q_{1}^{2}-2q_{3}^{2} & 2(q_{2}q_{3}-q_{0}q_{1})\\ 2(q_{1}q_{3}-q_{0}q_{2}) & 2(q_{2}q_{3}+q_{0}q_{1}) & 1-2q_{1}^{2}-2q_{2}^{2} \end{bmatrix}\tag{4.3} R=???1?2q22??2q32?2(q1?q2?+q0?q3?)2(q1?q3??q0?q2?)?2(q1?q2??q0?q3?)1?2q12??2q32?2(q2?q3?+q0?q1?)?2(q1?q3?+q0?q2?)2(q2?q3??q0?q1?)1?2q12??2q22?????(4.3)
假設已知變換矩陣: R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] R=\begin{bmatrix} r_{11} & r_{12} & r_{13}\\ r_{21} & r_{22} & r_{23}\\ r_{31} & r_{32} & r_{33} \end{bmatrix} R=???r11?r21?r31??r12?r22?r32??r13?r23?r33?????根據公式(4.3),推導對應的單位四元數為: { q 0 = 1 2 1 + r 11 + r 22 + r 33 q 1 = r 32 ? r 23 4 q 0 q 2 = r 13 ? r 31 4 q 0 q 3 = r 21 ? r 12 4 q 0 (4.4) \left\{\begin{matrix} q_{0}=\frac{1}{2}\sqrt{1+r_{11}+r_{22}+r_{33}}\\ q_{1}=\frac{r_{32}-r_{23}}{4q_{0}}\\ q_{2}=\frac{r_{13}-r_{31}}{4q_{0}}\\ q_{3}=\frac{r_{21}-r_{12}}{4q_{0}} \end{matrix}\right.\tag{4.4} ????????q0?=21?1+r11?+r22?+r33? ?q1?=4q0?r32??r23??q2?=4q0?r13??r31??q3?=4q0?r21??r12???(4.4)

4.3 歐拉角

那么將Z-Y-X歐拉角(或RPY角:繞固定坐標系的X-Y-Z依次旋轉α,β,γ角)轉換為四元數: q = [ cos ? γ 2 0 0 sin ? γ 2 ] [ cos ? β 2 0 sin ? β 2 0 ] [ cos ? α 2 sin ? α 2 0 0 ] = [ cos ? α 2 cos ? β 2 cos ? γ 2 + sin ? α 2 sin ? β 2 sin ? γ 2 sin ? α 2 cos ? β 2 cos ? γ 2 ? cos ? α 2 sin ? β 2 sin ? γ 2 cos ? α 2 sin ? β 2 cos ? γ 2 + sin ? α 2 cos ? β 2 sin ? γ 2 cos ? α 2 cos ? β 2 sin ? γ 2 ? sin ? α 2 sin ? β 2 cos ? γ 2 ] q=\begin{bmatrix} \cos\frac{\gamma}{2}\\ 0\\ 0\\ \sin\frac{\gamma}{2} \end{bmatrix} \begin{bmatrix} \cos\frac{\beta}{2}\\ 0\\ \sin\frac{\beta}{2}\\ 0 \end{bmatrix} \begin{bmatrix} \cos\frac{\alpha}{2}\\ \sin\frac{\alpha}{2}\\ 0\\ 0 \end{bmatrix} =\begin{bmatrix} \cos\frac{\alpha}{2}\cos\frac{\beta}{2}\cos\frac{\gamma}{2}+\sin\frac{\alpha}{2}\sin\frac{\beta}{2}\sin\frac{\gamma}{2}\\ \sin\frac{\alpha}{2}\cos\frac{\beta}{2}\cos\frac{\gamma}{2}-\cos\frac{\alpha}{2}\sin\frac{\beta}{2}\sin\frac{\gamma}{2}\\ \cos\frac{\alpha}{2}\sin\frac{\beta}{2}\cos\frac{\gamma}{2}+\sin\frac{\alpha}{2}\cos\frac{\beta}{2}\sin\frac{\gamma}{2}\\ \cos\frac{\alpha}{2}\cos\frac{\beta}{2}\sin\frac{\gamma}{2}-\sin\frac{\alpha}{2}\sin\frac{\beta}{2}\cos\frac{\gamma}{2} \end{bmatrix} q=?????cos2γ?00sin2γ????????????cos2β?0sin2β?0???????????cos2α?sin2α?00??????=?????cos2α?cos2β?cos2γ?+sin2α?sin2β?sin2γ?sin2α?cos2β?cos2γ??cos2α?sin2β?sin2γ?cos2α?sin2β?cos2γ?+sin2α?cos2β?sin2γ?cos2α?cos2β?sin2γ??sin2α?sin2β?cos2γ???????
根據上面的公式可以求出逆解,即由四元數 q = ( q 0 , q 1 , q 2 , q 3 ) q=(q_{0},q_{1},q_{2},q_{3}) q=(q0?,q1?,q2?,q3?)到歐拉角的轉換為: [ α β γ ] = [ a t a n 2 ( 2 ( q 0 q 1 + q 2 q 3 ) , 1 ? 2 ( q 1 2 + q 2 2 ) ) arcsin ? ( 2 ( q 0 q 2 ? q 1 q 3 ) a t a n 2 ( 2 ( q 0 q 3 + q 1 q 2 ) , 1 ? 2 ( q 2 2 + q 3 2 ) ) ] \begin{bmatrix} \alpha\\ \beta\\ \gamma \end{bmatrix} =\begin{bmatrix} atan2(2(q_{0}q_{1}+q_{2}q_{3}),1-2(q^{2}_{1}+q^{2}_{2}))\\ \arcsin (2(q_{0}q_{2}-q_{1}q_{3})\\ atan2(2(q_{0}q_{3}+q_{1}q_{2}),1-2(q^{2}_{2}+q^{2}_{3})) \end{bmatrix} ???αβγ????=???atan2(2(q0?q1?+q2?q3?),1?2(q12?+q22?))arcsin(2(q0?q2??q1?q3?)atan2(2(q0?q3?+q1?q2?),1?2(q22?+q32?))????這里使用了 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)而不是 a r c t a n ( y x ) arctan(\frac{y}{x}) arctan(xy?),因為 a r c t a n ( y x ) arctan(\frac{y}{x}) arctan(xy?)的取值范圍為 [ ? π 2 , π 2 ] [-\frac{\pi}{2},\frac{\pi}{2}] [?2π?,2π?],只有 180 ° 180° 180°,而繞某個軸旋轉時范圍是 360 ° 360° 360° a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)正好滿足需求, a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)是一個函式,在C語言里回傳的是指方位角,函式原型為 d o u b l e a t a n 2 ( d o u b l e y , d o u b l e x ) double \space atan2(double y, double x) double atan2(doubley,doublex) ,回傳以弧度表示的 y / x y/x y/x 的反正切,y 和 x 的值的符號決定了正確的象限,也可以理解為計算復數 x + y i x+yi x+yi 的輻角,計算時atan2 比 atan 穩定,
另外需要注意的就是奇異性問題,即萬向鎖,下面分析這種情況,當剛體繞Y軸旋轉了 90 ° 90° 90°(俯仰角pitch=90)時,如何計算橫滾角roll和偏航角yaw?這時會發生自由度丟失的情況,即Yaw和Roll會變為一個自由度,此時再使用上面的公式根據四元數計算歐拉角會出現問題: arcsin ? ( 2 ( q 0 q 2 ? q 1 q 3 ) \arcsin (2(q_{0}q_{2}-q_{1}q_{3}) arcsin(2(q0?q2??q1?q3?)的定義域為 [ ? 1 , 1 ] [-1,1] [?1,1],當 2 ( q 0 q 2 ? q 1 q 3 ) = ± 0.5 2(q_{0}q_{2}-q_{1}q_{3})=\pm 0.5 2(q0?q2??q1?q3?)=±0.5時(在程式中浮點數不能直接進行等于判斷,要使用合理的閾值),俯仰角 β \beta β ± 90 ° \pm 90° ±90°,將其帶入正向公式計算出四元數 ( q 0 , q 1 , q 2 , q 3 ) (q_{0},q_{1},q_{2},q_{3}) (q0?,q1?,q2?,q3?),然后可以發現逆向公式中atan2函式中的引數全部為0,即出現了 0 0 \frac{0}{0} 00?的情況!無法計算,
β = 90 ° \beta=90° β=90°時, sin ? β 2 = cos ? β 2 = 0.707 \sin \frac{\beta}{2}=\cos \frac{\beta}{2}=0.707

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/81251.html

標籤:其他

上一篇:2020云棲大會編程限時搶答賽 - 早中晚3場題解

下一篇:Git三大核心問題總說:版本、分支、遠程

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more