BROKEN's Advanced Vehicle Laboratory

プロジェクト / 小型ヒューマノイド2003 for ROBO-ONE

3. 関節トルクの計算

アクチュエータにはラジコンサーボを使用しようと決めたわけですが、どれくらいのトルクが必要なのかがわかりません。必要なトルクがわからなければ、どのラジコンサーボを選べばよいのか、選んだサーボは歩行、屈伸、起き上がり等に必要なトルクが出せるのか、それもわかりません。 わかりません、では設計できないので、ラジコンサーボを選ぶ前にごく簡単に関節トルクの試算をしてみることにしました。

高価な解析ソフトを持っていればそれでやりたいところですが、一個人が趣味でロボットを作るのにそんなたいそうな物は使えません。おとなしく、紙と鉛筆でガリガリやりましょう。(表計算ソフトをうまく使うと、計算が楽になるかもしれません。) それから、私は数学は得意でないので、あまり複雑な計算は嫌いです。ごく簡単に、かつ、直感的に考えて不自然じゃない程度にモデルを立ててみます。計算を簡単に済ませるため、静力学のみ考慮するものとします。

(注) 私が計算をしてみた、というだけなので、正しい保証はありません。疑問点についてはBBSで議論していただけると幸いです。

■ ロボットに行わせたい動作

ロボットに行わせたい動作はいろいろありますが、とりあえずはROBO-ONEの予選を突破するのに必要な動作が出来ればよいでしょう。第3回大会で予選を突破したロボットを見る限りでは、

といった動作が出来ることが、予選突破の最低ラインだろうと思います。ですから、これらの動作を行うのに必要なトルクがどれくらいになるか見積もって、それを基準に使用するラジコンサーボやロボットの目標身長や目標体重を決めていきましょう。

といっておきながら。この関節トルクの計算では、もっとも大きなトルクを必要とする関節はどこなのか、そのトルクはどれくらいかかるのかについて、屈伸、前傾姿勢、片足立ちを例にとって見積もることにします。

■ 確認事項

知っている人から見ればなんでもないことでも、知らない人から見ると敷居が高く感じることがあります。ここでは計算を行う前に、中学生〜高校生くらいの読者を想定して、用語や計算方法の確認をしておきます。

<< ロール、ピッチ、ヨーについて >>

ロール、ピッチ、ヨーといわれても、なんのことだかわからない人のために、一応解説しておきます。ロボットの進行方向をx軸正方向、ロボットからみて左手方向をy軸正方向、ロボットの上方をz軸方向としたとき、x軸周りの回転がロール、y軸周りの回転がピッチ、z軸周りの回転がヨーです。 たとえば、ドアを正面から見てドアノブをまわす回転はロール軸回転、お辞儀をするときに腰を曲げるのはピッチ軸回転で、自動車がスピンしてしまった場合の回転はヨー軸回転です。

<< トルクとモーメント >>

トルク、モーメント、慣性モーメント。似たような用語が出てきますが、意味を取り違えてはいませんよね? 確認ですが、「物体を回転させようとする働き(能力)」をモーメントといい、モーメントの中で特に軸が決まっているものをトルクと呼んでいます。 慣性モーメントとモーメントを混同している人もいるようですが、慣性モーメントは「回転しにくさ」を表す量です。モーメントと慣性モーメントの関係は、力と質量の関係に相当します。(質量は、力を加えたときにどれくらい動きにくいかを表す量です。念のため。)

<< トルクを簡単に計算する方法 >>

これも、知っている人には当たり前のことですが、知らないと計算に苦労するので確認しておきましょう。

上図のようなモデルで足首関節のトルクを計算することを考えて見ましょう。 高校の物理の教科書で出てくるような感じで、まじめに力の分解をすると、下図(左)のようになります。分解して得られたリンクと直交する力の成分 mg sinΘ とリンクの長さ l をかければ、足首関節のトルクが求まります。(図中の角度はいいかげんです)

これはこれでいいですね。 でも、下図のように、x成分とy成分に分解したほうが、計算が楽だと思いませんか?

  

力をリンク方向成分とリンクに直交する成分に分ける場合と、x成分y成分にわけた場合の関係は、下図のようになっています。イメージとしては、重心を地面に投影してからトルクを計算しているような感じです。リンク数や関節数が増えてくると、こちらのやり方のほうが断然楽だということを実感できるでしょう。

<< 足裏に重心の投影点が入っているとなぜ転ばないのか? >>

これ、当たり前のように言っていますが、なぜ転ばないのか考えてみたことありますか? 理由は簡単なことなので、これは読者のみなさんの宿題ということにしておきましょう。 どうしてもわからないから答えを知りたい、という方は私までメールください。

■ 屈伸に必要なトルクを求める

前おきが長くなりましたが、いよいよ計算です。ここで使用するモデルは下図の3リンクモデルで、下図のように関節角度をとることにします。

  
記号 意味 記号 意味
m1 すねの質量 p_m1 m1が存在する位置
m2 ももの質量 p_1 膝関節の位置
m3 上半身の質量 p_m2 m2が存在する位置
l0 足裏長さ p_2 股関節(?)の位置
l1 すねの長さ p_m3 m3が存在する位置
l2 ももの長さ τ1 足首関節トルク
l3 脚の付け根から
胴体重心までの長さ
τ2 膝関節トルク
Θ1 足首関節の角度 τ3 股関節(?)トルク
Θ2 膝関節の角度 p_G 重心の位置
Θ3 股関節(?)の角度

モデルを簡略化するため、すねともものリンクの質量はリンクの中心部分についているものとします。また、座標系の原点は足首関節の場所にとります。関節の回転方向は反時計回りを正とします。

トルク計算の下準備

まずはトルクの計算に必要となるものの下準備をしてしまいましょう。(紙と鉛筆で計算するときは、ベクトルと回転変換行列を使って計算したほうが格段に楽ですが、htmlではそれがうまく表現できないので、成分毎にばらして書いておきます。)

p_m1x = - 1/2 * l1 * sin(Θ1)       p_1x = - l1 * sin(Θ1)
p_m1y = 1/2 * l1 * cos(Θ1) p_1y = l1 * cos(Θ1)
p_m2x = p_1x - 1/2 * l2 * sin(Θ1+Θ2) p_2x = p_1x - l2 * sin(Θ1+Θ2)
p_m2y = p_1y + 1/2 * l2 * cos(Θ1+Θ2) p_2y = p_1y + l2 * cos(Θ1+Θ2)
p_m3x = p_2x - l3 * sin(Θ1+Θ2+Θ3)
p_m3y = p_2y + l3 * cos(Θ1+Θ2+Θ3)

これらより、各関節のトルクは、

τ1 = g * ( p_m1x * m1 + p_m2x * m2 + p_m3x * m3 )
τ2 = g * { (p_m2x - p_1x) * m2 + (p_m3x - p_1x) * m3 }
τ3 = g * (p_m3x - p_2x) * m3

となります。また、重心の位置p_Gは、

p_Gx = ( m1 * p_m1x + m2 * p_m2x + m3 * p_m3x ) / (m1 + m2 + m3)
p_Gy = ( m1 * p_m1y + m2 * p_m2y + m3 * p_m3y ) / (m1 + m2 + m3)

となるので、ロボットが転倒しないための条件は、

-1/2 * l0 < p_Gx < 1/2 * l0

となります。

例1:身長32cm、体重2.5kgのロボットの場合

では、ROBO-ONEに出場するような標準的な大きさのロボットを想定して、具体的な数字を入れてトルクを算出してみましょう。実際のロボットの重量配分等がわからないため、値は適当に入れてしまいます。屈伸の動作において、もっとも関節トルクが大きくなるのは、もっとも深く屈んだときだと思います。このときの姿勢を下図のように、上半身をまっすぐ足首の上に落としてきた形で屈むことにしましょう。l1, l2が同じ長さで、ラジコンサーボの最大回転角度が120°であると想定して、関節角度は足首から順に-60°、120°、-60°とします。

