日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

倾斜补偿的电子罗盘(1):地磁场,磁传感器,倾斜补偿

發布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 倾斜补偿的电子罗盘(1):地磁场,磁传感器,倾斜补偿 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傾斜補償的電子羅盤(1):地磁場,磁傳感器,傾斜補償

地磁場和磁傳感器

地磁場可以用于獲取方位信息。以北半球為例,地磁場方向不是與地面水平,而是與水平方向有一定的傾角(指向地面),稱為磁傾角(Inclination)。同時,地磁場的方向也與地理的北方不同,兩者的夾角稱為磁偏角(Declination)。地磁場的磁感應強度大約在30~70uT,與所在地有關。

例如,根據下面這個網站,上海的磁偏角約為-6°,磁傾角約為47°,磁感應強度49.1uT(水平方向33uT,垂直方向36uT)。

World Magnetic Model Calculator (bgs.ac.uk)

(在后面的介紹中忽略磁傾角,假設磁北就是地理北。一般可以通過當地經緯度查詢到磁偏角并加以換算)

地磁傳感器,一般有XY兩軸或者XYZ三軸,大部分基于霍爾效應或是磁阻效應,用于手機、無人機等,實現電子羅盤功能。例如,兩軸磁傳感器可以通過測量XY兩個方向上的磁感應強度,通過簡單的計算獲得設備的朝向。假設磁傳感器的XY平面保持水平,X軸讀數hx,Y軸讀數hy,則設備的X軸方向與磁北的夾角為θ=atan2(hyhx)\theta=atan2(\frac{h_y}{h_x})θ=atan2(hx?hy??),θ范圍是(-180°,180°]。

hxhyθ
+00
++(0,90°)
0+90°
-+(90°,180°)
-0180°
--(-180°,-90°)
0--90°
+-(-90°,0)

2D和3D的旋轉

某個位置地磁場的方向是相對恒定的,而磁傳感器的姿態卻是變化的,因此磁傳感器每個方向的讀數與姿態有關。如下圖,對于MPU-6500,磁傳感器的姿態可以使用繞著XYZ三個軸的旋轉來表示,以逆時針旋轉(從x軸的箭頭看箭尾)為正。

例如,繞著Z軸旋轉,Z軸讀數不變,僅改變X軸和Y軸的讀數。

原讀數:
v0=[hx,hy]T=[Hcosθ,Hsinθ]Tv0=[h_x,h_y]^T=[Hcos\theta, Hsin\theta]^T v0=[hx?,hy?]T=[Hcosθ,Hsinθ]T
根據示意圖,XY逆時針旋轉δ\deltaδ后的讀數:
v′=[hx′,hy′]T=[Hcos(θ?δ),Hsin(θ?δ)]T=[Hcosθcosδ+Hsinθsinδ,Hsinθcosδ?Hcosθsinδ]v'=[h_x',h_y']^T=[Hcos(\theta - \delta),Hsin(\theta - \delta)]^T=[Hcos\theta cos\delta+Hsin\theta sin\delta, Hsin\theta cos\delta - Hcos\theta sin\delta] v=[hx?,hy?]T=[Hcos(θ?δ),Hsin(θ?δ)]T=[Hcosθcosδ+Hsinθsinδ,Hsinθcosδ?Hcosθsinδ]
這種旋轉可以用矩陣表示:
v′=[cosδsinδ?sinδcosδ][HcosθHsinθ]=Rz2d(δ)v0v' = \left[ \begin{matrix} cos\delta & sin\delta \\ -sin\delta & cos\delta \end{matrix} \right] \left[ \begin{matrix} Hcos\theta \\ Hsin\theta \end{matrix} \right] = R_{z2d}(\delta)v_0 v=[cosδ?sinδ?sinδcosδ?][HcosθHsinθ?]=Rz2d?(δ)v0?

