2003/03/15 【アクチュエータ編TOPに戻る】
今までロボット作りを志して来て、今ごろになって無謀だったと気づいたことがあります。それは、作ろうとしているロボットに関する力学、物理学的な計算による解析や予測を一切してこなかったことです。ある姿勢において各関節に加わる負荷はいくつ?必要になるモータのトルクはいくつ?ロボットの各部の重量はどれくらいに抑えなければならないの? それらの問いに対する答えは、いつも感でした。トルクはでかいほうが良いだろう。ボディーの重量も積み上げ式で重くなっても仕方ないだろう。まあ、なんとかなるだろう。というところです。今思うと、よくそんな考えでロボットを作ろうとしていたものです。これでは満足のいくロボットは作れなくて当然でしょう。(いつになく辛口ですが...)
この辺で少し大人になり、基礎的なところからちゃんと勉強して見ようかと思い立ちました。「ちゃんと」と言ってもあまり難しいことまでは頭が回りませんが、せめてこれから作ろうとするロボットの動きを左右するであろう数値について、大まかに掴んでおくということは必須だと思うのです。
で、今回はその第一弾です。ロボットは屈伸運動の時に、各関節にどれくらいの負荷が加わるのだろう。という基本的な疑問からスタートです。で、最後の方ではボディに関するパラメータを入力すると、自動的に各関節のモーメントを自動計算してグラフ化してくれるツールをご紹介します。
突然ですがここで問題です。屈伸運動の時、どの関節に一番負荷が掛かると思いますか。当然一番下にある足首に一番の負荷が加わると思いますね。はたして本当にそうでしょうか? (^^
201−1.モーメントとは...
ロボットの足や腕は、関節を中心としたパーツの組合せで構成されます。つまり、ロボットは関節を中心として、各パーツが自発的に回転運動を行うことによって動きます。一方で、関節には各パーツの重量による負荷が掛かり、重力に従って回転させようとする力が常に加わっています。関節の持つトルクがこの負荷よりも大きくなければ、自発的な運動どころか、姿勢を維持することすら出来なくなります。
以上のことをモデル化しているのが下の図です。
![]() |
左の図は、長さL [cm]の棒の先に重さW [Kg]の重りが付いていて、地面とは自由に動かせる支点で繋がっている様子を示しています。この時、棒の重さは重りに比べて十分無視できるほど軽いとします。 図では重りが傾けてられており、地面に対してはこのまま手を離せば地面に向かって落ちていくことが予想できると思います。 では、その時各部にどんな力が加わっているのでしょうか。 |
![]() |
重りが付いている棒と地面の間の角度をθ[度]とします。 重りは地面に対して垂直に落ちようとしますが、棒が邪魔でまっすぐに落ちず、棒を半径とした円軌道を描いて落ちます。この時、重りが垂直に落ちようとする力W[Kg・f]は、円軌道の接線方向に落ちようとする力F[Kg・f]と、棒を支点方向に押し返す力に分解して考えることができます。 ここで、円軌道の接線方向に落ちようとする力F[Kg・f]は、棒を回転させようとする力であると言うことができます。 |
では、棒を回転させようとする力Fは、地面にある棒の支点に対してどのような力を与えているのでしょうか。
![]() |
テコの原理はご存知ですね。大きな石を動かすのに丈夫で長い棒を持ってきて、動かそうとする石の近くに支点となる丸太などをおき、「うんしょ」と持ち上げるあれです。 テコの原理では、棒が長いほど重い石も楽に持ち上げられます。それは、同じ力を加えるにしても、支点からの距離が長くなるほど、石に対して大きな力を出すことができるからです。その替わり、棒の端を上から下まで、長い距離を動かさなければなりません。 小学校の理科などで、仕事=力x距離などと教わった覚えがあります。同じ仕事をするのに小さな力で済ますには、距離を長くすれば良いというのがテコの原理です。100Kgの石を1cm動かす仕事は、1Kgの力で100cm棒を押し下げる仕事と同じであるということになります。 |
このテコの原理と同じ考えは、先ほどの棒を回転させようとする力Fと、棒の支点に加わる力の関係にも当てはまります。Fの力が同じでも、棒の長さLが長いほど支点近くを回転させようとする力は大きくなります。
ちょっと想像してみて下さい。長さ1mの棒の先に大きなリンゴを突き刺して、棒のもう片側を片手で持ちます。棒を持ったままゆっくり45度くらいまで傾けてみても、多分全然余裕で持っていられるでしょう。でも、棒の長さを10mにしてみたらどうですか? 持っているのがちょっと辛くなると思います。それは棒自体の重さが増えたから、という理由もあるかもしれませんが、以上のようなテコの原理が働いているからなのです。500gのリンゴが5Kgの重さに感じられることでしょう。
つまり、支点部分を回転させようとする力は、実際に加わっている力Fと、Fが加わっているところから支点までの距離Lの積で表され、それをモーメントと呼びます。
モーメント M = F ・ L [Kgf・cm] ( ・ は 積 ”掛ける” を表します)
説明ではモーメントが発生する要因として重力を例としましたが、これ以外にも機械的に加えられる力などにも当てはめられます。また、モーメントの単位としてN・mと表記するほうが一般的かもしれませんが、ここではKgf・cmと表記してみました。ちなみに、10Kgf = 98N(ニュートン)という関係式は覚えておいてください。
では、W[Kg]の重りがθ[度]傾いているときのFはどうやって求めるのでしょう。そこで三角関数が登場します。上の図で、地面にある支点と重りの重心と重心から地面に垂直に伸びた3点を結ぶ三角形は、W[Kgf]とF[Kgf]を2辺とする三角形と相似の関係にあります。相似の関係ということは、3辺の長さの比率が同じということです。つまり、Wとθの値がわかっていれば、Fの大きさは以下の式で求められます。
回転方向の分力 F = W ・ cosθ [Kgf]
なので、さきほどのモーメントの式と一緒にすると、以下の関係式になります。
モーメント M = W ・ L ・ cosθ [Kgf・cm]
具体的な数値を入れて見ると、
W = 1[Kg]
L = 10[cm]
θ = 60[度]
だったとすると、その時に支点に加わるモーメントは、
M = W・L・cosθ = 1 x 10 x 0.5 = 5[Kgf・cm]
となります。これは、棒を60度の角度に保つためには、支点で5[Kgf・cm]のトルクが必要になるということを示しています。
201−2.屈伸姿勢において各関節に掛かるモーメント
では、以上のモーメントに関する基本的な考えをもとに、実際のロボットが屈伸姿勢を取ったときに、各関節にどれくらいのモーメントが加わるのかについて考えましょう。ここで取り上げるのは、主にボディの自重によるモーメントです。このモーメントに対抗できるトルクを関節に持たせれば、少なくとも姿勢の維持だけはできるという目安になります。
先ず、ロボットを横からみたところを簡単にモデル化してみましょう。
![]() |
左の図がモデル化したところです。何だか分かりますか? 黒い線と黒い◎で描かれたものが、腰を落として立っているロボットを横から見たところです。◎は下から、足首、ヒザ、腰の関節を示しています。太鼓のような赤い○は、それぞれスネとモモと胴体部分の重心を表しています。重心とは、それぞれのブロックでの重さの中心部分を示すものです。 全ての物体は、それを構成している全ての部分にそれぞれの重さが分散して存在しています。単一の材質から出来ているパーツであれば、その形状で重心が決定します。逆に、サーボモータなどはモータ、ギヤ、ポテンショメータ、電子回路部分、プラスチック外装など、比重がまちまちなパーツから構成されているため、外形からは重心を求めることはできませんが、重心は必ずあります。単純に言えば、糸で吊るしたときに、傾かずに吊り合ってバランスが取れる位置が重心であると言えます。 重心という考え方を持ち込むことで、それ以外の部分の重さを無視してしまおうというのが、モーメントの計算を単純にする方法です。左図のモデルで言えば、スネとモモと胴体部分には、重心を示す赤い○の部分以外に重さは無いものとして考えます。ですから、実際のロボットに当てはめて考える場合は、設定する重心の位置に注意を払う必要があります。 |
ここで、足首に掛かるモーメントは、スネとモモと胴体の重心によるモーメントの総和として算出します。ヒザに掛かるモーメントは、モモと胴体の重心によるモーメントの総和として算出します。そして、腰に掛かるモーメントは胴体の重心によるモーメントとして算出します。
さて、上のモデルの各部の長さや角度に、以下のような名前を付けて見ました。
![]() |
■W1,2,3 スネ、モモ、胴体、各部の重心の重さ[Kg]です。各部の全体の重さが一点に集約されていると考えます。 ■L1,2 スネとモモの長さです。上下の関節の中心点間の距離としています。ここでは胴体最上部までの寸法は必要ありません。 ■l(小文字のL)1,2 スネ、モモ、胴体各々の下側の関節から、重心までの距離です。この距離をできるだけ正確に決めることが、モーメント計算全体の信頼性に関わります。 ■θ(シータ)1,2,3 スネ、モモ、ヒザの各関節の角度です。ただし、各関節の中心を通る水平線の右側を基準の0°とします。通常は各関節の内側の角度としたいところですが、計算式を一般的にして簡略化するため、このようにしています。なので、ヒザは通常90°以上の数値となります。 ちなみに、ヒザや腰の内側の角度は、以下の式で求まります。 ヒザ内側角 = θ1 + 180 - θ2 腰内側角 = θ3 + 180 - θ2
|
モーメント計算の元となるのは、以上スネとモモと胴体の3個の重心と重心位置、ボディーを構成する各部の寸法、そしてロボットの姿勢だけです。足首、ヒザ、腰のそれぞれを基準としたときの、各重心との位置関係(座標)はそれぞれ違いますので、各々の関節でのモーメントにも違いが出てきます。
では、これから各関節に掛かるモーメントの計算方法を順に見て行きましょう。
201−2−1.足首に掛かるモーメント
![]() |
足首の関節には、スネとモモと胴体の重心全てのモーメントが掛かります。足首に掛かる全てのモーメントをM1とした場合、 スネの重心 W1によるモーメントをM11 モモの重心 W2によるモーメントをM12 胴体の重心 W3によるモーメントをM13 とすると、 足首のモーメントM1 = M11 + M12 + M13 で算出できます。 重心W2やW3は、ヒザや腰などの関節でウネウネ曲がりながら支えられています。そんな重心のモーメントはどうやって求めるのでしょう? 例えば重心W2はヒザに支えられて足首にその重さが伝わっています。ということは、やはりヒザの関節を経由した力の伝達を考えないといけないのでしょうか?いえいえ、そんなことはありません。重心W2から基準となる足首までまっすぐ直線を引き、その直線を仮想の棒とみなして独立したモーメントの計算を行えば良いのです。 重心W2によるモーメントを計算する場合、ヒザの関節は固定されていると考えます。なので、重心W2をひとつの重りと見なしたとき、足首の関節との相対的な位置関係は変わらないので、どういう経路で固定されていても関係ないのです。これは重心W3についても同じです。 では、各モーメントを順に求めて行きましょう。 |
![]() |
■スネの重心W1によるモーメントM11 スネの重心W1によるモーメントM11は、始めにご紹介した基本式がそのまま適用できます。 M11 = W1 ・ l1 ・ cosθ1 [Kgf・cm] です。特に難しいことはありませんね。 |
![]() |
■モモの重心W2によるモーメントM12 モモの重心W2によるモーメントM12を求めるには、ちょっとだけヒネリが必要です。足首のポイントP1を基準とした時の、重心W2までの直線距離LM2を求め、同時に辺LM2とW2から垂直に落とした辺からなる三角形についてcosθを求めなければなりません。 LM2の長さを求めるには、先ずP1を基準とした時のW2の座標を求める必要があります。つまり、P1からX方向に何センチで、Y方向に何センチの位置にあるのか?ということですが、以下の式で求まります。 X方向の距離 W2X = L1・cosθ1 + l2・cosθ2 Y方向の距離 W2Y = L1・sinθ1 + l2・sinθ2 なので、LM2の長さはピタゴラスの定理より LM2 = √(W2X2 + W2Y2) となります。 ところで、水平線の基準0°に対するLM2の傾きをθとすると cosθ = W2X / LM2 の関係が成り立ちますので、モーメントの式に当てはめると、 M12 = W2・LM2・W2X / LM2 M12 = W2・W2X [Kgf・cm] で求まることになります。書き直すと M12 = W2・(L1・cosθ1 + l2・cosθ2)[Kgf・cm] になります。 |
![]() |
■胴体の重心W3によるモーメントM13 胴体の重心W3によるモーメントM13は、さきほどよりも、もうちょっと複雑ですが、基本的な考え方は一緒です。足首からW3までの直線距離LM31と、W3の座標を求めます。 X方向の距離 W3X=L1・cosθ1+L2・cosθ2+l3・cosθ3 Y方向の距離 W3Y=L1・sinθ1+L2・sinθ2+l3・sinθ3 LM31の長さはピタゴラスの定理より LM31 = √(W3X2 + W3Y2) となります。 あとは先ほどと同じように、水平線の基準0°に対するLM31の傾きをθとすると cosθ = W3X / LM31 の関係が成り立ちますので、モーメントの式に当てはめると、 M13 = W3・LM31・W3X / LM31 M12 = W3・W3X [Kgf・cm] で求まることになります。書き直すと M13=W3・(L1・cosθ1+L2・cosθ2+l3・cosθ3)[Kgf・cm] になります。 |
cosθは、θの角度が90°を超えるとマイナスの値になります。なので、向かって左側に倒れている関節のX成分は自動的に引き算処理されることになります。
以上の式で屈伸姿勢における足首のモーメントが計算できます。
201−2−2.ヒザに掛かるモーメント
![]() |
ヒザの関節には、モモと胴体の重心によるモーメントが掛かります。スネはヒザの土台となるため、モーメントの要素から外します。ヒザに掛かる全てのモーメントをM2とした場合、 モモの重心 W2によるモーメントをM22 胴体の重心 W3によるモーメントをM23 とすると、 ヒザのモーメントM2 = M22 + M23 で算出できます。 基本的なモーメントの算出方法は、足首のモーメントでご紹介したものと同じ考え方です。しかし、左の図を見てちょっと不自然なのが、棒は左側に傾いているのに、なぜモーメントの向きは右側にしているのか?というところでしょうか。 これは単純に基準の方向を示しているだけなので、右向きの矢印で記載しているだけです。ヒザ関節の中心を通る水平線の右側を基準の0°とするので、左側に傾いている(θ角が90°を超える)場合、実際に働くモーメントの向きはマイナスになります。つまり左の図のような姿勢では、矢印とは逆の左側に倒れようとするモーメントが働くということになります。 あらゆる姿勢でのモーメントを同じ条件で算出しようとする場合は、このように基準となる向きを明確にしておいたほうが有利だと思って、このように表記して見ました。 では、各モーメントを順に求めて行きましょう。 |
![]() |
■モモの重心W2によるモーメントM22 モモの重心W2によるモーメントM22は、始めにご紹介した基本式がそのまま適用できます。 M22 = W2 ・ l2 ・ cosθ2 [Kgf・cm] 左の図ではθ2が90°を超えるので、M22はマイナス方向になります。なので左側に倒れようとする力となります。これも簡単ですね。 |
![]() |
■胴体の重心W3によるモーメントM23 胴体の重心W3によるモーメントM23を求めるには、足首の時にご紹介した考え方を再び持ち込みます。つまり、ヒザのポイントP2を基準とした時の、重心W3までの直線距離LM32を求め、同時に辺LM32とW2から垂直にヒザの横まで落とした辺からなる三角形についてcosθを求めます。 LM32の長さを求めるには、先ずP2を基準とした時のW3の座標を求めます。つまり、P2からX方向に何センチで、Y方向に何センチの位置にあるのか?ということですが、以下の式で求まります。 X方向の距離 W3X = L2・cosθ2 + l3・cosθ3 Y方向の距離 W3Y = L2・sinθ2 + l3・sinθ3 なので、LM32の長さはピタゴラスの定理より LM32 = √(W3X2 + W3Y2) となります。 ところで、水平線の基準0°に対するLM32の傾きをθとすると cosθ = W3X / LM32 の関係が成り立ちますので、モーメントの式に当てはめると、 M23 = W3・LM32・W3X / LM32 M12 = W3・W3X [Kgf・cm] で求まることになります。書き直すと M23 = W3・(L2・cosθ2 + l3・cosθ3)[Kgf・cm] になります。 |
以上の式で屈伸姿勢におけるヒザのモーメントが計算できます。
201−2−3.腰に掛かるモーメント
![]() |
腰の関節には、胴体の重心によるモーメントが掛かります。スネやヒザは腰の土台となるため、モーメントの要素から外します。 腰に掛かるモーメントをM3とした場合、始めにご紹介した基本式がそのまま適用できます。 M3 = W3 ・ l3 ・ cosθ3 [Kgf・cm] これは簡単ですね。 いまさらですが、この胴体の重心には腕のパーツなども全て含むことになります。腕の姿勢を考慮したモーメントを求めたい場合には、今まで行ってきた計算に、さらに腕の長さや重心などの固有のパラメータを追加してあげなければなりませんが、今回はここまでとします。 以上の式で屈伸姿勢における腰のモーメントが計算できます。 |
ここで、一点だけ注意。屈伸姿勢では胴体を2本の脚で支えます。つまり、胴体の重心W3の重さは、片足に換算すると半分の重さとして扱うことができます。なので、今まで示してきたモーメントの式の中では、W3には実際の重さの半分の数値を入れたほうが、より実際のモーメントに近い値となります。
201−3.Exelによるモーメントの自動計算ツール
さて、いままでの各計算式によって、屈伸姿勢での各関節のモーメントが求まることが分かりました。ロボットの各パーツの長さ、重心位置、重さなどのパラメータの数値を決めて、あとは各関節の角度(つまり姿勢)を元に計算すれば実際のモーメントが算出できますが、これをいちいち電卓で計算していたら日が暮れてしまいます。
そこで、Windowsの表計算ソフトExcelを使って自動計算をさせることにしましょう。
今回ご紹介する自動計算ツールは、ロボットのボディに関するパラメータを入力して、各関節の角度を表計算形式でズラっと並べてあげると、それらの角度(姿勢)における各関節のモーメントを計算し、角度の推移に伴ったモーメントの変化をグラフで表示してくれます。
ここをクリックするとExcelファイルがダウンロードできます。moment1.xls
Microsoft(R) Excel2000で作成しています。他のバージョンでの動作は検証していませんので、ご了承下さい。画面は以下のようになっています。

■1.ロボットのボディに関するパラメータ入力
画面左上側オレンジの領域に、ロボットの身体に関する値を入力します。ここで入力した値をもとに、各部のモーメントが計算されます。
■2.ロボットの関節角度(姿勢)の入力
画面下側ピンクの領域に、ロボットの足首、ヒザ、上体(腰)の各角度を入力します。この時、201−2.の項でご紹介したモデルを参考にして、基準0°は各関節の水平線右側であることを守って下さい。3個の関節の角度は、横一列でペアになっています。上の例では、一番上の行の時のロボットの姿勢が、足首角が0°でヒザ角が180°で上体角が90°であるときの姿勢であることを示しています。
これら3個の角度で屈伸姿勢の指定ができるため、入力する角度を、行を変えて少しずつ変化させることによって、連続した姿勢の変化を表すことができます。ピンクの領域の右側に続く領域は、個別の計算結果を表示する領域です。ちょっと覗いて見てもらうと、すぐに分かってもらえると思いますので、説明は省略します。
■3.モーメントのグラフ表示
画面右上に大きく表示されているのが、角度の変化に対応した各関節に掛かるモーメントのグラフです。時計廻りに加わるモーメントが正(プラス)の値で、反時計廻りが負(マイナス)の値となります。
グラフの描画としては、ピンク領域に入力した角度の計算結果を、上の行から順に表示しているだけです。
パラメータの入力は、オレンジとピンクの領域のみでOKです。下半分の大部分を占めるピンク以外のセルには、各種の計算式が入力されているので、間違って消したり上書きしたりしないように注意して下さい。
角度入力の行数は、勝手に増やしたり減らしたりしてもかまいません。増やす場合には、各セルに入力されている計算式もコピーして下さい。
ツールには、あらかじめモデルとなるデータが入力されています。角度については、ちょうど壁にまっすぐに背中を付けた状態でスクワットをしているような姿勢の変化が入力されています。
で、このページの一番初めに出した問題を思い出して下さい。屈伸姿勢において、足首、ヒザ、腰の各関節の中で、一番負荷が加わる関節はどれでしょう。答えはグラフを見れば一目瞭然ですね。この場合の答えはヒザです。でも、その答えもきっと姿勢によって変わってくるのでしょう。
体重は軽くしているのに、意外と大きなモーメントが発生していることに驚きましたか? 驚いてもらえたならば、このページを読んで頂いたこともきっと無駄ではなかったでしょう。(^^;
ツールのパラメータを色々と変えて見て、どんな負荷が加わるのか試してみて下さい。