計算はプログラムを組んで計算させてもいいのですが、この程度であれば Excelで計算させてしまったほうがパラメータの変更も容易ですぐに結果が得られます。関節角度の値を連続的にとれるようにすれば、Excelで関節トルクの変化も計算できます。

記号
m1 500 [g]
m2 500 [g]
m3 1500 [g]
l0 15 [cm]
l1 8 [cm]
l2 8 [cm]
l3 8 [cm]
Θ1 -60°
Θ2 120°
Θ3 -60°

途中の計算は省略して結果だけ書くと、

τ1 (足首関節) 3.5 [kgf・cm]
τ2 (膝関節) -12.1 [kgf・cm]
τ3 (股関節?) 0 [kgf・cm]

のようになりました。(大雑把な値です。) ここで、ラジコンサーボのカタログなどを見るとトルクがkgf・cmと工学単位系で表示されていることが多いため、比較しやすいように計算結果も工学単位系で表しました。 計算結果を見ると、この姿勢では膝関節には足首のトルクの約3.5倍程度のトルクがかかっていることがわかります。 両足をついてしゃがんでいるのであれば、膝関節は片足辺り6kgf・cmのトルクがひつようなことになります。

例2:身長50cm、体重4.5kgのロボットの場合

では、もう少し大き目のロボットの場合、各関節のトルクはどれくらいになるでしょう。質量とリンク長を変更して関節トルクを計算してみましょう。

記号
m1 1000 [g]
m2 1000 [g]
m3 2500 [g]
l0 15 [cm]
l1 12 [cm]
l2 12 [cm]
l3 12 [cm]
Θ1 -60°
Θ2 120°
Θ3 -60°

これも結果だけ書くと、

τ1 (足首関節) 10.4 [kgf・cm]
τ2 (膝関節) -31.2 [kgf・cm]
τ3 (股関節?) 0 [kgf・cm]

のようになりました。例1と違って膝関節にかかるトルクが足首関節の約3倍ですが、これは上半身と下半身の重量バランスがことなっているからです。上半身をもっと軽くすれば、膝関節にかかる負担が軽くなります。体重がおなじ4.5kgでもm1,m2,m3をそれぞれ1.5kgずつにすると、τ1=15.6[kgf・cm]、τ2=-23.4[kgf・cm]となり、足首関節にかかる負担が増えて、膝関節にかかる負担が減ることが確認できます。

では脚が重いほうがいいのか、というのは議論の余地がありますね。

■ 上体を傾けたときにかかるトルクを求める

今度は足首関節だけをまげて、倒れないぎりぎりの角度で各関節にどれだけトルクがかかるかを求めて見ましょう。Θ2=Θ3=0として、重心位置のx座標が p_Gx = l0/2 になるようなΘ1をもとめ、このときの関節トルクを求めればよいわけです。が、しかし。計算がやたらめんどうになりそうですね(汗) 面倒な計算は計算ミスの温床となりますから、下図左のモデルの替わりに、下図右のモデルで計算しましょう。

記号 意味
p_m 質量mの位置
m ロボットの質量
l (直立時における)
ロボットの重心までの高さ
l0 足裏長さ
Θ 足首関節角度
τ 足首関節トルク
これでは計算が面倒なので、 こちらで代用します。

先ほどと同様に計算の下準備をしておきます。

p_mx = -l sinΘ
p_my = l cosΘ
τ = mg * p_mx

重心の位置がつま先ぎりぎりの位置にあるとき、p_mx = -l sinΘ = l0/2 なので、このときの関節角度Θは、

Θ = asin(-l0/(2*l))

となります。ここで asinというのは sin の逆関数で、アークサインと読みます。この式から得られた関節角度からトルクを求めれば・・・と思ったのですが、足首関節のトルクはよく考えてみれば計算するまでもなく、

τ= -mg * l0 / 2

ですね。先ほどの計算を最後まで展開してもまったく同じものが得られますが、時間の無駄でしょう。下図をみれば、なぜそうなのかは明らかですね。