然后把Z軸補上,變成一個3x3的矩陣(因為Z軸讀數不變,所以只有3,3的元素是1,其他都是0):
Rz(ψ)=[cosψsinψ0?sinψcosψ0001]R_z(\psi)= \left[ \begin{matrix} cos\psi & sin\psi & 0\\ -sin\psi & cos\psi & 0 \\ 0 & 0 & 1 \end{matrix} \right] Rz?(ψ)=???cosψ?sinψ0?sinψcosψ0?001????
同理,圍繞X軸和Y軸旋轉,對應的矩陣為:
Rx(?)=[1000cos?sin?0?sin?cos?],Ry(θ)=[cosθ0?sinθ010sinθ0cosθ]R_x(\phi)= \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos\phi & sin\phi\\ 0 & -sin\phi & cos\phi \end{matrix} \right], \; R_y(\theta)= \left[ \begin{matrix} cos\theta & 0 & -sin\theta \\ 0 & 1 & 0 \\ sin\theta & 0 & cos\theta \end{matrix} \right] Rx?(?)=???100?0cos??sin??0sin?cos?????,Ry?(θ)=???cosθ0sinθ?010??sinθ0cosθ????

注意Ry(θ)R_y(\theta)Ry?(θ)sinθsin\thetasinθ符號與其他兩個矩陣不同,這與坐標軸設置有關,這里對應于上圖MPU6500。

