neděle 27. ledna 2013

Individuální projekt (4) - Inverzní kinematická úloha

Cíle úlohy je na základě zadaných GPS souřadnic bodu na mapě a jeho nadmořské výšky určit kloubové souřadnice kamerové platformy tak, aby tento bod byl ve středu zorného pole kamery.

Ze známých GPS souřadnic nosiče a bodu určíme nejprve vzdálenost (po povrchu Země) $l$ a úhel $\alpha$ mezi nimi. Zeměpisnou šířku nosiče budu značit jako $\varphi_1$ a zeměpisnou délku nosiče jako $\lambda_1$. Obdobně pak pro souřadnice bodu na mapě pouze s tím rozdílem, že dolní index bude $2$.

Vzdálenost určíme pomocí tzv. haversine vzorce, který lze nalézt například zde [1]
\begin{align} a &= \sin^2\left( \left(\varphi_2 - \varphi_1\right)/2\right) + \cos\left( \varphi_1\right) \cos\left( \varphi_2\right) \sin^2\left( \left(\lambda_2 - \lambda_1\right)/2\right), \\
l &= 2\mathrm{R}\,\text{atan2}\left( \sqrt{a}, \sqrt{1-a} \right), \end{align} kde $\mathrm{R}$ je poloměr Země v kilometrech.

Úhel určíme podle vztahu (viz [1])
\begin{equation} \alpha = \text{atan2}\left( \sin\left(\Delta\lambda\right) \cos\left(\varphi_2\right), \cos\left(\varphi_1\right)\sin\left(\varphi_2\right) - \sin\left(\varphi_1\right)\cos\left(\varphi_2\right)\cos\left(\Delta\lambda\right)\right), \end{equation} kde $\Delta\lambda = \left(\lambda_2 - \lambda_1\right)$.

Konečně polohový vektor bodu na mapě vůči nosiči v jeho vnější souřadnicové soustavě je \begin{equation} \mathbf{X} = \begin{bmatrix}
l\cos\left(\alpha\right)\\
l\sin\left(\alpha\right)\\
h_1 - h_2
\end{bmatrix}, \end{equation} kde $h_1$ je nadmořská výška nosiče a $h_2$ je nadmořská výška bodu na mapě. Tento vektor transformujeme do vnitřní souřadnicové soustavy nosiče pomocí rotační matice $\mathbf{R}(\mathbf{q})$ z předchozího příspěvku. Tato matice však představuje transformaci z vnitřní souřadnicové soustavy do vnější. Inverzní transformaci získáme její transpozicí. Polohový vektor $\mathbf{X}$ ve vnitřní souřadnicové soustavě tedy určíme následovně \begin{equation} \mathbf{X}' = \mathbf{R}^T\mathbf{X}. \end{equation} Poslední úpravou polohové vektoru je jeho transformace do souřadnicové soustavy samotné kamerové platformy, tedy vlastně pouze posunutí počátku vnitřní souřadnicové soustavy nosiče do bodu, kde mají průsečík obě osy otáčení kamerové platformy. To lze udělat například pomocí transformační matice $\mathbf{T}_2^0(\mathbf{q}_1, \mathbf{q}_2)$ z předchozího příspěvku s nulovými kloubovými souřadnicemi. \begin{equation} \mathbf{X}'' = \left(\mathbf{T}_2^0(\mathbf{q}_1, \mathbf{q}_2)\right)^T\mathbf{X}' \end{equation} Kýžené kloubové souřadnice pak již určíme snadno pomocí následujících vztahů \begin{align} q_1 &= \pi - \text{atan2}(X''_x, X''_y),\\
q_2 &= \pi/2 + \text{atan2}(X''_x, X''_z), \end{align} přičemž ony posuny o zlomky $\pi$ jsou dány orientací inkrementálních enkodérů (viz příspěvek Individuální projekt (2)).

Zdroje

[1] http://www.movable-type.co.uk/scripts/latlong.html

středa 23. ledna 2013

Individuální projekt (3) - Přímá kinematická úloha

Úloha spočívá v určení GPS souřadnic bodu, jenž se nachází ve středu zorného pole kamery inerciálně stabilizované hlavice ze známé polohy a orientace nosiče a známých orientací jednotlivých kloubů platformy z inkrementálních čítačů.

Hlavice