例1:身長32cm、体重2.5kgのロボットの場合

屈伸の場合と同様に、実際の数字を当てはめてトルクを算出してみましょう。計算を簡単にするために、重心は身長の1/2のところにあるものとします。ここでも、工学単位系で表記します。

記号
m 2.5 [kg]
l 16 [cm]
l0 15 [cm]
計算結果
τ -18.75 [kgf・cm]
Θ -30.0 [°]

ごく当たり前のことですが、足裏の大きさがすべてを支配しています。このことは、式を見ればはっきりわかりますね。この例のように身長の半分もあるようなデカイ足裏を使えば、体を前後30°まで傾けられるというわけです。(もちろん、重心の高さによって変わりますが。)

例2:身長50cm、体重4.5kgのロボットの場合

もう少し大きいロボットだと何がどう変わるでしょうか。式を見ても明らかなように、(トルクが十分出せると仮定すれば)胴体を傾けられる角度はロボットの重さに無関係で、重心の高さと足裏の長さによって決まります。 ROBO-ONEのレギュレーションではロボットの大きさによらず足裏長さに制限がありますから、足裏長 / 身長 の比率は大きいロボットのほうが小さくしか取れません。 それを見込んだ上で計算して見ましょう。こちらの例でも、重心は身長の 1/2のところにあるものとします。

記号
m 4.5 [kg]
l 25 [cm]
l0 15 [cm]
計算結果
τ -33.8 [kgf・cm]
Θ -17.5 [°]

身長を高くしたのに足裏長さを変えなかったため、転倒を免れる関節角度が半分弱程度まで減っています。ちなみに、足裏長さを第3回大会のレギュレーションぎりぎりである20cmまで長くすると、τ=45.0[kgf・cm]、Θ=23.6[°]になります。

■ 片足立ちに必要なトルクを求める

ここまでで屈伸と前傾姿勢での関節トルクを見てきましたが、足の付け根のトルクも馬鹿にならないよ、との意見がありましたので、足の付け根のロール軸周りのトルクについて考えて見ます。 足の付け根に最もトルクが必要となる姿勢は片足立ちをしたときじゃないかと思いますから、片足立ちについて取り上げます。 片足立ちを考えるためのモデルは下図のようにとりました。 座標系の原点は着地している脚の足首関節の部分にとり、浮いているほうの脚は膝を曲げるかどうかしているものとして扱いますが、それほど大きく膝関節を曲げないという仮定をおいて、計算上は長さを l のまま使用します。

記号 意味 記号 意味
m1 左脚の質量 p_m1 m1が存在する位置
m2 右足の質量 p_1 右股関節の位置
m3 上半身の質量 p_m2 m2が存在する位置
l1 脚の長さ p_2 左股関節の位置
l2 腰から上半身の重心
までの長さ
p_m3 上半身の重心位置
d 脚間距離 p_G 重心の位置
Θ 股関節角度
(=足首関節角度)
τ0 左足首関節トルク
τ1 左股関節トルク
τ2 右股関節トルク

計算の下準備

屈伸や前傾姿勢のときと同様に、関節トルクを計算するのに必要となるものの準備をしてしまいましょう。

p_m1x = -l1/2 * sinΘ p_1x = -l1 * sinΘ
p_m1y = l1/2 * cosΘ p_1y = l1 * cosΘ
p_m2x = p_m1x - d p_2x = p_1x - d
p_m2y = p_m1y p_2y = p_1y
p_m3x = p_1x - d/2
p_m3y = p_1y + l2

これより、関節トルクは、

τ0 = p_m1x * m1 + p_m2x * m2 + p_m3x * m3
τ1 = (p_m2x - p_1x) * m2 + (p_m3x - p_1x) * m3
τ2 = (p_m2x - p_2x) * m2

のように求まります。 さらに、重心の位置 p_G は、

p_Gx = ( m1 * p_m1x + m2 * p_m2x + m3 * p_m3x ) / (m1 + m2 + m3)
p_Gy = ( m1 * p_m1y + m2 * p_m2y + m3 * p_m3y ) / (m1 + m2 + m3)

