odometry

differential wheeled robotのodometryを表現します。

2つのmotorで走らせる

車輪をmotorで回転させることを考えます。
casterは描いていません。

world座標系とrobot座標系を考えます。
\(xy\)平面を移動することを考えます。

001

robotはworld座標系の下記の位置にいるとします。

002

\[
\begin{pmatrix}
x \\
y
\end{pmatrix}
\]

robotはworld座標系の下記の傾きとします。

\[
\theta
\]

robotの姿勢。

\[
\begin{pmatrix}
x \\
y \\[2.5pt]
\theta
\end{pmatrix}
\]

robotが移動することを考えます。

003

robotが移動して下記となることを考えます。

\[
\begin{pmatrix}
x^{\ \prime} \\
y^{\ \prime} \\[2.5pt]
\theta^{\ \prime}
\end{pmatrix}
\]

左の矢印の先から右の矢印の先に移動することを考えます。

004

robotは円周上を通るとしてrobot中心が\(\phi\)だけ回転することになります。

二等分の線を引いたら直角三角形が2つ出来ます。
拡大しないと図が描きにくいので拡大します。

005

ここでは旋回半径を\(t(turning\ radius)\)と表すことにします。

ここで下記とします。

\[
position_{i}=\begin{pmatrix}
x \\
y
\end{pmatrix}
\]

\[
position_{i+1}=\begin{pmatrix}
x^{\ \prime} \\
y^{\ \prime}
\end{pmatrix}
\]

二点間の距離を考えます。

\[
|position_{i+1}-position_{i}|=t\sin\frac{\phi}{2}+t\sin\frac{\phi}{2}=2t\sin\frac{\phi}{2}
\]

黒い線で示した角度が\(180-90-(90-\frac{\phi}{2})=\frac{\phi}{2}\)です。
赤い線で示した角度が\(\theta+\frac{\phi}{2}\)です。
\(90-\frac{\phi}{2}\)は黄色の線と青の線と黒の線の三角形を考えます。

移動は下記となります。

\[
\begin{align*}
y^{\ \prime}-y &= |position_{i+1}-position_{i}|\sin(\theta+\frac{\phi}{2}) \\
x^{\ \prime}-x &= |position_{i+1}-position_{i}|\cos(\theta+\frac{\phi}{2})
\end{align*}
\]

新しい姿勢の向きは下記です。

\[
\theta^{\ \prime} = \theta+\phi
\]

これで準備完了です。直進は簡単ですので省略します。
あとは\(v_{Left}\)と\(v_{Right}\)の取得です。ロータリーエンコーダーを使ったりして、やりたいことを実現します。

で、ここまできちんと議論してきましたが\(v_{Left}\)と\(v_{Right}\)には誤差がのります。
でも、この議論の順番が良いと思います。

ロータリーエンコーダーが極めて精密だとしても、地面も歪んでるし、タイヤも摩耗します。

直進の時は\(t\)を求める時にゼロ除算となってしまうので分けて考えます。簡単なので省略します。
ロータリーエンコーダーの安いのは分解能が低いので\(v_{Left}\)と\(v_{Right}\)が同じ値となることが多いと思います。

参考

いくつか文献を読みましたが、僕には下記が一番分かり易かったです。
本記事は下記を僕なりに整理し直しただけです。Internetと有用な情報を書いてくれる人はありがたい。

車輪移動ロボット

広告

IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』
さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト




«       »