V příspěvku Individuální projekt (2) jsem uvažoval inerciálně stabilizovanou platformu jako otevřený kinematický řetězec a ten popsal Denavit-Hartenbergovou notací. Pro tuto notaci je definována transformační matice ze souřadnicové soustavy kloubu $n$ do $n-1$ následovně (viz [1])
$$ \mathbf{T}_{n}^{n-1} (\theta_n, d_n, a_n, \alpha_n)=
\left[
\begin{array}{cccc}
\cos\theta_n & -\sin\theta_n \cos\alpha_n & \sin\theta_n \sin\alpha_n & a_n \cos\theta_n \\
\sin\theta_n & \cos\theta_n \cos\alpha_n & -\cos\theta_n \sin\alpha_n & a_n \sin\theta_n \\
0 & \sin\alpha_n & \cos\alpha_n & d_n \\
0 & 0 & 0 & 1
\end{array}
\right].
$$ Transformační matice pro celý kinematický řetězec je pouze součinem transformačních matic jednotlivých kloubů.
$$ \mathbf{T}_{2}^{0} (q_1, q_2) = \mathbf{T}_{1}^{0}(q_1) \mathbf{T}_{2}^{1}(q_2)
$$

Nosič

Transformační matice pro přechod z vnitřní souřadnicové soustavy nosiče do vnější souřadnicové soustavy je dána rotační maticí, kterou získáme převodem z quaternionu  $\mathbf{q}=(q_w, q_x, q_y, q_z)$ pomocí následujícího vztahu
$$ \mathbf{R}(\mathbf{q}) = \begin{bmatrix} 1 - 2 q_y^2 - 2 q_z^2 & 2 q_x q_y - 2 q_z q_w & 2 q_x q_z + 2 q_y q_w \\ 2 q_x q_y + 2 q_z q_w & 1 - 2 q_x^2 - 2 q_z^2 & 2 q_y q_z - 2 q_x q_w \\ 2 q_x q_z - 2 q_y q_w & 2 q_y q_z + 2 q_x q_w & 1 - 2 q_x^2 - 2 q_y^2 \end{bmatrix}. $$

Samotný výpočet

Jelikož je osa kamery a dálkoměru totožná s osou $x$ posledního rotačního kloubu, vypadá vektor směřující na místo na Zemi, které je ve středu obrazu kamery, v souřadnicové soustavě tohoto kloubu následovně
$$ \mathbf{X}(d)=
\left[
\begin{array}{c}
X_x\\
X_y\\
X_z\\
1
\end{array}
\right]=
\left[
\begin{array}{c}
d\\
0\\
0\\
1
\end{array}
\right],
$$ kde $d$ je změřená vzdálenost dálkoměrem v kilometrech. Tento vektor transformujeme pomocí výše uvedených matic do vnější souřadnicové soustavy nosiče.
$$ \mathbf{X}' (\mathbf{q}, q_1, q_2, d)= \mathbf{R}(\mathbf{q})\mathbf{T}_2^0(q_1, q_2) \mathbf{X}(d)
$$ Bod na Zemi na nějž ukazuje vektor $\mathbf{X}'$ však chceme vyjádřit v GPS souřadnicích. To provedeme tak, že z vektoru $\mathbf{X}'$ určíme vzdálenost nosiče na Zemi $l$ a úhel $\alpha$ mezi nosičem a bodem ve středu kamery.
\begin{align*}
l &= \sqrt{\mathbf{X}'^2_x + \mathbf{X}'^2_y}\\
\alpha &= \text{atan2}\left(\mathbf{X}'_y, \mathbf{X}'_x\right)
\end{align*}
Konečně, GPS souřadnice bodu ve středu obrazu z kamery spočteme pomocí vztahů, které jsou uvedeny například zde [2].
\begin{align*}
\phi_2 &= \mathrm{asin}( \sin(\phi_1)\cos(\mathrm{l/R}) + \cos(\phi_1)\sin(\mathrm{l/R})\cos(\alpha) ),\\
\lambda_2 &= \lambda_1 + \mathrm{atan2}(\sin(\theta)\sin(l/\mathrm{R})\cos(\phi_1), \cos(l/\mathrm{R})-\sin(\phi_1)\sin(\phi_2) ),
\end{align*}
kde $\phi_1$, $\lambda_1$ jsou zeměpisná šířka, resp délka nosiče, $R$ je poloměr Země v kilometrech a $\phi_2$, $\lambda_2$ jsou zeměpisná šířka, resp délka kýženého bodu na Zemi.

Zdroje

[1] P. Corke. Robotics, Vision and Control: Fundamental Algorithms in MATLAB. Springer, 1st edition, Nov. 2011.
[2] http://www.movable-type.co.uk/scripts/latlong.html