となります。ここで、上図右のように重心を左足首の上にもってきて片足立ちをしている状態を考えます。このとき、τ0=0ですから、

0 = p_m1x * m1 + p_m2x * m2 + p_m3x * m3
= (-l1/2 * sinΘ) * m1 + (-l1/2 * sinΘ- d) * m2 + (-l1 * sinΘ- d/2) * m3

普通右足と左足の重さは一緒にするので、m1 = m2 を仮定すると、上の式は、

0 = (-l1 * sinΘ - d) * m1 + (-l1 * sinΘ - d/2 ) * m3
l1 * sinΘ * (m1 + m2) = -d * (m1 + m3/2 )
sinΘ = -d * (m1 + m3/2) / { l1 * (m1 + m3) }

となり、

Θ = asin[ -d * (m1 + m3/2) / { l1 * (m1 + m3) } ]

を得ることができます。ここまできたら手計算をやめて、後はExcelなりプログラムに任せましょう。

例1:身長32cm、体重2.5kgのロボットの場合

屈伸や前傾姿勢の時と同様に、実際の数字を入れて各関節のトルクがどれくらいになるか見てみましょう。左足首関節はτ0が0になっていなかったら計算ミスだとすぐわかりますね。

記号
m1 0.5 [kg]
m2 0.5 [kg]
m3 1.5 [kg]
l1 16 [cm]
l2 8 [cm]
d 6 [cm]
計算結果
Θ -13.6 [°]
τ0 0 [kgf・cm]
τ1 -8.4 [kgf・cm]
τ2 -3.9 [kgf・cm]

股関節の間隔を 6cm にとると、片足立ちをしたときに股関節にかかるトルクは 8.4 kgf・cm になることがわかりました。 前傾姿勢時の足首トルクには及びませんが、それでも結構な大きさですね。 ちなみに、股関節の間隔を 5cm にすると、股関節にかかるトルクは 7.0 kgf・cmになります。 股関節の間隔をできるだけ小さく取ることが、股関節への負担を小さくするポイントになるようです。

例2:身長50cm、体重4.5kgのロボットの場合

もう少し大きいロボットだとどうでしょうか。

記号
m1 1.0 [kg]
m2 1.0 [kg]
m3 2.5 [kg]
l1 24 [cm]
l2 12 [cm]
d 8 [cm]
計算結果
Θ -12.4 [°]
τ0 0 [kgf・cm]
τ1 -20.6 [kgf・cm]
τ2 -10.6 [kgf・cm]

股関節の間隔を 8cm にとると、片足立ちをしたときに股関節にかかるトルクは 20.6 kgf・cm になるようです。市販されているラジコンサーボでこれだけのトルクを出すのは非常に厳しいので、これだけの大きさのロボットを作りたければ体重を軽くするなり股関節の間隔を狭くするなりの何らかの工夫が必要になりそうです。 ちなみに、股関節の間隔を 6cm で設計すると、股関節のトルクは 15.4 kgf・cm になり、市販されているラジコンサーボで最も大きいものを使用すれば、何とかなりそうです。

これもごく当たり前のことですが、歩行するのであれば左右への重心移動量は片足立ちより小さい範囲で行わないと転倒してしまいます。動力学的なことは考えていませんが、歩行に必要な股関節のトルクは、片足立ちに必要なトルクより小さいのではないかと予想しています。

■ トルク計算のまとめ

今回は、2足歩行ロボットのアクチュエータ選定を行うために、簡単なモデルを使って、屈伸、前傾姿勢、片足立ちの3つについて各関節にかかるトルクを計算してみました。その結果、

といったことがわかりました。

上半身と下半身の重量バランスやリンク長の比率によって各関節にかかるトルクの比率が変わるため、一概にこの姿勢では何倍、とは言えませんが、ここで得られた結果を元にアクチュエータ(ラジコンサーボ)の選定、機構設計に取り組む予定です。

△目次 / 4.1 基礎実験:実験の目的 >>