How to move a robot

MF303 + MikuMikuDance
(3D Animation design tool)

ロボットの動かし方についてです。ロボットには少なく考えても20個(多いと40個)ほどのサーボモーターが使われています。それほど多くのモーターをどうやって動かせば、私たちが希望するような滑らかで可愛らしい動きになるのか?悩んでしまう人が多いのではないでしょうか。C言語で1個1個のサーボの動きを記述する?1個1個のサーボは動かせても全体としてどう見えるかかはまったくわからないですね。気が遠くなってしまいますね?

ここでまず考えなくてはいけないのは、私達人間がどういう風に体を動かそうとしているかです。大きく分けて考えると、

(1)歩くとか、階段を上るとか機能的な動きだが動かす関節は限られている動き
(2)物をつかむとか、目でものを追いかけるとか精度はいるが比較的シンプルな動き
(3)手を振るとか、挨拶をするとか動きは複雑だけど、大事なのは見栄えであって、動きの精度は適当でよい動き

などがあると思います。さてこうやって考えてみると、ロボット(人間)の表現力という意味では、(3)が一番大事だと思いませんか?(1)や(2)はそれこそC言語でプログラムを記述することも出来そうな気がしますが(3)は特別ですね。

ここでは(3)についてもう少し考えてみたいと思います。
まず一つ知っておいた方が良い考えとして『セマンティックス:意味論』という考えです。もともとの言葉の意味は『文章を文字・記号の配列とみなさないで、それに含まれている内容・意味を問題とすること』だそうです。ロボットに関していえば、『その動きの意味は何なのか?』と考えることです。

例えば人が他の人に挨拶をする場合を考えてみましょう。片手を振ったり、両手を振ったり、会釈したり、体全体を動かしたりと色々なやり方が考えられると思います。でもそれで伝えたいのは基本的に『こんにちはー!』ですよね。要するに『こんにちはー』の細かい分類として沢山あって、例えば『こんにちはー1』から『こんにちはー100』まであれば人間の挨拶のほとんどが表現できると思いませんか?逆に言うと人間の動きの意味ってそれほど多くのパターンは無い?のではありませんか。ましてや手の振り方が10度くらい変わってもそれを見る側はそれほど意味の違いを感じないですよね。

人間の動きの大分類について考えると、”挨拶”、”怒り”、”悲しい”、”うれしい”、”がっかり”、”大好き!” とかの大分類があって、それぞれに数十個も動きがあれば人間の感情表現ってほとんど出来てしまうと思います。昔のAIBOはこの考えでいろいろな動きを作っていたのです。

なぜセマンティックスの考えを説明したかというと、人(ロボット)の動きを体系化できるからです。例えば ”怒り” の動きを怒りの強さによって1~10段階まで用意しておけば、ロボットの全体の動きのシナリオに沿って『ここでは3番目に強い怒り』を表現しようとか、『最大の怒り』を表現しようとか選んでロボットに表現させることができます。要するにいちいちプログラムを動かすのではなく、ロボットの動きのコンテンツ番号を指定すればそれにマッチした動きをロボットにさせられるのです。

では、そのロボットの動きのコンテンツはどうやって創るのか?いちいち数十個のサーボを動かすプログラムをC言語で書くのか?いえいえ、そんな必要はありません。3Dアニメの制作ソフトで出来るんです。上のビデオをご覧ください。

This is about how to move a robot. A robot uses at least 20 (more likely 40) servo motors. How can we move that many motors to make the robot move as smoothly and prettily as we would like? How to describe the movement of each individual servo in C language? It’s a bit daunting, isn’t it?

The first thing to consider here is how we humans try to move our bodies. Broadly speaking, we can divide it into,

(1) Functional movements such as walking or climbing stairs, but with limited servo movement.
(2) Simple movements that require precision, such as grasping an object or following an object with the eyes.
(3) complex movements such as waving hands or greeting people, but the important thing is to look good. The accuracy of the movements can be appropriate.

Now, when you think about it this way, don’t you think that (3) is the most important in terms of the expressive power of a robot (human)? It is possible to write programs for (1) and (2) in C language, but (3) is very special.

Here I would like to think a little more about (3).
One idea you should know about it first is the idea of “Semantics”. The original meaning of the word is “to consider the content and meaning of a sentence as a matter of fact, not as an array of letters and symbols. ” In the case of robots, it means thinking about “What is the meaning of their movements? “

Consider, for example, when a person greets another person. There are many ways to do this: waving one hand, waving both hands, bailing, moving the whole body, and so on. But what you want to say is basically “Hello!” Right? In short, there are many detailed categories of “Hello!” For example, don’t you think that most of the human greetings can be expressed if there are “Hello 1” to “Hello 100”? In other words, there are not so many patterns in human movements. Even if the way we wave our hands changes by 10 degrees or so, the person who sees it does not feel much difference in meaning, right?

If we think about the major categories of human movements, we see “Greetings,” “Anger,” “Sad,” “Happy “, ”disappointed,“ ”I love you!” and so on, and if there were dozens of movements in each of these categories, I think most human emotional expression could be done. The old AIBOs used this idea to create various movements.

The reason I explained the idea of Semantics is that it allows us to systematize the movements of a person (robot). For example, if you have prepared 1 to 10 levels of “anger” movements according to the intensity of anger, you can choose to have the robot express “the third most intense anger” or “the greatest anger” according to the scenario of the robot’s overall movements. In other words, it is not a matter of running a program every time. In short, instead of running the program every time, the robot can be made to move in accordance with the content number of the robot’s movement if you specify it.

So, how do you create the content for the robot’s movements? Do we have to write programs in C language to move dozens of servos? No, you don’t have to… you can do it with 3D animation production software. See above Video.

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする