从数学角度理解欧拉旋转中的万向节死锁
歐拉旋轉(zhuǎn)
姿態(tài)角pitch/roll/yaw
? 姿態(tài)角是飛行器的機(jī)體坐標(biāo)系與地面坐標(biāo)系的夾角,也叫歐拉角。其中,
pitch是俯仰角,yaw是偏航角,roll是滾轉(zhuǎn)角。
? 歐拉角最直觀、最容易理解、存儲空間少,但歐拉角存在萬向節(jié)死鎖現(xiàn)象、插值速度不均勻等缺點,而且不可以在計算機(jī)中直接運算。
設(shè)xyz-軸為參考系的參考軸,也成為固定軸,XYZ-軸稱為動軸,xy-平面和XY-平面的相交為交點線,用字母N表示。則章動角θ=β是z軸與Z軸的夾角,進(jìn)動角ψ=α是x軸與交點線的夾角,自轉(zhuǎn)角j=γ是交點線與X軸的夾角。上述旋轉(zhuǎn)方式采用zxz的順規(guī)方式旋轉(zhuǎn)得到,即:
1. 繞z軸旋轉(zhuǎn)α,使x軸與N軸重合,N軸是旋轉(zhuǎn)前后兩個坐標(biāo)系x-y平面的交線 2. 繞x軸(也就是N軸)旋轉(zhuǎn)β,使z軸與旋轉(zhuǎn)后的z軸重合 3. 繞z軸旋轉(zhuǎn)γ,使坐標(biāo)系與旋轉(zhuǎn)后的完全重合歐拉角的旋轉(zhuǎn)方式總共有12種:
- 非對稱型歐拉角: XYZ,XZY,YXZ,YZX,ZXY,ZYX
- 對稱型歐拉角: XYX,XZX,YXY,YZY,ZXZ,ZYZ
每一種旋轉(zhuǎn)方式得到的結(jié)果并不一樣,比如先繞X軸旋轉(zhuǎn)45°再分別繞Y軸和Z軸旋轉(zhuǎn)45°與先繞Y軸再繞X軸和Z軸旋轉(zhuǎn)得到的結(jié)果是不一致的,由此可見旋轉(zhuǎn)順序的重要性。
在數(shù)學(xué)公式表達(dá)中,需要用矩陣相乘來表示旋轉(zhuǎn),乘以矩陣的順序不同意味著旋轉(zhuǎn)方式的不同,其結(jié)果也是不一樣的。以二維旋轉(zhuǎn)為例:
? 設(shè)x點的坐標(biāo)為(x0,y0),旋轉(zhuǎn)后的坐標(biāo)為(x1,y1),旋轉(zhuǎn)角度為θ,則以矩陣表示為
[x1y1]=[cosθ?sinθsinθcosθ][x0y0]\left[ \begin{matrix} x1 \\ y1 \end{matrix} \right] =\left[ \begin{matrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{matrix} \right] \left[ \begin{matrix} x0 \\ y0 \end{matrix} \right] [x1y1?]=[cosθsinθ??sinθcosθ?][x0y0?]
? 在三維旋轉(zhuǎn)中,可以分解為先繞x軸旋轉(zhuǎn),再繞y軸旋轉(zhuǎn),之后繞z軸旋轉(zhuǎn),則通過矩陣可表示為
[x1y1z1]=[cosα?sinα0sinαcosα0001][cosβ0?sinβ010sinβ0cosβ][1000cosθ?sinθ0sinθcosθ][x0y0z0]\left[ \begin{matrix} x1 \\ y1 \\ z1 \end{matrix} \right]= \left[ \begin{matrix} cos\alpha & -sin\alpha & 0 \\ sin\alpha & cos\alpha & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} cos\beta & 0 & -sin\beta \\ 0 & 1 & 0 \\ sin\beta & 0 & cos\beta \end{matrix} \right] \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos\theta & -sin\theta \\ 0 & sin\theta & cos\theta \end{matrix} \right] \left[ \begin{matrix} x0 \\ y0 \\ z0 \end{matrix} \right] ???x1y1z1????=???cosαsinα0??sinαcosα0?001???????cosβ0sinβ?010??sinβ0cosβ???????100?0cosθsinθ?0?sinθcosθ???????x0y0z0????
? 通過上述矩陣可以看出,用[x0 y0 z0]代表一個向量的前提是定義了相應(yīng)的坐標(biāo)系,即X軸、Y軸和Z軸已經(jīng)確定,不會因為旋轉(zhuǎn)的發(fā)生而導(dǎo)致整個坐標(biāo)軸發(fā)生形變。對于旋轉(zhuǎn)矩陣ZYX,其順序是先基于X軸旋轉(zhuǎn)再進(jìn)行Y軸和Z軸的旋轉(zhuǎn)。
? 以萬向節(jié)死鎖演示視頻的截圖為例進(jìn)行說明:藍(lán)圈表示繞x軸旋轉(zhuǎn),紅圈表示繞y軸旋轉(zhuǎn),綠圈表示繞z軸旋轉(zhuǎn),由于綠圈的旋轉(zhuǎn)會導(dǎo)致紅圈和藍(lán)圈的方向變化,紅圈的旋轉(zhuǎn)會導(dǎo)致藍(lán)圈的方向變化,所以可以看到,要滿足矩陣公式,即坐標(biāo)軸的方向不發(fā)生改變,則其旋轉(zhuǎn)的順序必須是先轉(zhuǎn)動藍(lán)圈,再轉(zhuǎn)動紅圈,最后轉(zhuǎn)動綠圈。即該模型的旋轉(zhuǎn)順序(即順規(guī))是藍(lán)紅綠(XYZ)。
? 如果換個旋轉(zhuǎn)順序——先轉(zhuǎn)綠圈45°再轉(zhuǎn)紅圈45°最后轉(zhuǎn)藍(lán)圈45°,這和先轉(zhuǎn)動藍(lán)圈45°再轉(zhuǎn)動紅圈45°最后轉(zhuǎn)動綠圈45°的結(jié)果是一樣的嗎?答案是肯定的,只要保證轉(zhuǎn)動角度一致,最后產(chǎn)生的效果都是一樣的。那為什么要規(guī)定轉(zhuǎn)動的順序呢?因為此處大家已經(jīng)陷入了轉(zhuǎn)動順序的陷阱了。為什么會有這個矛盾,其實是陷入了歐拉旋轉(zhuǎn)中重要的一個概念的誤解,這就是順規(guī)。
順規(guī)
首先討論順規(guī)存在的必要性,順規(guī)從數(shù)學(xué)意義上來講就是對矩陣順序的規(guī)定,具體討論如下:
[x1y1z1]=[cosα?sinα0sinαcosα0001][cosβ0?sinβ010sinβ0cosβ][1000cosθ?sinθ0sinθcosθ][x0y0z0]\left[ \begin{matrix} x1 \\ y1 \\ z1 \end{matrix} \right]= \left[ \begin{matrix} cos\alpha & -sin\alpha & 0 \\ sin\alpha & cos\alpha & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} cos\beta & 0 & -sin\beta \\ 0 & 1 & 0 \\ sin\beta & 0 & cos\beta \end{matrix} \right] \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos\theta & -sin\theta \\ 0 & sin\theta & cos\theta \end{matrix} \right] \left[ \begin{matrix} x0 \\ y0 \\ z0 \end{matrix} \right] ???x1y1z1????=???cosαsinα0??sinαcosα0?001???????cosβ0sinβ?010??sinβ0cosβ???????100?0cosθsinθ?0?sinθcosθ???????x0y0z0????
[x1y1z1]=[cosβ0?sinβ010sinβ0cosβ][cosα?sinα0sinαcosα0001][1000cosθ?sinθ0sinθcosθ][x0y0z0]\left[ \begin{matrix} x1 \\ y1 \\ z1 \end{matrix} \right]= \left[ \begin{matrix} cos\beta & 0 & -sin\beta \\ 0 & 1 & 0 \\ sin\beta & 0 & cos\beta \end{matrix} \right] \left[ \begin{matrix} cos\alpha & -sin\alpha & 0 \\ sin\alpha & cos\alpha & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos\theta & -sin\theta \\ 0 & sin\theta & cos\theta \end{matrix} \right] \left[ \begin{matrix} x0 \\ y0 \\ z0 \end{matrix} \right] ???x1y1z1????=???cosβ0sinβ?010??sinβ0cosβ???????cosαsinα0??sinαcosα0?001???????100?0cosθsinθ?0?sinθcosθ???????x0y0z0????
? 可以看到,矩陣的順序不一樣會導(dǎo)致最終的旋轉(zhuǎn)結(jié)果不一致,不妨以一支筆為向量比劃一下,假設(shè)向量為[1,0,0],則向量先繞y軸旋轉(zhuǎn)90°到z軸,再繞x軸旋轉(zhuǎn)30°,和先繞x軸旋轉(zhuǎn)30°再繞y軸旋轉(zhuǎn)90°,其結(jié)果是不一樣的。如果空間思維能力差的可以參考?xì)W拉角的旋轉(zhuǎn)順序能改變嗎?中的幾個gif動圖。
? 從數(shù)學(xué)角度上分析,確實旋轉(zhuǎn)的順序相當(dāng)重要,但為什么上圖中會有旋轉(zhuǎn)順序不一致結(jié)果卻一樣呢?這就跳回到我們前邊要注意的細(xì)節(jié),首先旋轉(zhuǎn)過程中,我們必須保證第二次旋轉(zhuǎn)軸不會因為第一個的旋轉(zhuǎn)而發(fā)生偏轉(zhuǎn)(第三次旋轉(zhuǎn)同理)。即,第一次繞x軸旋轉(zhuǎn)后,y軸和z軸的方向是沒有發(fā)生任何變化的,這是對矩陣最直觀的理解。
? 從演示視頻和模型來看,如果我們先轉(zhuǎn)動紅圈,其實藍(lán)圈的軸心已經(jīng)發(fā)生了偏轉(zhuǎn),即我們不能認(rèn)為紅圈先動就先乘以第二個矩陣。換言之,在數(shù)學(xué)上,哪個矩陣先乘在該模型中不等于哪個圈先轉(zhuǎn)動,而必須遵循一個準(zhǔn)則——先轉(zhuǎn)動的圈不能影響還沒轉(zhuǎn)動的圈的軸心方向。所以實際上,該模型的順規(guī)其實是已經(jīng)確定了,即xyz順序。那如何理解先轉(zhuǎn)動紅圈對應(yīng)的數(shù)學(xué)模型呢?
? 重新聲明一點,通過矩陣運算可以得到,右邊的矩陣運算后是對左邊的矩陣不產(chǎn)生影響的,而左邊的矩陣運算是會對右邊的矩陣有一定的影響作用。我們可以通過空間想象得知,由于左邊的矩陣會導(dǎo)致右邊的矩陣原定旋轉(zhuǎn)方向產(chǎn)生一定的偏轉(zhuǎn),相當(dāng)于代入我們已知β的值,實際上就已經(jīng)產(chǎn)生了對前一個矩陣旋轉(zhuǎn)軸和整個向量的偏轉(zhuǎn),即紅圈對藍(lán)圈產(chǎn)生了影響,藍(lán)圈也發(fā)生偏轉(zhuǎn)了!
萬向節(jié)死鎖
? 萬向節(jié)死鎖是歐拉旋轉(zhuǎn)中順規(guī)存在導(dǎo)致的必然缺陷,其本質(zhì)就是歐拉旋轉(zhuǎn)過程中出現(xiàn)了維度丟失的情況。無論是哪種順規(guī)的歐拉旋轉(zhuǎn),總是會存在這種情況。比如zxz,但x旋轉(zhuǎn)180°時,前后兩次圍繞z軸的旋轉(zhuǎn)只產(chǎn)生了一個維度上的旋轉(zhuǎn),此時zxz的旋轉(zhuǎn)只能產(chǎn)生兩個維度的轉(zhuǎn)動,即滾轉(zhuǎn)角和俯仰角,偏轉(zhuǎn)角丟失了。
? 萬向節(jié)死鎖的關(guān)鍵原因在于順規(guī)的存在——由于有了繞軸轉(zhuǎn)動的順序問題,導(dǎo)致對于繞順序為第二的軸轉(zhuǎn)動90°會導(dǎo)致其他兩個軸上的運動方向重合,從而導(dǎo)致了原本三維的旋轉(zhuǎn)運動少了一個維度,進(jìn)而導(dǎo)致在某種特定的情況下不能按照預(yù)期的路線進(jìn)行繞軸運動,具體過程可參考萬向節(jié)死鎖演示視頻。詳細(xì)的解釋可參考【Unity編程】Unity中的歐拉旋轉(zhuǎn)和【Unity編程】歐拉角與萬向節(jié)死鎖(圖文版)。其解釋僅供參考,我們還可以通過萬向節(jié)死鎖模擬程序Unity動手實踐演示。
? Unity中的順規(guī)是zxy,即繞z軸的轉(zhuǎn)動不影響x和y軸,繞x軸的轉(zhuǎn)動不影響y軸但影響z軸,繞y軸的轉(zhuǎn)動直接影響x和z軸,所以當(dāng)先對x軸產(chǎn)生一個90°的旋轉(zhuǎn)時,y軸和z軸都產(chǎn)生了同樣的翻滾角效果,無法產(chǎn)生偏轉(zhuǎn)角(x軸產(chǎn)生的是俯仰角的變化)。
? 萬向節(jié)死鎖的模型演示已經(jīng)在上述視頻和其他文章中描述的比較清晰,以下我們只從數(shù)學(xué)角度上理解。
[x1y1z1]=[cosα?sinα0sinαcosα0001][cosβ0?sinβ010sinβ0cosβ][1000cosθ?sinθ0sinθcosθ][x0y0z0]\left[ \begin{matrix} x1 \\ y1 \\ z1 \end{matrix} \right]= \left[ \begin{matrix} cos\alpha & -sin\alpha & 0 \\ sin\alpha & cos\alpha & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} cos\beta & 0 & -sin\beta \\ 0 & 1 & 0 \\ sin\beta & 0 & cos\beta \end{matrix} \right] \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos\theta & -sin\theta \\ 0 & sin\theta & cos\theta \end{matrix} \right] \left[ \begin{matrix} x0 \\ y0 \\ z0 \end{matrix} \right] ???x1y1z1????=???cosαsinα0??sinαcosα0?001???????cosβ0sinβ?010??sinβ0cosβ???????100?0cosθsinθ?0?sinθcosθ???????x0y0z0????
=[cosαcosβ?sinαcosθ?cosαsinβsinθsinαsinθ?cosαsinβcosθsinαcosβcosαcosθ?sinαsinβsinθ?cosαsinθ?sinαsinβcosθsinβcosβsinθcosβcosθ][x0y0z0]= \left[ \begin{matrix} cos\alpha cos\beta & -sin\alpha cos\theta-cos\alpha sin\beta sin\theta & sin\alpha sin\theta-cos\alpha sin\beta cos\theta \\ sin\alpha cos\beta & cos\alpha cos\theta-sin\alpha sin\beta sin\theta & -cos\alpha sin\theta-sin\alpha sin\beta cos\theta \\ sin\beta & cos\beta sin\theta & cos\beta cos\theta \end{matrix} \right] \left[ \begin{matrix} x0 \\ y0 \\ z0 \end{matrix} \right] =???cosαcosβsinαcosβsinβ??sinαcosθ?cosαsinβsinθcosαcosθ?sinαsinβsinθcosβsinθ?sinαsinθ?cosαsinβcosθ?cosαsinθ?sinαsinβcosθcosβcosθ???????x0y0z0????
當(dāng)β=pi/2時,sinβ=1,cosβ=0,故
[x1y1z1]=[0?sin(θ+α)?cos(θ+α)0cos(θ+α)?sin(θ+α)100][x0y0z0]\left[ \begin{matrix} x1 \\ y1 \\ z1 \end{matrix} \right]= \left[ \begin{matrix} 0 & -sin(\theta+\alpha) & -cos(\theta+\alpha) \\ 0 & cos(\theta+\alpha) & -sin(\theta+\alpha) \\ 1 & 0 & 0 \end{matrix} \right] \left[ \begin{matrix} x0 \\ y0 \\ z0 \end{matrix} \right] ???x1y1z1????=???001??sin(θ+α)cos(θ+α)0??cos(θ+α)?sin(θ+α)0???????x0y0z0????
? 此時可以看到θ和α的變化都產(chǎn)生了相同的效果,即產(chǎn)生的都是繞z軸的旋轉(zhuǎn)(正常情況下α和θ對應(yīng)的矩陣是正交的),而原本θ角產(chǎn)生的旋轉(zhuǎn)維度丟失了,不能產(chǎn)生偏轉(zhuǎn)角。實際上對于不同的向量,會有不同的鎖定效果,如當(dāng)[x0 y0 z0]=[1 0 0]時,不能產(chǎn)生偏轉(zhuǎn)角,當(dāng)[x0 y0 z0]=[0 0 1]時,不能產(chǎn)生滾轉(zhuǎn)角等。歸結(jié)為:萬向節(jié)死鎖產(chǎn)生的是在某個特殊狀態(tài)下某種特定運動不能發(fā)生,如無法發(fā)生偏轉(zhuǎn),無法發(fā)生翻滾或者無法發(fā)生俯仰,或者無法發(fā)生上述運動的某個結(jié)合運動,具體取決于向量的初始狀態(tài)。
? 丟失旋轉(zhuǎn)維度產(chǎn)生的最大問題在視頻中也有詳細(xì)的演示,即向量不能朝某一個特定的方向進(jìn)行最短路徑旋轉(zhuǎn),而需要繞弧線產(chǎn)生一定的旋轉(zhuǎn),為什么會這樣?直觀上看就是因為丟失了一個維度導(dǎo)致在這個維度上呈現(xiàn)出鎖死的狀態(tài),需要先解除這個特殊狀態(tài)才能轉(zhuǎn)到我們需要的姿態(tài)角上。
? 以下從微分學(xué)的角度來分析為什么在這個狀態(tài)下不能產(chǎn)生特定維度的旋轉(zhuǎn)。
? 我們以[x0 y0 z0]=[1 0 0]為例,首先我們將x、y、z看成是自變量為α、β和θ的函數(shù)。即
x=x0?cosβcosα+y0?(?sinαcosθ?cosαsinβsinθ)+z0?(sinαsinθ?cosαsinβcosθ)y=x0?sinαcosβ+y0?(cosαcosθ?sinαsinβsinθ)+z0?(?cosαsinθ?sinαsinβcosθ)z=x0?(sinβ)+y0?cosβsinθ+z0?cosβcosθx=x_0*cos\beta cos\alpha + y_0*(-sin\alpha cos\theta-cos\alpha sin\beta sin\theta) + z_0*(sin\alpha sin\theta-cos\alpha sin\beta cos\theta) \\ y=x_0*sin\alpha cos\beta +y_0*(cos\alpha cos\theta-sin\alpha sin\beta sin\theta)+z_0*(-cos\alpha sin\theta-sin\alpha sin\beta cos\theta) \\ z=x_0*(sin\beta)+y_0*cos\beta sin\theta+z_0*cos\beta cos\theta x=x0??cosβcosα+y0??(?sinαcosθ?cosαsinβsinθ)+z0??(sinαsinθ?cosαsinβcosθ)y=x0??sinαcosβ+y0??(cosαcosθ?sinαsinβsinθ)+z0??(?cosαsinθ?sinαsinβcosθ)z=x0??(sinβ)+y0??cosβsinθ+z0??cosβcosθ
分別求出x、y和z在α=0、β=pi/2和θ=0時的偏導(dǎo)數(shù),得到
?x?α=y0,?x?β=?x0,?x?θ=y0?y?α=z0,?y?β=0,?y?θ=z0?z?α=0,?z?β=?z0,?z?θ=0\frac{\partial x}{\partial \alpha} = y_0, \frac{\partial x}{\partial \beta} = -x_0, \frac{\partial x}{\partial \theta} = y_0\\ \frac{\partial y}{\partial \alpha} = z_0, \frac{\partial y}{\partial \beta} = 0, \frac{\partial y}{\partial \theta} = z_0\\ \frac{\partial z}{\partial \alpha} = 0, \frac{\partial z}{\partial \beta} = -z_0, \frac{\partial z}{\partial \theta} = 0 ?α?x?=y0?,?β?x?=?x0?,?θ?x?=y0??α?y?=z0?,?β?y?=0,?θ?y?=z0??α?z?=0,?β?z?=?z0?,?θ?z?=0
即
dx=?x?αdα+?x?βdβ+?x?θdθ=y0(dα?dθ)?x0dβdy=?y?αdα+?y?βdβ+?y?θdθ=zo(dθ?dα)dz=?z?αdα+?z?βdβ+?z?θdθ=?z0dβdx = \frac{\partial x}{\partial \alpha}d\alpha+\frac{\partial x}{\partial \beta}d\beta+\frac{\partial x}{\partial \theta}d\theta=y_0(d\alpha-d\theta)-x_0d\beta \\ dy = \frac{\partial y}{\partial \alpha}d\alpha+\frac{\partial y}{\partial \beta}d\beta+\frac{\partial y}{\partial \theta}d\theta=z_o(d\theta-d\alpha) \\ dz = \frac{\partial z}{\partial \alpha}d\alpha+\frac{\partial z}{\partial \beta}d\beta+\frac{\partial z}{\partial \theta}d\theta=-z_0d\beta \\ dx=?α?x?dα+?β?x?dβ+?θ?x?dθ=y0?(dα?dθ)?x0?dβdy=?α?y?dα+?β?y?dβ+?θ?y?dθ=zo?(dθ?dα)dz=?α?z?dα+?β?z?dβ+?θ?z?dθ=?z0?dβ
則可以得到,當(dāng)z0≠0時,
?z0?dx+y0?dy+x0?dz=0-z_0*dx+y_0*dy+x_0*dz=0 ?z0??dx+y0??dy+x0??dz=0
此時,向量的變化是沿著與旋轉(zhuǎn)后的向量垂直的平面變化的。
當(dāng)z0=0時,
dx=y0(dα?dθ)?x0dβ≠0,dy=0,dz=0dx=y_0(d\alpha-d\theta)-x_0d\beta≠0,dy=0,dz=0 dx=y0?(dα?dθ)?x0?dβ?=0,dy=0,dz=0
可以看到對于[1 0 0]
dx=?x0dβ,dy=0,dz=0dx=-x_0d\beta,dy=0,dz=0 dx=?x0?dβ,dy=0,dz=0
? 只能沿x軸方向發(fā)生變化,此變化是由β角的轉(zhuǎn)動產(chǎn)生的**(α和θ產(chǎn)生的是滾轉(zhuǎn)角,xyz坐標(biāo)系無法體現(xiàn)出滾轉(zhuǎn)角的變化)**,而dy和dz的變化始終為0,則可以看出,沿著Y軸與Z軸所在平面的偏轉(zhuǎn)是不能實現(xiàn)的,這與視頻中的死鎖現(xiàn)象是一致的。
對于[0 0 1]
?dx=0-dx=0 ?dx=0
? 得到x=z0=1,即可以沿著x=1的平面進(jìn)行任意角度的偏移,只要控制好α、β和θ的旋轉(zhuǎn)度即可,但實際上,[0 0 1]丟失了滾轉(zhuǎn)角,只是滾轉(zhuǎn)角無法從xyz坐標(biāo)系上表示出來罷了。
? 總而言之,歐拉旋轉(zhuǎn)由于其固有缺陷總是會出現(xiàn)萬向節(jié)死鎖的情況,即丟失某一個特定維度的變化,這個維度可以是純翻滾或者純偏航等,也可以是某個角度的翻滾和某個角度的偏航的特定結(jié)合,具體取決于向量的初始狀態(tài),實際上用向量表示歐拉旋轉(zhuǎn)并不合適,因為向量不存在滾轉(zhuǎn)角,但向量可以表示出偏航和俯仰兩種變化,故可以輕易通過向量推出俯仰或偏航鎖定的情況。現(xiàn)實中應(yīng)將向量想象為視頻中的飛機(jī),簡化為帶滾轉(zhuǎn)角的向量。
總結(jié)
以上是生活随笔為你收集整理的从数学角度理解欧拉旋转中的万向节死锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聚美优品店庆nbsp;从天堂到地狱
- 下一篇: 智能楼宇系统详解