魔改造の夜 第10回「キックスケーター25m綱渡り」感想
NHKで放送された魔改造の夜 第10回「キックスケーター25m綱渡り」[1]では ジャイロによるキックスケーターの姿勢の安定化が試みられていた. ジャイロを搭載したキックスケーターが転倒しない条件について簡単に解説する. また,番組の感想を述べる.
ジャイロ倒立振子のモデル
ジャイロを搭載したキックスケーターの並進の運動を無視し姿勢制御の部分のみに着目すると倒立振子とみなせる. キックスケーターが直立しているときに車輪が接地する位置に沿って\(x_0\)軸をとり, 左方向に\(y_0\)軸,鉛直上向きに\(z_0\)軸をとって慣性系を定める. キックスケーター本体は\(x_0\)軸周りに自由に回転でき,傾きの大きさを\(\theta_1\)とする. キックスケーター上には1軸のジンバルが搭載されており,ジンバル軸の高さは(直立時に)地面から\(l_1\)とする. ジンバルの回転軸はキックスケーターの左右方向を向いており,ジンバルの初期位置からの回転角を\(\theta_2\)で表す. フライホイールはジンバルで支持されていて,鉛直な軸周りに回転する. フライホイールの重心はジンバル軸から\(l_2\)だけ高い位置にオフセットされているものとする. フライホイールのジンバルに対する回転角を\(\theta_3\)で表す.
慣性要素はフライホイールのみを考え,質量を\(m\)とする. 慣性テンソルは $$ {}^{3}{\boldsymbol{J}}= \begin{bmatrix} J_r & 0 & 0 \\ 0 & J_r & 0 \\ 0 & 0 & J_p \end{bmatrix} $$ とする. ここで,左上付きの\(3\)はフライホイールに固定された座標系での表現であることを表す. テンソルを対角行列としているのはフライホイールが回転軸(\(z_3\)軸)のまわりに対称に作られる前提の反映である.
ジャイロ倒立振子の運動方程式
がんばると次の方程式が得られる(付録参照). $$ \begin{cases} &\begin{split} 0 ={}& \left(J_r\cos^2\theta_2 + J_p\sin^2\theta_2 + m\left(l_1+l_2\cos\theta_2\right)^2\right)\ddot{\theta}_1 \\ & +2\left(\left(J_p-J_r\right)\cos\theta_2 - m\left(l_1+l_2\cos\theta_2\right)l_2\right) \sin\theta_2\dot{\theta}_1\dot{\theta}_2 \\ & +J_p\cos\theta_2\dot{\theta}_2\dot{\theta}_3 + J_p\sin\theta_2\ddot{\theta}_3 -mg\left(l_1+l_2\cos\theta_2\right)\sin\theta_1 \end{split} \\ &\begin{split} 0 ={}& \left(J_r+ml_2^2\right)\ddot{\theta}_2 \\ &- \left(\left(J_p-J_r\right)\cos\theta_2 - ml_2\left(l_1+l_2\cos\theta_2\right)\right) \sin\theta_2\dot{\theta}_1^2 \\ &- J_p\cos\theta_2\dot{\theta}_1\dot{\theta}_3 - mgl_2\cos\theta_1\sin\theta_2 \end{split} \end{cases} $$
フライホイールは一定の速度での回転を維持するので\(\ddot{\theta}_3=0\)とする. 平衡状態の近くに注目して \(\theta_1, \theta_2, \dot{\theta}_1, \dot{\theta}_2\)は十分に小さいものとして2次以上の項は無視すると, 次の簡略化した式が得られる. $$ \begin{cases} \ddot{\theta}_1 = -\frac{J_p\dot{\theta}_3}{J_r+m\left(l_1+l_2\right)^2}\dot{\theta}_2 +\frac{mg\left(l_1+l_2\right)}{J_r+m\left(l_1+l_2\right)^2}\theta_1 \\ \ddot{\theta}_2 = \frac{J_p\dot{\theta}_3}{J_r+ml_2^2}\dot{\theta}_1 +\frac{mgl_2}{J_r+ml_2^2}\theta_2 \end{cases} $$ 以下では表記を簡単にするために $$ \begin{split} & h_1 = \frac{J_p\dot{\theta}_3}{J_r+m\left(l_1+l_2\right)^2},\quad & k_1 = \frac{mg\left(l_1+l_2\right)}{J_r+m\left(l_1+l_2\right)^2},\quad \\ & h_2 = \frac{J_p\dot{\theta}_3}{J_r+ml_2^2},\quad & k_2 = \frac{mgl_2}{J_r+ml_2^2} \end{split} $$ とする.
状態方程式の形(\(\dot{\boldsymbol{x}}=\boldsymbol{Ax}\))に整理すると $$ \frac{d}{dt}\begin{bmatrix} \theta_1 \\ \theta_2 \\ \dot{\theta}_1 \\ \dot{\theta}_2 \end{bmatrix} = \begin{bmatrix} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ k_1 & 0 & 0 & -h_1 \\ 0 & k_2 & h_2 & 0 \end{bmatrix} \begin{bmatrix} \theta_1 \\ \theta_2 \\ \dot{\theta}_1 \\ \dot{\theta}_2 \end{bmatrix} $$ となる.
ジャイロ倒立振子の安定性
行列\(\boldsymbol{A}\)の固有値を求める. $$ |\boldsymbol{A}-\lambda\boldsymbol{I}| = \lambda^4 + \left(h_1h_2-k_1-k_2\right)\lambda^2 + k_1k_2 $$ なので,以下では\(a_2 = h_1h_2-k_1-k_2, a_0 = k_1k_2\)とする.
固有値は\(|\boldsymbol{A}-\lambda\boldsymbol{I}|=0\)から $$ \begin{cases} \frac{-\sqrt{2\sqrt{a_0}-a_2}\pm\sqrt{-2\sqrt{a_0}-a_2}}{2}, \frac{ \sqrt{2\sqrt{a_0}-a_2}\pm\sqrt{-2\sqrt{a_0}-a_2}}{2} &(D = a_2^2 - 4a_0\leq 0) \\ \pm\sqrt{-\frac{a_2}{2}-\frac{\sqrt{D}}{2}}, \pm\sqrt{-\frac{a_2}{2}+\frac{\sqrt{D}}{2}} &(D = a_2^2 - 4a_0\geq 0) \end{cases} $$ である.
判別式\(D = a_2^2 - 4a_0\leq 0\)のとき (このとき\(a_0\geq 0\)で\(2\sqrt{a_0}\geq|a_2|\)である) 固有値\(\frac{ \sqrt{2\sqrt{a_0}-a_2}\pm\sqrt{-2\sqrt{a_0}-a_2}}{2}\)は 前の根号は正の実数,後ろの根号は虚数である. 固有値の実数部分が正だから\(D \leq 0\)のとき発散する.
判別式\(D = a_2^2 - 4a_0\geq 0\)のとき発散しないためには根号の中身が負である必要がある. \(D\geq 0\)だから\(-\frac{a_2}{2}+\frac{\sqrt{D}}{2}\leq 0\)だけ考えればよく, これを整理すると\(a_0\geq 0\)かつ\(a_2\geq 0\)が満たすべき条件だとわかる. まず,\(a_0\geq 0\)について確認する. $$ a_0 = \frac{mg\left(l_1+l_2\right)}{J_r+m\left(l_1+l_2\right)^2} \cdot\frac{mgl_2}{J_r+ml_2^2} \geq 0 $$ であるが,\(g\)は重力加速度であり,\(m, J_r\)は慣性プロパティで正の数である. この不等式は地面とジンバル軸,ジンバル軸とフライホイールの間の距離である\(l_1, l_2\)についての条件を与える. 機械的にはフライホイールが地面にめり込まない\(l_1+l_2\geq 0\)の範囲であれば\(l_2\leq 0\)となることも考えられるが, 発散しない系とするためには $$ l_2 \geq 0 $$ とする必要がある. 次に\(a_2\geq 0\)について確認する. $$ a_2 = \frac{J_p^2\dot{\theta}_3^2 -mg\left(l_1+l_2\right)\left(J_r+ml_2^2\right) -mgl_2\left(J_r+m\left(l_1+l_2\right)^2\right)} {\left(J_r+m\left(l_1+l_2\right)^2\right)\left(J_r+ml_2^2\right)} \geq 0 $$ であるが,分母は正なので分子の符号だけ考えればよく,これを整理すると $$ \left(J_p\dot{\theta}_3\right)^2 \geq mg\left(l_1+2l_2\right)\left(J_r + ml_2\left(l_1+l_2\right)\right) $$ が得られる.
これまでの議論から,\(\boldsymbol{x}\)が発散せず倒立振子が倒れないためには
- フライホイールをジンバル軸よりも高い位置に取り付ける
- フライホイールに十分な角運動量を持たせる
の2点を満たさなければならないことがわかる. このモデルは\(l_1=0\)とすると,その場にとどまるように拘束された独楽の運動とも解釈でき,振れまわりの運動をすることを想像できるだろう. 番組の中ではフライホイールをジンバル軸よりも高い位置に取り付けたPナソニックのキックスケーター[2]が長時間この運動をし続けることが紹介されていた. このキックスケーターの運動をChoreonoidを用いて簡単にシミュレーションした結果を示す. 使用したファイルはgithubに置いてある[3]ので,別の条件に興味がある場合はぜひ活用してほしい.
フライホイールを定速で回したら吹き飛ばなくなった.起動の反動で向きが変わっちゃうことを除けばだいぶ良さそう.
— Actat🍃 (@Actat85) August 22, 2024
(初期状態からジャイロを起動しておけたら嬉しい.) pic.twitter.com/gl0iVaSFOA
念のために断っておくと,上記の2条件を満たしても固有値の実部はゼロにしかならないので時間がたっても収束はしない. きちんと収束させたい場合,ジンバル軸にアクチュエータをつけてフィードバック制御すると良い. このようにジンバルを能動的に駆動してジャイロトルクを発生させる手法はコントロールモーメントジャイロ(CMG)として古くから知られており, 人工衛星などで活用されている. 今回考えたモデルを通常のCMGによる姿勢制御と比較すると,ジンバルをモータで駆動する代わりに重力によって駆動したと見ることができて, 重心をジンバル軸よりも上に持っていく必要があることがジンバルの傾きをより大きくする方向にアクチュエータ入力が必要なことに対応する.
また,即座に転倒しないという意味では\(l_2=0\)でも構わない. 実際,番組中ではPナソニック以外のキックスケーターはこのような構成だった. ただし,この場合は固有値にゼロを持つようになって振れまわりの運動はしなくなる. 実機製作の上では,重心の位置が少しでも下に行くと不安定になってしまう点に注意が必要である.
魔改造の夜 第10回「キックスケーター25m綱渡り」の感想
魔改造の夜はちゃんと追いかけていなかったが,ジャイロ回と聞いたので視聴した. 視聴時点で既にジャイロをテーマにした研究活動を5年くらい経験していたし 番組中で紹介されていたジャイロモノレールについても(本[4]を読んだことはないがホームページ[5]で)概要は知っていた. そのため,キックスケーターを立たせておくためにジャイロを使う方法は概ね理解した状態での視聴だった. 答えを知っているから参加者が答えに到達できるかやどのように到達するかに目が行った.
番組中,ここで紹介した解に到達して長時間の転倒防止を実現したのはPナソニックだけだった. 番組中での紹介では,試作によって長時間の転倒防止が難しいことを発見し,理論的な計算によって条件を導き出し,実験で検証するという手順を踏んでいた. うまくいった開発を後から振り返ればそうなるのは当然という面もあるが,王道中の王道の経路でありお手本のような工学のストーリーだった. (番組中の理論的な解説は様子がおかしかったが,ちらっと映っていたノートはシステムのふるまいの調査をしているように見えたので,たぶんNHKが悪いのだろうと思った.)
Oスズはジャイロモノレールの本[4]を読んでいることが番組で紹介されていた. 綱渡りの綱はピンと張られているわけではないので,坂を下りて登ることになってキックスケーター全体がピッチ方向に回転させられ,これがジャイロによる姿勢制御システムへの外乱となる課題がある. 番組では,この本からジャイロの自転軸の向きをキックスケーターの左右方向にするアイデアを得て改善したことが紹介されていた. 解決すべき課題に対して有用な文献を発見して自分の実装に反映するのも,よくあるパターンである. ただ(自分は本を確認していないので何とも言えないものの)その本を読んだらジンバル軸へのフィードバックが大事だということも書いてあるのではないかと思った.
T工大は\(l_2=0\)にしているわりにアクチュエータもついてなさそうだった記憶があるのだが,具体的なエピソードが記憶にない. 放送をみてから一年くらい経ってからこの文章を書いているので上記の番組内容ももしかしたら間違っているかもしれない.
全チーム合計で何人が参加したのかわからないが,その中に一人も答えを知っている人がいなかったことは残念だった. 「なんか回ってると倒れないらしい」で理解が止まっていることが多すぎるので
- ジンバルをつけて歳差運動できるようにしないと意味がない
- ジンバルは不安定に支持しないと姿勢は安定にならない
くらいのことは聞きかじっておいて必要なときに思い出してもらえるとうれしい. ここまで読んだ人には,ぜひ, 独楽って確かに支持点より重心が高いなあとか, 静的に安定な起きあがり独楽は回すとひっくり返るなあ といった経験的な内容と結びつけて頭の片隅に置いておいていただきたい.
参考文献
- 第10回「キックスケーター25m綱渡り」 - 魔改造の夜 - NHK https://www.nhk.jp/p/ts/6LQ2ZM4Z3Q/episode/te/VR1G2K3NVK/
- 第二の夜「キックスケーター綱渡り」 | 魔改造の夜プロジェクト特設サイト | Panasonic https://tech.panasonic.com/jp/robot/makaizo/kickskater/
- Actat/kickskater https://github.com/Actat/kickskater
- 森博嗣 ``ジャイロモノレール'' 幻冬舎 2018. https://www.gentosha.jp/store/ebook/detail/8178
- 浮遊工作室(機関車製作部) https://www.ne.jp/asahi/beat/non/loco/gyro/gyro1.html
付録 運動方程式の導出
慣性系を0系,キックスケーター本体に固定された座標系を1系,ジンバルに固定された座標系を2系,フライホイールに固定された座標系を3系とする. それぞれの座標系の間の関係は $$ \begin{align} {}^{0}\boldsymbol{T}_{1} ={}& \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos\theta_1 & -\sin\theta_1 & 0 \\ 0 & \sin\theta_1 & \cos\theta_1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \\ {}^{1}\boldsymbol{T}_{2} ={}& \begin{bmatrix} \cos\theta_2 & 0 & \sin\theta_2 & 0 \\ 0 & 1 & 0 & 0 \\ -\sin\theta_2 & 0 & \cos\theta_2 & l_1 \\ 0 & 0 & 0 & 1 \end{bmatrix} \\ {}^{2}\boldsymbol{T}_{3} =&{} \begin{bmatrix} \cos\theta_3 & -\sin\theta_3 & 0 & 0 \\ \sin\theta_3 & \cos\theta_3 & 0 & 0 \\ 0 & 0 & 1 & l_2 \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{align} $$
である.
フライホイールの位置は\({}^3\boldsymbol{c} = \begin{bmatrix}0 & 0 & 0 & 1\end{bmatrix}^T\)であり,慣性系で表すと $$ {}^{0}\boldsymbol{T}_{1} {}^{1}\boldsymbol{T}_{2} {}^{2}\boldsymbol{T}_{3} {}^3\boldsymbol{c} = \begin{bmatrix} l_2\sin\theta_2 \\ -l_2\cos\theta_2\sin\theta_1 - l_1\sin\theta_1 \\ l_2\cos\theta_2\cos\theta_1 + l_1\cos\theta_1 \\ 1 \end{bmatrix} $$ になる.
重力によるポテンシャルは $$ U = mg\left(l_2\cos\theta_2\cos\theta_1 + l_1\cos\theta_1\right) $$ である.
重心の慣性系での速度は時間微分することで得られる. $$ {}^0\dot{\boldsymbol{c}} = \begin{bmatrix} l_2\cos\theta_2 \dot{\theta}_2 \\ \left(l_2\sin\theta_2\sin\theta_1\right)\dot{\theta}_2 - \left(l_2\cos\theta_2+l_1\right)\cos\theta_1 \dot{\theta}_1 \\ -\left(l_2\cos\theta_1\sin\theta_2\right)\dot{\theta}_2 -\left(l_2\cos\theta_2+l_1\right)\sin\theta_1 \dot{\theta}_1 \end{bmatrix} $$ これを用いると並進の運動エネルギは $$ \frac{1}{2} m {}^0\dot{\boldsymbol{c}} \cdot {}^0\dot{\boldsymbol{c}} = \frac{1}{2} m l_2^2 \dot{\theta}_2^2 + \frac{1}{2} m \left(l_2 \cos\theta_2 + l_1\right)^2 \dot{\theta}_1^2 $$ と得られる.
フライホイールの角速度はフライホイールの座標系から見ると $$ {}^3\boldsymbol{\omega} = \dot{\theta}_1 {}^3\boldsymbol{e}_{x_1} + \dot{\theta}_2 {}^3\boldsymbol{e}_{y_2} + \dot{\theta}_3 {}^3\boldsymbol{e}_{z_3} = \begin{bmatrix} \dot{\theta}_1\cos\theta_2\cos\theta_3+\dot{\theta}_2\sin\theta_3 \\ -\dot{\theta}_1\cos\theta_2\sin\theta_3+\dot{\theta}_2\cos\theta_3 \\ \dot{\theta}_1\sin\theta_2+\dot{\theta}_3 \end{bmatrix} $$ であり,回転の運動エネルギは次のように得られる. $$ \frac{1}{2}\ {}^3\boldsymbol{\omega}^T\ {}^{3}{\boldsymbol{J}}\ {}^3\boldsymbol{\omega} = \frac{1}{2}\left(J_r\cos^2\theta_2 + J_p\sin^2\theta_2\right)\dot{\theta_1}^2 + \frac{1}{2}J_r\dot{\theta}_2^2 + \frac{1}{2}J_p\dot{\theta}_3^2 + J_p\sin{\theta}_2 \dot{\theta}_1\dot{\theta}_3 $$
以上からラグランジアン\(L\)が得られる. $$ \begin{align} L ={}&\frac{1}{2} m l_2^2 \dot{\theta}_2^2 + \frac{1}{2} m \left(l_2 \cos\theta_2 + l_1\right)^2 \dot{\theta}_1^2 \\ &+\frac{1}{2}\left(J_r\cos^2\theta_2 + J_p\sin^2\theta_2\right)\dot{\theta_1}^2 \\ &+\frac{1}{2}J_r\dot{\theta}_2^2 + \frac{1}{2}J_p\dot{\theta}_3^2 + J_p\sin{\theta}_2 \dot{\theta}_1\dot{\theta}_3 \\ &-mg\left(l_1\cos\theta_1 + l_2\cos\theta_1\cos\theta_2\right) \end{align} $$
フライホイールの速度は一定に保つものとして\(\theta_1, \theta_2\)についてのみ考えると次の式が得られる. $$ \begin{cases} &\begin{split} 0 ={}& \frac{d}{dt}\left(\frac{\partial L}{\partial \dot{\theta}_1}\right) - \frac{\partial L}{\partial \theta_1} \\ ={}& \left(J_r\cos^2\theta_2 + J_p\sin^2\theta_2 + m\left(l_1+l_2\cos\theta_2\right)^2\right)\ddot{\theta}_1 \\ & +2\left(\left(J_p-J_r\right)\cos\theta_2 - m\left(l_1+l_2\cos\theta_2\right)l_2\right) \sin\theta_2\dot{\theta}_1\dot{\theta}_2 \\ & +J_p\cos\theta_2\dot{\theta}_2\dot{\theta}_3 + J_p\sin\theta_2\ddot{\theta}_3 -mg\left(l_1+l_2\cos\theta_2\right)\sin\theta_1 \end{split} \\ &\begin{split} 0 ={}& \frac{d}{dt}\left(\frac{\partial L}{\partial \dot{\theta}_2}\right) - \frac{\partial L}{\partial \theta_2} \\ ={}& \left(J_r+ml_2^2\right)\ddot{\theta}_2 \\ &- \left(\left(J_p-J_r\right)\cos\theta_2 - ml_2\left(l_1+l_2\cos\theta_2\right)\right) \sin\theta_2\dot{\theta}_1^2 \\ &- J_p\cos\theta_2\dot{\theta}_1\dot{\theta}_3 - mgl_2\cos\theta_1\sin\theta_2 \end{split} \end{cases} $$