對于三軸磁傳感器,定義一個初始位置:XY平面平行于水平面,同時X軸與地磁場方向重合。此時讀數為:h0=[HcosI,0,HsinI]Th_0=[HcosI,0,HsinI]^Th0?=[HcosI,0,HsinI]T。I是磁傾角。

  • 如果只有Z軸的旋轉,則讀數變為:
    hrz=Rz(ψ)h0=hrz=Rz(ψ)h0=[cosψsinψ0?sinψcosψ0001][HcosI0HsinI]=[HcosIcosψ?HcosIsinψHsinI]h_{rz}=R_z(\psi)h_0= h_{rz}=R_z(\psi)h_0= \left[ \begin{matrix} cos\psi & sin\psi & 0\\ -sin\psi & cos\psi & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} HcosI\\ 0 \\ HsinI \end{matrix} \right] = \left[ \begin{matrix} HcosIcos\psi \\ -HcosIsin\psi \\ HsinI \end{matrix} \right] hrz?=Rz?(ψ)h0?=hrz?=Rz?(ψ)h0?=???cosψ?sinψ0?sinψcosψ0?001???????HcosI0HsinI????=???HcosIcosψ?HcosIsinψHsinI????
    此時可以直接用ψ=atan(?hyhx)\psi = atan(\frac{-h_y}{h_x})ψ=atan(hx??hy??)獲得方位角。

  • 如果XYZ軸都有旋轉,則讀數變為:
    hrxyz=Rx(?)Ry(θ)Rz(ψ)h0=Rx(?)Ry(θ)hrzh_{rxyz}=R_x(\phi)R_y(\theta)R_z(\psi)h_0=R_x(\phi)R_y(\theta)h_{rz} hrxyz?=Rx?(?)Ry?(θ)Rz?(ψ)h0?=Rx?(?)Ry?(θ)hrz?
    此時需要進行傾斜補償,即基于讀數hrxyzh_{rxyz}hrxyz?,還原為僅有Z軸旋轉的讀數hrzh_{rz}hrz?,然后同樣可以獲得方位角。

  • 傾斜補償

    原理

    進行傾斜補償,需要對X軸和Y軸反向轉動,按之前的記號,X軸轉動(??)(-\phi)(??),Y軸轉動(?θ)(-\theta)(?θ)
    hrz=[hx0,hy0,hz0]=[hx,hy,hz]=Ry(?θ)Rx(??)hrxyz=[cosθ0sinθ010?sinθ0cosθ][1000cos??sin?0sin?cos?]hrxyz=[cosθsinθsin?sinθcos?0cos??sin??sinθcosθsin?cosθcos?][hxhyhz]h_{rz} =[h_{x0},h_{y0},h_{z0}]= [h_x,h_y,h_z]=R_y(-\theta)R_x(-\phi)h_{rxyz} \\ = \left[ \begin{matrix} cos\theta & 0 & sin\theta \\ 0 & 1 & 0 \\ -sin\theta & 0 & cos\theta \end{matrix} \right] \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos\phi & -sin\phi\\ 0 & sin\phi & cos\phi \end{matrix} \right] h_{rxyz} \\ = \left[ \begin{matrix} cos\theta & sin\theta sin\phi & sin\theta cos\phi \\ 0 & cos\phi & -sin\phi\\ -sin\theta & cos\theta sin\phi & cos\theta cos\phi \end{matrix} \right] \left[ \begin{matrix} h_x \\ h_y \\ h_z \end{matrix} \right] hrz?=[hx0?,hy0?,hz0?]=[hx?,hy?,hz?]=Ry?(?θ)Rx?(??)hrxyz?=???cosθ0?sinθ?010?sinθ0cosθ???????100?0cos?sin??0?sin?cos?????hrxyz?=???cosθ0?sinθ?sinθsin?cos?cosθsin??sinθcos??sin?cosθcos????????hx?hy?hz?????
    其中,[hx,hy,hz]T[h_x,h_y,h_z]^T[hx?,hy?,hz?]T是實際讀數。

    因此,考慮傾斜補償后,方位角變為:
    ψ=atan(?hy0hx0)=atan(hysin??hxcos?hxcosθ+hysinθsin?+hzsinθcos?)\psi = atan\left( \frac{-h_{y0}}{h_{x0}}\right)=atan \left( \frac{ h_y sin\phi- h_xcos\phi}{h_xcos\theta + h_ysin\theta sin\phi + h_z sin\theta cos\phi} \right) ψ=atan(hx0??hy0??)=atan(hx?cosθ+hy?sinθsin?+hz?sinθcos?hy?sin??hx?cos??)
    所以,基于當前?\phi?θ\thetaθ的信息,就可以進行傾斜補償。

    使用加速度傳感器獲得角度信息

    根據三軸加速度傳感器的讀數可以獲得所需的角度信息。注意在讀數時,加速度傳感器沒有其他方向上的加速,只受到重力影響。

    假設初始狀態下,加速度傳感器的XY軸平行于水平面,Z軸與重力方向相同,則初始狀態的讀數:a0=[0,0,g]Ta_0=[0,0,g]^Ta0?=[0,0,g]T

    可以看出,圍繞Z軸旋轉對讀數沒有影響,即:Rz(ψ)a0=a0R_z(\psi)a_0=a_0Rz?(ψ)a0?=a0?

    在分別圍繞XY兩軸旋轉后,
    arxyz=Rx(?)Ry(θ)Rz(ψ)a0=Rx(?)Ry(θ)a0a_{rxyz}=R_x(\phi)R_y(\theta)R_z(\psi)a_0=R_x(\phi)R_y(\theta)a_{0} arxyz?=Rx?(?)Ry?(θ)Rz?(ψ)a0?=Rx?(?)Ry?(θ)a0?

    同樣,在XY兩軸反向旋轉后,理論上,讀數應和初始位置的讀數相同:
    Ry(?θ)Rx(??)arxyz=[cosθsinθsin?sinθcos?0cos??sin??sinθcosθsin?cosθcos?][axayaz]=[00g]R_y(-\theta)R_x(-\phi)a_{rxyz} = \left[ \begin{matrix} cos\theta & sin\theta sin\phi & sin\theta cos\phi \\ 0 & cos\phi & -sin\phi\\ -sin\theta & cos\theta sin\phi & cos\theta cos\phi \end{matrix} \right] \left[ \begin{matrix} a_x\\ a_y \\ a_z \end{matrix} \right] =\left[ \begin{matrix} 0 \\ 0 \\ g \end{matrix} \right] Ry?(?θ)Rx?(??)arxyz?=???cosθ0?sinθ?sinθsin?cos?cosθsin??sinθcos??sin?cosθcos????????ax?ay?az?????=???00g????

    因此有:
    axcosθ+aysinθsin?+azsinθcos?=0aycos??azsin?=0a_xcos\theta + a_ysin\theta sin\phi +a_z sin\theta cos\phi =0 \\ a_ycos \phi - a_z sin\phi = 0 ax?cosθ+ay?sinθsin?+az?sinθcos?=0ay?cos??az?sin?=0
    從而計算兩個角度:
    ?=atan(ayaz)θ=atan(?axaysin?+azcos?)\phi = atan\left( \frac{a_y}{a_z}\right) \\ \theta = atan \left( \frac{-a_x}{a_ysin\phi + a_zcos\phi}\right) ?=atan(az?ay??)θ=atan(ay?sin?+az?cos??ax??)

    總結

    • 地磁場和磁傳感器
    • 電子羅盤基本原理
    • 通過加速度傳感器獲得角度信息,進行傾斜補償

    目前是假設這些傳感器的測量值是完全準確的。但實際上會有各種測量誤差, 需要進行校準,后面繼續補充。

    參考資料

    • NXP的應用手冊AN4246、AN4247、AN4248,解釋得比較清楚 (https://www.nxp.com/docs/en/application-note/AN4248.pdf)

    • 很多三軸(磁、加速度、陀螺儀)、六軸(一般是加速度+陀螺儀,少量加速度+磁)、九軸(磁+加速度+陀螺儀)的傳感器,可以看下應用手冊

    例如,ISM303DAC集成了三軸加速度傳感器和三軸磁傳感器,便于實現電子羅盤。

    總結

    以上是生活随笔為你收集整理的倾斜补偿的电子罗盘(1):地磁场,磁传感器,倾斜补偿的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本一区精品视频 | 阿v免费视频 | 精品国产99久久久久久 | 中文字幕一区二区三区5566 | 日韩成人在线免费观看 | 91亚洲精品久久久蜜桃网站 | 懂色av一区二区三区 | 尹人综合网 | 国产99色| 东北老女人av | 欧美成人91 | av资源网址 | 91国偷自产一区二区三区观看 | 97人妻精品一区二区三区动漫 | 国产在线观看无码免费视频 | 日韩精品成人无码专区免费 | 成人性生交大免费看 | 粉嫩av国产一区二区三区 | 精品自拍偷拍视频 | 神马久久网 | 国产福利在线观看视频 | 夫妻性生活黄色片 | 爱情岛论坛成人 | 99久久久国产精品无码性 | 国产卡一卡二卡三无线乱码新区 | 午夜片在线观看 | 亚洲香蕉久久 | av网站黄色 | 在线免费观看视频a | www.欧美在线观看 | 99热中文| 国产又爽又黄免费软件 | 亚洲一区二区三区免费观看 | 亚洲男人天堂电影 | youjizz.com最新 | 国产99页 | 蜜臀aⅴ国产精品久久久国产老师 | 国产精品久久久久久久久久久久久久久久 | 国产成人精品亚洲日本在线观看 | 亚洲日本片| 国产一二三级 | 精品人妻人人做人人爽 | 在线看91| 日韩免费片 | 涩涩的视频在线观看 | 日日噜噜噜噜久久久精品毛片 | 少妇裸体视频 | 黄色影音 | 成人在线免费视频观看 | 亚洲午夜精品久久久 | 欧美男同又粗又长又大 | 久久久久一区二区精码av少妇 | 日本在线看| 色噜 | 亚洲国产日韩欧美 | 我要操婊| av在线播放一区二区三区 | 最近国语视频在线观看免费播放 | 动漫同人高h啪啪爽文 | 中文字幕有码无码人妻av蜜桃 | 国产高清二区 | 亚洲少妇网站 | 91在线中文字幕 | 久久久久国产精品夜夜夜夜夜 | 午夜精品一区二区三区在线播放 | 久成人| 亚洲卡一卡二卡三 | av网站免费在线观看 | 国产精品12区 | 处破痛哭a√18成年片免费 | 武侠古典av | 香蕉在线看 | 少妇人妻精品一区二区三区 | 久草资源在线视频 | 中文字幕色哟哟 | 极度诱惑香港电影完整 | 午夜爱爱网| 国产精品一区二区小说 | 91激情网| 天堂av网站 | 国产激情在线视频 | 色成人综合网 | 亚洲图片欧美色图 | 丝袜老师让我了一夜网站 | av网址在线免费观看 | 中文字幕理论片 | 91视频综合网 | 国产va在线观看 | 欧美激情综合五月色丁香 | 亚洲精品午夜国产va久久成人 | 欧美极品少妇xxxxⅹ裸体艺术 | 在线成人 | 色吧av色av | 久久久久一级片 | 日韩乱码人妻无码中文字幕久久 | 国产一区第一页 | 日本做爰全过程免费看 | 99爱爱 | 国产欧美日韩综合 |