ロボコンでよく使う独立ステア機構のギア比について

　本記事は[学ロボアドベントカレンダー](https://adventar.org/calendars/7461)の24日目の記事となります。はじめまして、東北大学の[T-semi](https://twitter.com/T_semi_105)というサークルで学ロボに参加している[りょーつ](https://twitter.com/Gomachan_2021)といいます。自分は高専からの編入生で、高専在籍中からずっと機械班でした。最近は人手不足の影響もあり、制御班としても活動しています。
# 目次
[1.はじめに](#1-はじめに)
[2.時間の無い方へ](#2-時間の無い方へ)
[3.独立ステア機構とは](#3-独立ステア機構とは)
[4.式の導出課程](#4-式の導出課程)
[5.タイヤが6輪あるとほんとに速くなるのか](#5-タイヤが6輪あるとほんとに速くなるのか)
[6.おわりに](#6-おわりに)
# 1. はじめに
　最近、学ロボでは足回りに独立ステア機構を使う大学が増えています。独立ステア機構を使ったロボットはとっても速く動けます。しかし従来のオムニやメカナムなどの特殊輪を用いた移動機構と比較して、独立ステア機構は自由度や部品点数が多く設計難易度が高い点が欠点です。そこでこの記事では、Excelを用いて駆動輪の最適なギア比を計算する手法を提案し、独立ステア機構を設計している設計者の負担を少しでも軽減したいと考えています。
　後半は特に面白みのない式がたくさん出てくるだけなので、手っ取り早く結果を知りたい方は「[2.時間の無い方へ](#2-時間の無い方へ)」だけ読んでもらえるといいのかなと思います。
# 2. 時間の無い方へ
　この記事で扱う内容は計算がとても面倒です。そのため式を追わなくてもいいように、導出した式をまとめたExcelファイルを作りました。時間が無い人はこのExcelファイルだけダウンロードしていい感じに使ってもらえればいいと思います。
　Excelファイルを開いたら黄色で塗られたセルにロボットのパラメータやモータの特性値などを入力してください。きっとそれっぽいギア比が出力されると思います。エラーが出力された場合は駆動輪の加速が不十分な場合が考えられます。$u$の値を少し小さくしてみるといいかもしれません。
[Excelファイルをダウンロード](https://drive.google.com/u/4/uc?id=1LQ7seDlTtmQMkZD970l1vujMgOgKPVBV&export=download)
# 3. 独立ステア機構とは
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031572/14f5b057-333b-c18f-192c-97985b8b042c.png)
　最近学ロボ界隈で流行っている足回りの1つとして上図に示す独立ステア機構が挙げられます。独立ステア機構は複数の駆動輪をそれぞれ独立に操舵できる全方位移動機構です。オムニやメカナムなどの特殊輪よりもグリップのある駆動輪が使えることや、モータのトルクを移動したい方向に直接伝えることができるため、とっても素早い移動ができます。しかしアクチュエータ数の増加に伴い、ロボット重量の増加や過剰な自由度による制御の複雑化が欠点です。
# 4. 式の導出課程
　駆動輪の最適なギア比$k_{G_{good}}$を「ある直線距離$x_{ref}$移動するのに要する時間$T$が最小となるようなギア比」と定義して計算します。ここである距離$x_{ref}$というのは各チームの戦略によって変化するパラメータです。例えばスタートゾーンからリングゾーンまでの距離を$x_{ref}$とするのもアリですし、競技フィールドの端から端までの距離を$x_{ref}$とするのもアリです。
　この問題の解答方針としては所要時間$T$をギア比$k_G$の関数として表現し、その極値を求めるという手順で最適なギア比$k_{G_{good}}$を求めます。では計算を始めます。計算には以下のパラメータを使用します。

$u$：駆動系の電源電圧 [V]\
$R$：モータの巻線抵抗 [Ω]\
$\omega$：モータ出力軸の角速度 [rad/s]\
$k_e$：モータの逆起電力定数
$M$：ロボット質量 [kg]
$n$：駆動輪の数
$r$：駆動輪半径 [m]
$\tau$：駆動輪のトルク [Nm]
$v$：ロボットの移動速度 [m/s]
$\alpha$：ギアの伝達効率
$k_{\tau}$：モータのトルク定数
$k_G$：ギア比
$i$：電流値 [A]
$t$：時間 [s]
$g$：重力加速度 [m/$s^2$]
$\mu$：摩擦係数
$v_{\infty}$：ロボットの理論上の最高移動速度 [m/s]
$v_{max}$：ロボットの見かけの最高移動速度 [m/s]
$\eta$：見かけの最高移動速度と理論上の最高移動速度との比
$T$：移動時間 [s]
$x_{ref}$：目標移動距離 [m]
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031572/43f48d1a-07f6-2e77-22cf-f518a4669927.png)
　この記事では簡単のためにモータやロボットのモデルをインダクタンスや粘性項のない理想的な1次遅れ系に近似して計算をします。まずモータの動作とロボットの動作の関係を求めます。上図に示したモータの等価回路より入力電圧$u$と電流値$i$、角速度$\omega$の関係はモータの巻線抵抗$R$と逆起電力定数$k_e$を用いて
$$
\begin{equation}
u = Ri + k_e \omega \tag{1}
\end{equation}
$$
と表されます。またロボットはトルク$\tau$の駆動輪$n$輪によって加減速するため、駆動輪にはたらく摩擦抵抗を無視した運動方程式は
$$
\begin{equation}
M \dfrac{dv}{dt} = \dfrac{n \tau}{r} \tag{2}
\end{equation}
$$
となります。なお駆動輪の出力トルク$\tau$は電流$i$に比例するため、ギア比$k_G$を考慮して
$$
\begin{equation}
\tau = \alpha k_G k_{\tau}i \tag{3}
\end{equation}
$$
になります。またロボットの移動速度$v$とモータの出力軸の角速度$\omega$の間には、地面と駆動輪の間の滑りを無視すると、駆動輪半径$r$を用いて
$$
\begin{equation}
v = \dfrac{r \omega}{k_G} \tag{4}
\end{equation}
$$
の関係がなりたちます。モータの回路方程式とロボットの運動方程式が得られたため、駆動系電圧$u$とロボットの移動速度$v$の関係を求めます。まず(4)式を変形して$\omega$について解くと以下の式が得られます。
$$
\begin{equation}
\omega = \dfrac{k_G}{r}v \tag{5}
\end{equation}
$$
次に(2)式を変形して$\tau$について解くと以下の式が得られます。
$$
\begin{equation}
\tau = \dfrac{Mr}{n}\dfrac{dv}{dt} \tag{6}
\end{equation}
$$
(6)式を(3)式に代入して$\tau$を消去すると以下の式が得られます。
$$
\begin{equation}
i = \dfrac{Mr}{\alpha k_G k_{\tau} n}\dfrac{dv}{dt} \tag{7}
\end{equation}
$$
最後に(5)、(7)式を(1)式に代入して整理すると、以下に示す駆動系電圧$u$とロボットの移動速度$v$の関係を表す微分方程式が得られます。
$$
\begin{equation}
\dfrac{dv}{dt} + \dfrac{\alpha k_e k_{\tau} n {k_G}^2}{MR {r}^2} v = \dfrac{\alpha k_{\tau} n k_G}{MRr} u \tag{8}
\end{equation}
$$
ここでギア比以外のパラメータに依存する定数$A$と$B$、ギア比に依存する係数$a$と$b$を
$$
\begin{equation}
a = \dfrac{\alpha k_e k_{\tau} n {k_G}^2}{MR {r}^2} = A{k_G}^2 \tag{9}
\end{equation}
$$$$
\begin{equation}
b = \dfrac{\alpha k_{\tau} n k_G}{MRr} = Bk_G \tag{10}
\end{equation}
$$
のように定義して(8)の微分方程式に代入すると
$$
\begin{equation}
\dfrac{dv}{dt} + av = bu \tag{11}
\end{equation}
$$
のように簡単化されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031572/9c0292ed-415a-c99e-3430-d13695b5fa98.png)
　次にロボットが目標移動距離$x_{ref}$まで移動するのに必要な時間を求めます。移動開始を原点とした時刻$t$とロボット移動速度$v$の関係は上図のとおりになるとします。
まずロボットの加速について考えます。ロボットの加速は駆動輪が地面から受ける転がり摩擦力によって行われます。したがって低速域におけるロボットの加速度は重力加速度$g$と摩擦係数$\mu$の積に制限されないといけないため、ロボットの最大加速度$a_{max}$について以下の制約が生じます。
$$
\begin{equation}
a_{max} = g \mu \tag{12}
\end{equation}
$$
一方で駆動輪が出力できる加速度の大きさについて考えます。まず(11)の微分方程式を初期条件$v(0) = 0$において解くと
$$
\begin{equation}
v(t) = \dfrac{bu}{a}\bigl( 1-e^{-at} \bigr) \tag{13}
\end{equation}
$$
が得られます。(13)式を1回微分すると
$$
\begin{equation}
\dfrac{dv}{dt} = bue^{-at} \tag{14}
\end{equation}
$$
が得られます。駆動輪が出力できる加速度$dv/dt$と摩擦による加速度は時刻${t_1}'$で一致するため
$$
\begin{equation}
bue^{-a{t_1}'} = g \mu \tag{15}
\end{equation}
$$
が成り立ち、(15)式を時刻${t_1}'$について解くと
$$
\begin{equation}
{t_1}' = \dfrac{1}{a} \ln{\biggl(\dfrac{bu}{g \mu}\biggr)} \tag{16}
\end{equation}
$$
が得られます。ところでロボットの最高速度$v_{\infty}$は(13)式の解の極限値として与えられるため
$$
\begin{equation}
v_\infty = \lim_{t \to \infty} v(t) = \dfrac{bu}{a} = \dfrac{ru}{k_e k_G} \tag{17}
\end{equation}
$$
です。ロボットが最高速度$v_\infty$に到達する時刻が後の計算に必要になりますが、無限大の時間は扱いづらいので最高速度$v_\infty$の$\eta$倍を見かけの最高速度$v_{max}$として使用します。見かけの最高速度$v_{max}$は以下に示すとおり、定数$C$とギア比$k_G$を用いて表せます。
$$
\begin{equation}
v_{max} = \eta v_\infty = \dfrac{\eta ru}{k_e k_G} = \dfrac{C}{k_G} \tag{18}
\end{equation}
$$
では各課程に必要となる時刻を求めます。まず$t_1$から求めます。時刻$t_1$において速度が連続的である必要があるため
$$
\begin{equation}
g \mu t_1 = v({t_1}') \tag{19}
\end{equation}
$$
が成り立ちます。(19)式に(13)、(16)式を代入して$t_1$について解くと
$$
\begin{equation}
t_1 = \dfrac{1}{g \mu a}\bigl( bu - g \mu \bigl) \tag{20}
\end{equation}
$$
が得られます。次にロボットの移動速度$v$が見かけの最高速度$v_{max}$に到達する時刻${t_2}'$を求めます。時刻${t_2}'$においても速度が連続的である必要があるので
$$
\begin{equation}
v({t_2}') = v_{max} \tag{21}
\end{equation}
$$
が成り立ちます。(21)式に(13)式を代入し、${t_2}'$について解くと
$$
\begin{equation}
{t_2}' = \dfrac{1}{a}\ln{\biggl(\dfrac{bu}{bu - av_{max}}\biggr)} \tag{22}
\end{equation}
$$
が得られます。図の関係から、摩擦による加速から駆動輪による加速に切り替わった後の加速時間$\Delta t_{12}$は(16)式と(22)式によって
$$
\begin{equation}
\Delta t_{12} ={t_2}'-{t_1}'= \dfrac{1}{a}\ln{\biggl(\dfrac{g \mu}{bu - av_{max}}\biggr)} \tag{23}
\end{equation}
$$
のように求まります。またロボットの減速に必要な時間$\Delta t_{34}$は1次遅れ系の対称性から${t_2}'$になります。したがって
$$
\begin{equation}
\Delta t_{34} = {t_2}' = \dfrac{1}{a}\ln{\biggl(\dfrac{bu}{bu - av_{max}}\biggr)} \tag{24}
\end{equation}
$$
が得られます。以上のことから加速および減速におけるロボットの移動速度と所要時間が分かるため、これらを積分することで加減速時にロボットが移動する距離を求めることができます。まず摩擦による加速でロボットが移動する距離$x_{01}$は等加速度運動であるため
$$
\begin{equation}
x_{01} = \dfrac{1}{2}g \mu {t_1}^2 \tag{25}
\end{equation}
$$
により求まります。次に駆動輪による加速でロボットが移動する距離$x_{12}$は(13)式を時刻${t_1}'$から${t_2}'$の間で積分することで
$$
\begin{equation}
x_{12} = \int_{{t_1}'}^{{t_2}'}v(t)dt = \dfrac{bu}{a}\bigl(({t_2}'+\dfrac{1}{a}e^{-a{t_2}'})-({t_1}'+\dfrac{1}{a}e^{-a{t_1}'}) \bigr) \tag{26}
\end{equation}
$$
のように求まります。また減速中に移動する距離$x_{34}$は1次遅れ系の対称性から以下の計算によって得られます。
$$
\begin{align}
x_{34} = \int_{0}^{{t_2}'}\bigl(v_{max} - v(t)\bigr) dt \
&= v_{max}{t_2}' - \dfrac{bu}{a}\bigl({t_2}'+\dfrac{1}{a}e^{-a{t_2}'} \bigr) +\dfrac{bu}{a^2} \tag{27}
\end{align}
$$
ロボットがみかけの最高速度$v_{max}$で移動する距離を$x_{23}$とすると、目標移動距離$x_{ref}$は
$$
\begin{align}
x_{ref} = x_{01} + x_{12} + x_{23} + x_{34}\tag{28}
\end{align}
$$
により計算されます。未知量$x_{23}$について(25)～(27)式を用いて(28)式を整理すると
$$
\begin{align}
x_{23} = x_{ref} - \bigl(x_{01} + x_{12} + x_{34}\bigr) 
&= x_{ref} + \dfrac{bu}{a}\bigl({t_1}'+\dfrac{1}{a}e^{-a{t_1}'} \bigr) -\dfrac{1}{2}g \mu {t_1}^2 - v_{max}{t_2}' -\dfrac{bu}{a^2} \tag{29}
\end{align}
$$
が得られます。ロボットのみかけの最高速度$v_{max}$とその移動距離$x_{23}$が定まったため、移動時間$t_{23}$が
$$
\begin{align}
\Delta t_{23} = \dfrac{x_{23}}{v_{max}}\tag{30}
\end{align}
$$
により求まります。したがって、停止しているロボットが目標移動量$x_{ref}$移動するために必要な時間$T$は
$$
\begin{align}
T = t_1 + \Delta t_{12} + \Delta t_{23} + \Delta t_{34} \tag{31}
\end{align}
$$
です。ここで$T$をギア比の関数として(31)式に(20)、(23)、(24)、(30)式を代入して整理すると
$$
\begin{align}
T(k_G) = \dfrac{Bu}{g \mu A k_G}-
\dfrac{1}{A{k_G}^2}-
\dfrac{1}{A{k_G}^2}\ln{\biggl( 1-\dfrac{AC}{Bu} \biggr)}-
\dfrac{1}{A{k_G}^2}\ln{\biggl( \dfrac{Buk_G}{g \mu} \biggr)}+
\dfrac{1}{C}
\biggl(
x_{ref}k_G + \dfrac{Bu}{A^2{k_G}^2}\ln{\biggl( \dfrac{Buk_G}{g \mu} \biggr)}+
\dfrac{g \mu}{A^2{k_G}^3}-
\dfrac{1}{2}g\mu {\biggl(\dfrac{Bu}{g\mu A k_G} - \dfrac{1}{A{k_G}^2} \biggr)}^2-
\dfrac{Bu}{A^2{k_G}^2}
\biggr) \tag{32}
\end{align}
$$
が得られます。最適なギア比$k_{G_{best}}$は移動時間$T$を最小にするように与えられるはずなので(32)式の極小値を探します。とりあえずギア比$k_G$で$T$を1回微分すると
$$
\begin{align}
\dfrac{dT}{dk_G} = -\dfrac{Bu}{g\mu A {k_G}^2}+
\dfrac{2}{A{k_G}^3}+
\dfrac{2}{A{k_G}^3}\ln{\biggl(1-\dfrac{AC}{Bu} \biggr)}+
\dfrac{2}{A{k_G}^3}\ln{\biggl(\dfrac{Buk_G}{g\mu} \biggr)}-
\dfrac{1}{A{k_G}^3}+
\dfrac{1}{C}\biggl(
x_{ref}-
\dfrac{2Bu}{A^2{k_G}^3}\ln{\biggl(\dfrac{Buk_G}{g\mu} \biggr)}+
\dfrac{Bu}{A^2{k_G}^3}-
\dfrac{3g\mu}{A^2{k_G}^4}
-g\mu \biggl(\dfrac{Bu}{g\mu Ak_G} - \dfrac{1}{A{k_G}^2} \biggr)
\biggl(\dfrac{2}{A{k_G}^3} - \dfrac{Bu}{g\mu A{k_G}^2} \biggr)+
\dfrac{2Bu}{A^2{k_G}^3}
\biggr)
\tag{33}
\end{align}
$$
が得られます。(33)式の値が0になるギア比を求めると良いですが、計算が非常に複雑であり、解析的に解けるか分かりません。そこで(33)式の絶対値が最小となるギア比$k_{G_{best}}$を最適なギア比とします。したがって最適なギア比$k_{G_{best}}$は
$$
\begin{align}
k_{G_{best}} = min \biggl(\left|\dfrac{dT}{dk_G} \right| \biggr)
\tag{34}
\end{align}
$$
によって与えられます。(34)式の計算はなにかしらのツールを用いて行います。自分はExcelを使いました。
# 5. タイヤが6輪あるとほんとに速くなるのか
　ABUロボコン2018で、ベトナムの大学が6輪ステアを用いたロボットを用いてベスト4に輝きました。その大学のメンバーは「なぜタイヤが6輪あるのですか？」というインタビューに対して「タイヤが6個あるとスピードが出るんだ」と回答し、ロボコン界隈でバズったそうです。本章では(32)式を用いて、最適なギア比$k_{G_{good}}$を用いたタイヤが4輪のロボットと6輪のロボットを比較し、本当に速くなるのか検証します。
　検証の前にそれぞれのロボットのパラメータを決定します。パラメータは[学生ロボコン2018のルールブック](https://official-robocon.com/history/gakusei/wp-content/uploads/rulebook_2018_jpn_1128.pdf) を参考に決定します。まず4輪の場合について検証します。ABUロボコン2018のルールブックからロボット1台あたりの重量制限が25kgであるため、計算に用いる質量$M$を20kgとします。またルールブックで規定されている最大電圧が24 Vなので駆動系電圧$u$は20 Vとします。さらに駆動輪に使用するモータはマブチモータから無料で頂けるRZ-735VA-9517とします。タイヤ半径$r$は目測ですが75 mmとします。ギアの伝達効率$\alpha$は0.85、地面と駆動輪の間の摩擦係数$\mu$を0.5、$\eta = 0.95$とします。さらにロボットの直線移動距離$x_{ref}$は8 mとします。まとめると

$u = 20 V$
$M = 20 kg$
$r = 0.075 m$
$\eta = 0.95$
$n = 4$
$\alpha = 0.85$
$\mu = 0.5$
$x_{ref} = 8 m$

です。この場合に(34)式と(32)式を用いて計算すると4輪ロボットの場合の移動にかかる時間$T_4$は$T_4 = 2.11$秒だと分かりました。
　次に6輪の場合について検証します。基本的なパラメータは4輪の場合と同じですが、駆動輪が2輪増加したことによる質量変化を考慮します。独立ステア機構1つあたりの質量はだいたい1.5 kgくらいなのでロボット質量$M$のみ23 kgとします。6輪の場合のパラメータをまとめると

$u = 24 V$
$M = 23 kg$
$r = 0.075 m$
$\eta = 0.95$
$n = 6$
$\alpha = 0.85$
$\mu = 0.5$
$x_{ref} = 8 m$

となります。この場合に(34)式と(32)式を用いて計算すると6輪ロボットの場合の移動にかかる時間$T_6$は$T_6 = 2.07$秒だと分かりました。
　これらの結果から、4輪よりも6輪のほうが微妙に速くなることが分かりましたが、0.04 秒しか変わらないので理論上は6輪にするメリットがあまりないように感じますね。ただし、あくまでも理論上ではありますがこの0.04 秒を4輪のロボットで埋めようとすると約4.5 kgのダイエットが必要になるため、0.1 秒以下の争いをするのであれば駆動輪を増やすのは有効かもしれません。
# 6. おわりに
　人生ではじめて記事を書きましたが、なかなかおもしろかったです。少しでも本記事の内容が全国のロボコニストの役に立てばなあと思います。