(57)【特許請求の範囲】
【請求項１】
少なくとも１つの機構部を有する機構手段と、
前記機構部を静止姿勢に保持するために駆動する駆動手段と、
前記機構部の静止姿勢において消費するエネルギに関する評価基準を求める基準算出手段と、
前記評価基準より前記静止姿勢において消費するエネルギが小さくなる姿勢を検索する姿勢検索手段と、
前記駆動手段を制御し、前記消費するエネルギが小さくなる姿勢に制御する姿勢制御手段と
を備えることを特徴とするロボット装置。
【請求項２】
前記機構手段は、移動のための機構を含む
ことを特徴とする請求項１に記載のロボット装置。
【請求項３】
前記機構手段は、関節またはリンク結合を含む
ことを特徴とする請求項１に記載のロボット装置。
【請求項４】
前記機構手段は、手または脚を含む
ことを特徴とする請求項１に記載のロボット装置。
【請求項５】
前記駆動手段は、電気をエネルギ源とする
ことを特徴とする請求項１に記載のロボット装置。
【請求項６】
前記駆動手段は、モータを構成要素に含む
ことを特徴とする請求項５に記載のロボット装置。
【請求項７】
前記駆動手段は、液体あるいは気体の圧力を利用する
ことを特徴とする請求項１に記載のロボット装置。
【請求項８】
前記駆動手段は、形状記憶合金を構成要素に含む
ことを特徴とする請求項１に記載のロボット装置。
【請求項９】
前記姿勢制御手段は、外界からの刺激を測定する刺激測定手段を有し、前記刺激測定手段の測定結果に対応して前記静止姿勢を制御する
ことを特徴とする請求項１に記載のロボット装置。
【請求項１０】
前記姿勢制御手段は、あらかじめ前記静止姿勢をとるための情報を記憶する記憶手段を有し、前記記憶された情報を用いて前記駆動手段を制御する
ことを特徴とする請求項１に記載のロボット装置。
【請求項１１】
前記基準算出手段は、前記駆動装置へ供給されるエネルギ量を測定するエネルギ測定手段を有し、
前記評価基準は、前記測定により求められた値の関数である
ことを特徴とする請求項１に記載のロボット装置。
【請求項１２】
前記エネルギ測定手段は、前記駆動手段に供給される電流または電圧の大きさを測定する
ことを特徴とする請求項１１に記載のロボット装置。
【請求項１３】
前記エネルギ測定手段は、前記駆動手段に発生する熱を測定する
ことを特徴とする請求項１１に記載のロボット装置。
【請求項１４】
前記基準算出手段は、前記駆動手段に加わる力あるいはトルクを測定する力測定手段を有し、
前記評価基準は、前記測定により求められた値の関数である
ことを特徴とする請求項１に記載のロボット装置。
【請求項１５】
前記姿勢検索手段は、前記静止姿勢を微小に動かしてエネルギが小さくなる姿勢を検索する
ことを特徴とする請求項１に記載のロボット装置。
【請求項１６】
前記姿勢制御手段は、前記姿勢検索手段の検索結果に対応して前記静止姿勢を更新する更新手段を有する
ことを特徴とする請求項１５に記載のロボット装置。
【請求項１７】
前記駆動手段へ供給するエネルギを制限するエネルギ制限手段と、
エネルギが制限された後、再度供給されたとき、前記エネルギを制限したときの姿勢から前記静止姿勢に復帰させる姿勢復帰手段と
をさらに備えることを特徴とする請求項１に記載のロボット装置。
【請求項１８】
前記エネルギ制限手段は、所定の前記静止姿勢に復帰可能な姿勢にあるときエネルギを制限する
ことを特徴とする請求項１７に記載のロボット装置。
【請求項１９】
前記エネルギ制限手段は、前記エネルギを制限する前の姿勢と、制限した後の姿勢とが実質的に同一の姿勢であるとき、前記エネルギを制限する
ことを特徴とする請求項１８に記載のロボット装置。
【請求項２０】
前記エネルギを制限した姿勢をあらかじめ記憶する記憶手段をさらに備える
ことを特徴とする請求項１７に記載のロボット装置。
【請求項２１】
前記記憶手段は、前記エネルギを制限する直前の前記静止姿勢も記憶する
ことを特徴とする請求項２０に記載のロボット装置。
【請求項２２】
前記エネルギ制限手段は、時間の関数として前記制限を行う
ことを特徴とする請求項１７に記載のロボット装置。
【請求項２３】
前記エネルギ制限手段は、前記駆動手段へのエネルギの供給を禁止する
ことを特徴とする請求項１７に記載のロボット装置。
【請求項２４】
前記エネルギ制限手段は、前記静止姿勢の保持の制御を制限する
ことを特徴とする請求項１７に記載のロボット装置。
【請求項２５】
前記姿勢復帰手段は、前記エネルギを制限する直前の前記静止姿勢に復帰させる
ことを特徴とする請求項１７に記載のロボット装置。
【請求項２６】
前記姿勢復帰手段は、前記エネルギを制限する直前の前記静止姿勢とは異なる所定の前記静止姿勢に復帰させる
ことを特徴とする請求項１７に記載のロボット装置。
【請求項２７】
前記姿勢復帰手段は、前記エネルギを制限したときの姿勢と実質的に同一の姿勢に復帰させる
ことを特徴とする請求項１７に記載のロボット装置。
【請求項２８】
少なくとも１つの機構部を有する機構手段と、
前記機構部を静止姿勢に保持するために駆動する駆動手段と
を備えるロボット装置の制御方法において、
前記機構部の静止姿勢において消費するエネルギに関する評価基準を求め、
前記評価基準より前記静止姿勢において消費するエネルギが小さくなる姿勢を検索し、
検索した前記姿勢に制御する
ことを特徴とするロボット装置の制御方法。
【請求項２９】
さらに、前記駆動手段へ供給するエネルギを制限し、
エネルギが制限された後、再度供給されたとき、前記エネルギを制限したときの姿勢から前記静止姿勢に復帰させる
ことを特徴とする請求項２８に記載のロボット装置の制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ロボット装置およびその制御方法に関し、特に効率的に歩行を行うロボット装置およびその制御方法に関する。
【０００２】
【従来の技術】
近年、特殊環境化での作業を行う自立型の歩行ロボットの研究が種々行われている。従来、このような歩行ロボットとして、外界からの信号を検知し、それに対して反応するロボットが提案されている。このようなロボットにおいて、特にバッテリをエネルギ源としているものにとっては、バッテリをいかに消費しないようにするかが重要な技術要素となる。
【０００３】
このような技術として、歩行時のエネルギ効率に関する研究がすでに報告されている。例えば、「エネルギ効率を考慮した４脚歩行ロボットの開発：第１２回日本ロボット学会学術講演会予稿集（３）；１９９４年１１月、ｐｐ１２２７−１２２８」には、歩行時のエネルギ消費を最小限に抑えるものについての報告がなされている。
【０００４】
また、姿勢制御に関しても、「４脚ロボットの６自由度位置、姿勢制御：第１２回日本ロボット学会学術講演会予稿集（３）；１９９４年１１月、ｐｐ１２２３−１２２４」に報告があるが、この報告は歩行ではない動きの制御に関するもので、エネルギ消費については検討されていない。
【０００５】
一方、産業用ロボットにおいては、故障による電源停止あるいは人間が電源を停止させたい場合に、原点に戻すというような処理が行われるのが一般的である。産業用ロボットの原点位置への移動は、位置検出がインクリメント方式（現在位置が原点からの距離で指定される方式）のエンコーダを用いる関係上、リミットスイッチ等が押される位置（原点）を検出し、エンコーダをリセットして初期化し、一連の動きをプレイバックさせるときのスタートポジションを特定にするために必要な動作となっている。例えば、ハイポイドギアを利用して電源オフ時に回転しないようなものが特開平５−１０４４６号公報に提案されている。
【０００６】
この特開平５−１０４４６号公報では、電源停止時に、その時の位置で機構系あるいは駆動系が止まっているので、機構系あるいは駆動系を電源再投入時にその位置から原点に戻す動きをさせる。この提案のようにゆっくりと原点に移動させなければ、いきなり原点に復帰して人間等に衝突する危険性がある。
【０００７】
【発明が解決しようとする課題】
しかしながら、上述の歩行ロボットにおいては、上記の特開平５−１０４４６号公報の提案と異なり、例えば、２足や４足の歩行ロボットなどが静止時にエネルギを必要とするモータを用いた場合、エネルギ供給を制限あるいは停止した場合に、立つことが不可能になるとともに、モータの電源を切ったり入れたりするときにも、人間が支えたり、あるいは所定の位置や姿勢を取らせた後に行なうことが必要となるといった問題がある。すなわち、転倒等により電源が停止した場合に、その後、電源を供給したとき、電源停止前の位置を各モータに直接指定しても、元の姿勢には戻れないといった問題がある。
【０００８】
また、コンピュータシステムには、アクセスにいかないフロッピディスクなどの回転を停止させるものが存在する。この時、ディスクなどの駆動系に対する処埋も行なわれるが、ロボットにおける駆動系とハードディスクのような駆動系では、状況が次の点で異なる。すなわち、ハードディスクではへッドなどでディスクを傷つけないために所定の位置にヘッドを格納し、しかる後電源を切るが、これはディスクを傷つけないために行なうものであり、機構系としてはディスクを傷つけて停止したとしても、再び電源を投入すれば同じ位置に直接戻ることが可能である。しかし、ロボットにおいては、一般的な姿勢において電源を切ると、電源を切る前の位置を直接指定しても、物理的要因で同じ姿勢にならないことがある。
【０００９】
さらに、双腕型ロボットなどのように、干渉を考慮して原点に復帰するロボットもある。このようなロボットでは、通常、右腕は右方向に、左腕は左方向に、それぞれ回して、原点に復帰するようになされているが、これは、重心移動や接地点の移動などを考慮してエネルギを制限した姿勢復帰ではない。
【００１０】
本発明は、上記事情に鑑みてなされたものであり、消費エネルギが最小となる姿勢を静止姿勢とし、エネルギを効率的に消費することのできるロボット装置を提供することを目的としている。また、エネルギの供給を停止したとき、静止姿勢に戻ることができるロボット装置を提供することを目的としている。
【００１１】
【課題を解決するための手段】
請求項１に記載のロボット装置は、少なくとも１つの機構部を有する機構手段と、機構部を静止姿勢に保持するために駆動する駆動手段と、機構部の静止姿勢において消費するエネルギに関する評価基準を求める基準算出手段と、評価基準より静止姿勢において消費するエネルギが小さくなる姿勢を検索する姿勢検索手段と、駆動手段を制御し、消費するエネルギが小さくなる姿勢に制御する姿勢制御手段とを備えることを特徴とする。
【００１３】
請求項２８に記載のロボット装置の制御方法は、機構部の静止姿勢において消費するエネルギに関する評価基準を求め、評価基準より静止姿勢において消費するエネルギが小さくなる姿勢を検索し、検索した姿勢に制御することを特徴とする。
【００１５】
請求項１に記載のロボット装置においては、機構手段が、少なくとも１つの機構部を有し、駆動手段が、機構部を静止姿勢に保持するために駆動し、基準算出手段が、機構部の静止姿勢において消費するエネルギに関する評価基準を求め、姿勢検索手段が、評価基準より静止姿勢において消費するエネルギが小さくなる姿勢を検索し、姿勢制御手段が、駆動手段を制御し、消費するエネルギが小さくなる姿勢に制御する。
【００１７】
請求項２８に記載のロボット装置の制御方法においては、機構部の静止姿勢において消費するエネルギに関する評価基準を求め、評価基準より静止姿勢において消費するエネルギが小さくなる姿勢を検索し、検索した姿勢に制御する。
【００１９】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施例について述べる。
【００２０】
図１乃至図４に示すように、本実施例の関節型ロボット１は、胴体部１００、右前脚部２００（機構手段）、左前脚部３００、右後脚部４００、左後脚部５００、首頭部６００とから基本的に構成されている。
【００２１】
胴体部１００は、胴体フレーム１０１および右前脚部２００を支えるための一対の右前脚支持部２０１，２０２と、左前脚部３００を支えるための一対の左前脚支持部３０１，３０２と、右後脚部４００を支えるための一対の右後脚支持部４０１，４０２と、左後脚部５０２を支えるための一対の左後脚支持部５０１，５０２とを備え、さらに信号処理を行なう電気回路とバッテリを含む信号処理部１１０が搭載されている。
【００２２】
なお、図１と図２（この図は各脚部を開いた状態を表している）において信号処理部１１０と各駆動部の間は図示しない制御信号線により配線されている。以下の図面においても制御信号線は便宜上省略している。
【００２３】
次に、右前脚部２００の構成を説明する。右前脚部２００は３つのアクチュエータとしてのサーボモータＳＭ２−１乃至ＳＭ２−３（駆動手段）より構成され、サーボモータＳＭ２−１は右前脚部２００を開脚する機能を有し、サーボモータＳＭ２−２は右前脚部２００を前後へ回転（回動）させる機能を有し、サーボモータＳＭ２−３は膝に相当する（サーボホーンＳＭ２−３Ｂを中心として、前後に回転する）機能を有している。各サーボモータの自由度については後述する。
【００２４】
これらのサーボモータＳＭ２−１乃至２−３としては、例えばラジオコントロールなどに利用されているサーボモータ等を用いることができる。このサーボモータはパルス幅で回転角を指定することで動作し、例えば「日本遠隔制御株式会社製（ＪＲ）ＮＥＳ−４７２１」等が利用できる。
【００２５】
サーボモータＳＭ２−１（他のサーボモータＳＭ２−２，ＳＭ２−３も同様）は、図５に示すように、サーボモータ本体ＳＭ２−１Ａとサーボモータ本体ＳＭ２−１Ａに対して回転するサーボホーンＳＭ２−１Ｂとから構成されている。本実施例においては本体ＳＭ２−１ＡのサーボホーンＳＭ２−１Ｂの逆側に、回転軸が一致するように、円筒状の支持剛体ＳＭ２−１Ｃを取り付けている。これはサーボモータ本体ＳＭ２−１Ａのケースを加工して取り付けている。すなわち、サーボホーンＳＭ２−１Ｂをサーボモータ本体ＳＭ２−１Ａに固定し、支持剛体ＳＭ２−１ＣをサーボホーンＳＭ２−１Ｂの逆側面で、回転軸が一致する位置に固定することで、回転可能にサーボモータを構成している。サーボモータの制御方法は後述する。
【００２６】
これらのサーボモータは互いに連結されて一本の脚を構成する。
【００２７】
図３、図４に示すように、サーボモータＳＭ２−１は胴体部１００の右前脚支持部２０１，２０２で支えられ、サーボモータＳＭ２−１のサーボホーンＳＭ２−１Ｂは右前脚支持部２０１に固定され、サーボホーンＳＭ２−１Ｂの逆側よりサーボホーンＳＭ２−１Ｂの回転軸上に突出した支持剛体ＳＭ２−１Ｃが、回転のために設けられた穴を介して右前脚支持部２０２連通されている。そして、サーボモータＳＭ２−１に対して回転命令がなされると、サーボモータＳＭ２−１が右前脚支持部２０１，２０２に対して相対的に回転する。なお、図３、図４では簡便のため首頭部６００は省略している。
【００２８】
また、サーボモータＳＭ２−２は、サーボモータＳＭ２−１に接着固定されており（図４）、サーボモータＳＭ２−２のサーボホーンＳＭ２−２Ｂは板状の接続板２１０に固定され（図４）、サーボホーンＳＭ２−２Ｂの逆側はサーボモータＳＭ２−１と同様に、サーボホーンＳＭ２−２Ｂの回転軸上に突出した支持剛体（図示せず）により回転する板状の接続板２１１に固定されている（図３）。そして、サーボモータＳＭ２−２に対して回転命令がなされると、サーボモータＳＭ２−２に対して接続板２１０，２１１が相対的に回転する。
【００２９】
さらに、接続板２１０，２１１の先端側にはサーボモータＳＭ２−３が取り付けられており（図３）、サーボモータＳＭ２−３のサーボホーンＳＭ２−３Ｂは板状の接続板２１０に固定され（図４）、サーボホーンＳＭ２−３Ｂの逆側は、サーボモータＳＭ２−２と同様に、サーボホーンＳＭ２−３Ｂの回転軸上に突出した支持剛体ＳＭ２−３Ｃ（図示せず）が、回転する板状の接続板２１１に固定されている（図３）。そして、サーボモータＳＭ２−３に対して回転命令がなされると、脚板２１２と一緒にサーボモータＳＭ２−３が接続板２１０，２１１に対して相対的に回転する。
【００３０】
以上は右前脚部２００の構成の説明であるが、その他の脚部である左前脚部３００、右後脚部４００、左後脚部５００についても同様の構成されているので説明は省略する。
【００３１】
次に上記のように構成された右前脚部２００の回転について説明する。図６は右前脚部２００と左前脚部３００のサーボモータＳＭ２−１，ＳＭ３−１による回転範囲を示しており、図６は図３と同じ方向（正面）から見た図である。なお、図中、θ１は胴体部１００に対して垂直な位置を基準として、胴体部内方向の回転角を、θ２は外側への回転角をそれぞれ示す。前述した「日本遠隔制御株式会社製（ＪＲ）ＮＥＳ−４７２１」等はこのように約１８０度の回転が可能である。その他の脚部についても同様に回転角が定義される。
【００３２】
図７は右前脚部２００と右後脚部４００のサーボモータＳＭ２−２，ＳＭ４−２による回転範囲を示しており、図４と同じ方向（左側面）から見た図である。なお、図中、φ１は胴体部１００に対して垂直な位置を基準として、胴体部内方向の回転角を、φ２は外側への回転角をそれぞれ示す。その他の脚部についても同様に回転角が定義される。
【００３３】
図８は右前脚部２００と右後脚部４００のサーボモータＳＭ２−３，ＳＭ４−３による回転範囲を示しており、図４と同じ方向（左側面）から見た図である。なお、図中、α１は胴体部１００に対して垂直な位置を基準として、胴体部内方向の回転角を、α２は外側への回転角をそれぞれ示す。その他の脚部についても同様に回転角が定義される。
【００３４】
以上で、４つの脚部に関する記述を終える。
【００３５】
次に、首頭部６００の構成について説明する。図９に首頭部６００を正面から見た図、図１０に真横から見た図（左側面図）、図１１に真上より見た図を、それぞれ示す。首頭部６００は２つのサーボモータより、上下、左右の自由度を有している。サーボモータＳＭ６−１のサーボホーンＳＭ６−１ＢはサーボモータＳＭ６−２に固定され、サーボモータＳＭ６−２を上下に回転させる。サーボモータＳＭ６−２のサーボホーンＳＭ６−２Ｂは頭を形造った頭部６２０に同定され、この頭部６２０を左右へ回転させる。
【００３６】
サーボモータＳＭ６−１は支持板６１０，６１１によって胴体フレーム１０１に固定されている。また、サーボモータＳＭ６−２はサーボモータＳＭ６−１の回転軸と一致するようにサーボホーンＳＭ６−１Ｂの逆側に円筒状の支持剛体ＳＭ６−２Ｃを取り付け、これを胴体フレーム１０１に固定されている支持板６１３によって支持している。本実施例では、頭部６２０には聴覚センサとしてのマイク（図示せず）が取り付けられており、後述するようにマイク出力信号AUは胴体部１００に設けられた信号処理部１１０へ送られる。
【００３７】
以上で、首頭部６００に関する記述を終える。
【００３８】
さて、以上のような機構部をもつ構成の関節型ロボット１は、各サーボモータへ回転角の指示を与えることにより、歩行したり、座ったり、寝たりと様々な行動および姿勢を取ることが可能になる。前述の「日本遠隔制御株式会社製（ＪＲ）ＮＥＳ−４７２１」等市販のラジオコントロール用のへリコプタなどに使われるサーボモータは３本のコードが出ており、電源、グラウンドおよび制御パルス信号線からなる。このサーボモータは制御パルス信号のパルス幅でモータの絶対角度を指定する。
【００３９】
具体的には、図１２に示すように、例えば１msecのパルス幅で−９０度、１．５msecのパルス幅で０度、2msecのパルス幅で＋９０度となり、その中間のパルス幅に対する回転角度は、図１３に示すように、直線的な関数で規定される。なお、サーボモータを所望の角度でホールドするためには、例えば２０msec以内に所望角度を指定するパルス幅のパルス信号を出力する動作を繰り返さなければならない。すなわち、２０msecより短い周期で周期的に、所望角度を指定するパルス幅のパルス信号を出力する必要がある。
【００４０】
そこで、本実施例では上記の制御パルス信号を胴体部１００内に設けられた信号処理部１１０において生成している。次にこの信号処理部１１０について説明する。
【００４１】
図１４に示すように、信号処理部１１０は、バッテリおよび必要な電源を生成する回路からなる電源部１２０と、各サーボモータ内のモータへ流れる電流に比例した電圧T1,T2…,T14を入力し、ＡＤ変換するＡＤ変換部１３０と、ＡＤ変換部１３０からのデジタル信号を処理し、各モータへのパルス幅を指定するマイクロプロセッサ（MPU）部１４０（基準算出手段および姿勢指定手段）と、マイクロプロセッサ部１４０により指定されたパルス幅の制御パルス信号を生成するパルス生成部１５０（姿勢制御手段）とから構成される。なお、ＡＤ変換部１３０には首頭部６００に取り付けたマイク（図示せず）からのマイク出力信号AUが入力されており、このマイク出力信号AUもＡＤ変換するようになっている。
【００４２】
以下の説明を簡便にするため、１４個のサーボモータＳＭ２−１乃至２−３，ＳＭ３−１乃至３−３，ＳＭ４−１乃至４−３，ＳＭ５−１乃至５−３，ＳＭ６−１，６−２に１，２，３…，１４と番号を割り付ける。すなわち、番号は、右前脚部２００におけるサーボモータＳＭ２−１，ＳＭ２−２，ＳＭ２−３にそれぞれ１，２，３、同様に左前脚部３００、右後脚部４００、左後脚部５００における各３つのサーボモータに順に４，５，６，７，８，９，１０，１１，１２を番号付けを行う。また、首頭部６００のサーボモータＳＭ６−１，ＳＭ６−２に１３，１４と番号付けする。そして以下、例えば番号１のサーボモータには適宜符号Ｍ１を付ける。その他の番号のサーボモータにも適宜同様の符号を付けて説明を行う。
【００４３】
前述したように、市販のサーボモータは、電源、グラウンドおよび制御パルス信号線の３本の配線を有しているが、本実施例では、サーボモータに発生している力に関する信号をフィードバックさせる必要があるため、サーボモータに流れる電流に比例する物理量を検出している。具体的にはサーボモータ内のＤＣモータを駆動する信号線に、例えば１ワット１オームの抵抗を直列に挿入し、この抵抗の両端の電圧を検出することで、そこに流れる電流を検出する。従って、本実施例では、１つのサーボモータには５本の配線が必要となる。サーボモータＭ１に追加した２本の配線からの電圧信号を簡便のためＴ１と記す。その他のサーボモータにおいても同様である。
【００４４】
このＴ１はＡＤ変換部１３０でサンプリングされるため帯域制限が必要となるが、本実施例ではＡＤ変換部１３０で上述の１ワット１オームの抵抗の両端の電圧出力を低域フィルタを用いて積分し、パルス幅方向（時間軸）の情報を電圧方向の情報（電圧レベル）に変換し、ＡＤ変換できるようにしている。なお、サーボモータ駆動は、通常、パルス幅で正転、反転あるいは駆動せず（停止）といった制御が行われる。
【００４５】
次に、信号処理部１１０の詳細について説明する。はじめに電源部１２０から説明する。本実施例では、４．８ＶのＮｉＣａｄ電池１２０Ａを利用する。各サーボモータＭ１〜Ｍ１４へは、この電源を直接Ｖ１，Ｖ２…，Ｖ１４として対応するサーボモータＭ１〜Ｍ１４に供給する。グランドも同様にＧＮＤ１，２…，１４を対応するサーボモータＭ１〜Ｍ１４に接続する。一方、ＡＤ変換部１３０、マイクロプロセッサ部１４０およびパルス生成部１５０は、単一の電源電圧Ｖｃｃ（＝５Ｖ）で動作する電子部品により構成されるため、ＤＣ−ＤＣコンバータ（１２０Ｂ）により電圧変換して生成した安定した５Ｖの直流電源を各電子部品に供給する。
【００４６】
次に、パルス生成部１５０について説明をする。図１５に示すように、パルス生成部１５０には、マイクロプロセッサ部１４０から、８ｂｉｔデータ信号data0,1,…,7、制御対象のサーボモータを指定する４ｂｉｔの信号adr0,1,2,3、およびデータラッチ用のライトパルスwrが入力されている。つまりadr0,1,2,3により上述の番号付けされたサーボモータＭ１〜Ｍ１４を指定し、data0,1,…,7により、後述するカウンタ１８３によるパルス幅を指定する。
【００４７】
パルス生成部１５０の内部は、クロック発生器１５１、カウンタスタート信号発生器１５２、アドレスデコーダ１５３および各サーボモータに対応したパルスを生成するカウンタ部１６１、１６２、…、１７４（カウンタ部１６１はサーボモータＭ１用、カウンタ部１６２はサーボモータＭ２用、…、カウンタ部１７４はサーボモータＭ１４用）により構成される。パルス生成部１５０からの出力は、各サーボモータＭ１〜Ｍ１４への制御信号Control1,2,…,14である。
【００４８】
なお、カウンタ部１６１、１６２、…、１７４はそれぞれ同じ構成なので、カウンタ部１６１に関してのみ説明する。
【００４９】
次に図１６のタイミングチャートを参照して、その動作を説明する。クロック発生器１５１は、システムのクロックを発生する。本実施例では、これをカウンタスタート信号発生器１５２およびカウンタ部１６１，１６２，…，１７４のクロックとして使用する。クロック周波数fckは１２５ｋＨｚとする。カウンタスタート信号発生器１５２内にはカウンタがあり、このクロックは０から２４９９までカウントされる。すなわち、２０msecを１周期とするタイミングが生成される。カウンタスタート信号発生器１５２は内蔵するカウンタが０のタイミングで各カウンタスタート信号s1,s2,…,s14（図１６（Ａ））を、カウンタ部１６１，１６２，…，１７４にそれぞれ出力する。
【００５０】
そして、例えばカウンタ部１６１内では、カウンタスタート信号s1によりセットリセット回路１８４をセットして、そのセット出力（図１６（Ｂ））をカウンタ１８３のカウンタイネーブルＥＮに入力し、カウンタ１８３がカウントを開始する。カウンタ１８３のカウント出力（８ｂｉｔ）は、コンパレータ１８２のＢ入力に送られ、Ａ入力と比較される。
【００５１】
アドレスデコーダ１５３は、マイクロプロセッサ部１４０からのadr0,1,2,3に対応するラッチ信号LT1,2,…,14を発生し、カウンタ部１６１乃至１７４のいずれかのラッチ回路１８１を指定する。指定されたラッチ回路１８１にはマイクロプロセッサ部１４０より入力された８ｂｉｔのパルス幅がセットされる。このセット処理は、後述するように、直前のカウンタスタート信号s1が発生した後、１０msecが経過したとき既に行われている。そして、コンパレータ１８２のＡ入力には、ラッチ回路１８１にセットされている８ｂｉｔのパルス幅が入力され、コンパレータ１８２は、Ａ入力とＢ入力が一致するとＥＱ出力よりセットリセット回路１８４のリセット端子Ｒをイネーブルにし、セットリセット回路１８４をリセットする（図１６（Ｂ））。その結果、カウンタ１８３がクリアされ、かつ、カウント動作をストップする。
【００５２】
すなわち、セットリセット回路１８４の出力は、マイクロプロセッサ部１４０がラッチ回路１８１に設定した値に対応する時間（この時間は、図１３に示すように、１．０msec乃至２．０msecの間の時間とされる）だけイネーブルになり、これがパルスControl1（図１６（Ｂ））としてサーボモータＭ１（ＳＭ２−１）に供給される。例えばラッチ回路１８１に”１２５”という値を設定すれば、カウンタ１８３が１２５ＫＨｚのクロックで”１２５”を数える時間、すなわち１msecのパルスが発生される。
【００５３】
これらの動作は、セットリセット回路１８４が再びセットされる毎に繰り返される。そして、セットリセット回路１８４は前述の通り、２０msecの周期でセットされるため、２０msecを周期として、マイクロプロセッサ部１４０によりラッチ回路１８１に設定した時間のパルス幅をもつパルスが生成される。その他のカウンタ部１６２，１６３，…，１７４も同様に動作する。
【００５４】
なお、本実施例では、すべてのカウンタスタート信号s1,s2,…,s14は同じタイミングで発生される。また、マイクロプロセッサ部１４０においてデータ入出力をインタラプト処理で行なうためのインタラプト信号int2,int3は、カウンタスタート信号発生器１５２で作られる。int2はＡＤ変換部１３０よりT1,T2…,T14を取り込むタイミングを与え、int3はパルス幅データをパルス生成部１５０へ設定するタイミングを与える。
【００５５】
さらに、後述するように、ＡＤ変換部１３０においては、Control1,2,…,14の立ち上がりのタイミング（図１６（Ｃ））がT1,T2…,T14のＡＤ変換のサンプリングのタイミングとされている（このため図１４に示すように、パルス生成部１５０の出力するControl1,2,…,14が、ＡＤ変換部１３０に供給されている）。これはカウンタスタート信号発生器１５２のカウント値が”０”のタイミングである。そして、ＡＤ変換にかかる変換時間を１msecより短いとして、int2（図１６（Ｄ））はカウンタスタート信号発生器１５２のカウント値が”１２４”（１msecに対応）のとき、取り込みタイミングを与え、int3（図１６（Ｅ））は、カウンタスタート信号発生器１５２のカウント値が”１２４９”（１０msecに対応）のとき、パルス幅データの出力タイミングを与える。
【００５６】
また、ＡＤ変換部１３０においては、T1,T2…,T14は、通常の差動入力のオペアンプを用いてバッファリングされるとともに帯域制限された後、デジタル信号に変換される。簡便のため本実施例では、ＡＤ変換部１３０が、１４個の８ｂｉｔＡＤ変換器を有し、各サーボモータＭ１〜Ｍ１４からの信号T1,T2…,T14をＡＤ変換するようになされ、ＡＤ変換のタイミングは、前述のControl1,2,…,14の立ち上がりのタイミングとされている。また、マイク出力信号AUは、図示はしないが、ＡＤ変換部１５０内のマイクアンプで増幅され、適当な低域フィルタで帯域制限されて、オーディオ用のＡＤ変換器でＡＤ変換される。本実施例では、このＡＤ変換は８ｋＨｚのサンプリング周波数で行われるものとする。
【００５７】
マイクロプロセッサ部１４０は、通常のマイクロプロセッサ、あるいはデジタルシグナルプロセッサなどで構成できる。そして、マイクロプロセッサ部１４０は大きく２つの仕事を行う。１つはマイク出力信号の処理であり、もう１つはサーボモータの制御である。これらの処理の内容については後述する。
【００５８】
以上で信号処理部１１０の構成についての説明を終える。
【００５９】
次に、関節型ロボット１全体の動作およびそれを決定する信号処理部１１０の処理について詳しく説明する。
【００６０】
本実施例では、外界とのインタラククション（相互作用）として音を想定している。音に対応して動作する方法として音声認識等が考えられるが、本実施例では簡便のため、音の大きさのみで行動動作をきめる方法を用いる。
【００６１】
図１７に、信号処理部１１０の全体の処理のフローチャートを示す。図１７に示すように、メインルーチンでは、前述のように、ステップＳ１のマイク出力信号AUの処理S_PR0Cと、ステップＳ２のサーボモータの制御M_C0NTの２つの処理が、無限ループ内で行われる。このステップＳ１とＳ２の処理の詳細は、それぞれ図１８と図１９に示されており、その説明は後述する。
【００６２】
このメインルーチンの処理に対して、ＡＤ変換部１３０からのT1乃至T14入力とパルス生成部１５０へのパルス幅設定の出力とは、インタラプト処理int2,int3で行う。この入出力は、それぞれ２０msec毎とし、このタイミングはパルス生成部１５０より指定される。ただし、ＡＤ変換部１３０からのT1,T2…,T14 の入力のタイミングとパルス生成部１５０へのパルス幅設定のタイミングはずれている。
【００６３】
また、マイクからの信号は８ＫＨｚでサンプリングされるが、これは別のインタラプトint1のタイミングでＡＤ変換部１３０から供給される。
【００６４】
マイクからの信号の取り込みint1、ＡＤ変換部１３０からのT1,T2…,T14の入力int2、パルス生成部１５０への出力int3のそれぞれのインタラプト処理のフローチャートを、図２０乃至図２２に示す。
【００６５】
図２０のインタラプト処理int1では、ステップＳ１１で、ＡＤ変換部１３０により音データを読み込み、ステップＳ１２で、マイクロプロセッサ部１４０の内部メモリ上のS_bufferへポインタを増やしながら順次書き込んでいく。この処理は、１／８０００秒の周期で行われる。
【００６６】
図２１のインタラプト処理int2では、ステップＳ２１で、ＡＤ変換部１３０によりモータの負荷 信号T1,T2,…,T14をサンプリングし、マイクロプロセッサ部４０のメモリ上のT_bufferへ順次書き込み、さらに後述のように、X2_bufferからこのときのT1,T2,…,T14に対応するパルス幅データをT_bufferにさらに付加する。そして、データが保持されたというフラグT_buffer_ flagをｏｎにする。この処理は２０msecの周期で行われる。
【００６７】
図２２のインタラプト処理int3では、ステップＳ３１で後述の遅延補償のため、マイクロプロセッサ部１４０のX1_bufferに保持されているパルス幅データ（後述するP_bufferから転送されている）を、X2_bufferに転送して、パルス幅データを遅らせる。さらにステップＳ３２で、出力すべきパルス幅データがマイクロプロセッサ部１４０のP_bufferに存在するか否かを判定し、存在するときは、ステップＳ３３でメモリ上にあるP_bufferから読み出す。
【００６８】
このP_bufferには、後述する図１８のステップＳ５５で、ロボット装置の状態を規定するステートマシンＳのステートに対応するパルス幅（すなわち、ロボット装置の姿勢（１４個のサーボモータの駆動状態）を決定するパルス幅）の時系列データが記憶されている。この読み出された１４個のパルス幅データは、ステップＳ３４でパルス生成部１５０へ出力される。これにより、上述したように、カウンタ部１６１乃至１７４よりこのパルス幅に対応する制御信号Control1乃至14が対応するサーボモータM1乃至M14に供給され、ロボットが所定の姿勢をとることになる。
【００６９】
次のステップＳ３５では後述する遅延補償のために、P_bufferのパルス幅データがX1_bufferに転送される。このデータが、上述したように、ステップＳ３１でさらにX2_bufferに転送される。
【００７０】
ステップＳ３２で、P_bufferに処理すべきパルス幅データが残存していないと判定された場合、ステップＳ３６に進み、ロボット装置のステートマシンＳの現在のステートの静止データ（例えば後述する図２３のSleepingステートＳＴ２３−１，SittingステートＳＴ２３−２，StandingステートＳＴ２３−３，walkingステートＳＴ２３−４，に位置するためのパルス幅ＰＴ２３−１，ＰＴ２３−２，ＰＴ２３−３，ＰＴ２３−４など）を読み取り、ステップＳ３７で、その静止データに、X_bufferに保持しているデータを加算する。
【００７１】
このX_bufferには、後述する図１９のステップＳ８３で、静止姿勢にあるロボット装置を、最小のエネルギ消費状態にするためのパルス幅の補正値が記憶されている。この値がステップＳ３４でパルス生成部１５０に書き込まれ、それに対応するパルス幅の制御信号Control1乃至14が出力されるので、ロボット装置の姿勢が、エネルギ消費の少ない状態に補正される。さらに、この補正値がステップＳ３５で、上述した場合と同様に、X1_bufferに書き込まれる。
【００７２】
ここで、以上の各処理において用いられる数種類のbufferについて説明する。
【００７３】
S_bufferは、マイクからの信号をint1の処理でＡＤ変換部１３０より入力するためのバッファメモリで、５１２データ（サンプル）が貯まると、図１８のS_PR0C処理内のステップＳ５１で読まれて、S_bufferのポインタがクリアされる。
【００７４】
T_bufferは、サーボモータM1乃至M14の電流を示す信号T1,T2,…,T14をＡＤ変換したデータを格納するバッファメモリで、int2（図２１のステップＳ２１）で書き込まれ、図１９のM_CONTのステップＳ７３で読み込まれ、処理される。また、そのときの指定角度に相当するパルス幅データを対応づけるため、T_bufferには、X2_bufferより供給されるパルス幅データも書かれている。
【００７５】
P_bufferには、図１８のS_PR0C内のステップＳ５５で、ステートマシンの変化に伴うロボットの動きに対応したパルス幅時系列を格納する。これは、int3の図２２のステップＳ３３で読み出されて、ステップＳ３４でパルス生成部１５０へ順次出力される。また、同一のデータが、前述のT_bufferのデータと対応づけるため、X1_bufferへも出力される。
【００７６】
図２２のステップＳ３１におけるX1_bufferとX2_bufferは、パルス生成部１５０等における遅延時間を吸収するためのバッファメモリで、２０msecの遅延回路を構成している。X1_bufferからX2_buffer、さらにT_bufferへ、１４個のパルス幅データが送られていく。
【００７７】
X_bufferは、図１９のM_C0NTのステップＳ８３で、パルス幅の微小な変化dX_iを格納する。これは、M_C0NTのステップＳ８０乃至Ｓ８２で設定され、図２２のint3のステップＳ３７で、あらかじめ記憶されている静止の姿勢データに加算される。
【００７８】
次に、S_PR0Cの処理を図１８に示すフローチャートに従って説明する。S_PR0C内ではステップＳ５１で、まず、サウンドバッファS_bufferに５１２個のデータが貯まったかどうかを判断する。この５１２個のデータは、８ｋＨｚのサンプリングであるから６４msec分の音響データである。これは、図２０のint1処理ルーチン内でデータ入力毎にインクリメントされるS_bufferのポインタが、バッファスタートポインタS_buffer_startから、５１２以上増えたかどうかで判断する。もし、６４msec分のデータがまだ、蓄積されていなければリターンする。６４msec分のデータが蓄積された場合、ステップＳ５２で音のレベルPを検出する。これは、信号のパワーの計算である。５ １２個のデータをs[0],s[1]….s[511]とすると、Pは次の式（１）で表される。
P=(s[0]2+s[1]2+…+s[511]2)/512        （１）
【００７９】
そして、ステップＳ５３において、このPがあらかじめ設定してある基準値P1より 大きいと判断すると、ステップＳ５４でステートマシンＳ１を進める方向に更新（更新１）する。また、ステップＳ５３でP1以下と判断すると、ステップＳ５７においてタイマカウンタT_countを１増やし、ステップＳ５８において、もしT-countが、あらかじめ設定した基準値T_MAXより大きいと判定すれば、ステップＳ５９でステートマシンＳ１を戻す方向に更新（更新２）する。
【００８０】
このステートマシンＳ１はロボットの姿勢と行動を意味しており、本実施例では、図２３に示すように、Sleeping,Sitting,Standing,Walkingに対応した４つのステートＳＴ２３−１乃至ＳＴ２３−４を持っており、進める方向の更新１は、もし現ステートがSleepingならSittingに、SittingならStandingに、StandingならWalkingに更新する。なお、現ステートがWalkingである場合は、進める更新（更新１）はWalkingを取るものとする。逆に、戻す方向の更新２とは、現ステートがWalkingならStandingに、StandingならSittingに、SittingならSleepingに更新する。なお、現ステートがSleepingである場合は、戻す方向の更新（更新２）とはSleepingを取るものとする。
【００８１】
ロボットに所定の姿勢をとらせるには、ステートマシンＳのステートを更新（変更）する。ステートを更新すると、ロボットに対応する姿勢をとらせるべく、サーボモータがパルスにより関節を動かして、姿勢の変更を行なう。
【００８２】
ステートの更新に伴い、図１８のステップＳ５５において、図２３のステート矢印の部分に対応するパルス幅の時系列がP_bufferへ蓄積される。P_bufferのデータは、図２２のインタラプト処理int３のステップＳ３３で順次読まれてパルス生成部１５０へ出力され、対応するパルス幅が生成される。この関節の動きを決定するパルス幅の時系列は、本実施例では、マイクロプロセッサ部１４０のメモリにあらかじめ記憶されているものとする。
【００８３】
例えば、図２３において、ステートＳＴ１のSleepingから、ステートＳＴ２のSittingへステートを進める場合、マイクロプロセッサ部１４０は、ＰＴ２のWakeupというパルス幅の時系列を発生する。同様に、ステートＳＴ２のSittingから、ステートＳＴ３のStandingへ、ステートを進める場合、ＰＴ４のStandupというパルス幅の時系列が、ステートＳＴ３のStandingから、ステートＳＴ４のWalkingへステートを進める場合、ＰＴ６のWalkというパルス幅の時系列が、それぞれ発生される。
【００８４】
また、ステートＳＴ４のWalkingから、ステートＳＴ３のStandingへ、ステートを戻す場合、ＰＴ１０のStandというパルス幅の時系列が、ステートＳＴ３のStandingから、ステートＳＴ２のSittingへ、ステートを戻す場合、ＰＴ９のSitdownというパルス幅の時系列が、ステートＳＴ２のSittingから、ステートＳＴ１のSleepingへ、ステートを戻す場合、ＰＴ８のSleepというパルス幅の時系列が、それぞれ発生される。
【００８５】
さらに、ステートＳＴ１のSleepingを維持する場合、ＰＴ１のC_Sleepという パルス幅の時系列が、ステートＳＴ２のSittingを維持する場合、ＰＴ３のC_Sitというパルス幅の時系列が、ステートＳＴ３のStandingを維持する場合、ＰＴ５のC_Standというパルス幅の時系列が、ステートＳＴ４のWalkingを維持する場合、ＰＴ７のC_Walkというパルス幅の時系列が、それぞれ発生される。
【００８６】
図１８のステップＳ５５で、このようなパルス幅の時系列がP_bufferに書き込まれた後、ステップＳ５６に進み、サウンドバッファS_bufferおよびタイマカウンタT_countをリセットして処理を終了する。
【００８７】
図２４乃至図２７に各ステートに対応する姿勢を示す。図２４はSleepingの姿勢を、図２５はSittingの姿勢を、図２６はStandingの姿勢 を、図２７（Ａ）乃至（Ｄ）はWalkingの動きを示している。なお、簡便のため脚部などは線 で表している。また、図２４は左真横から見た図であるため、右脚部はみえない（図２７のWalkingにおいては点線で右脚を表している）。
【００８８】
なおWalking以外は静止の姿勢であるが、Walkingはいわゆる４足歩行を表しており、動いているロボットの４つのタイミングでの瞬間的な姿勢である。Walkingのような動きや、前述のように姿勢を変更するためには、適切なパルス幅の時系列が必要となる。これらは、ロボットの運動方程式を解いたり、あるいは経験則で作ることが可能であり、例えば、本実施例においては、経験則により姿勢とその変化に対応するパルス幅を決定している。
【００８９】
さて、図１９のM_C0NTの処理を考えなければ、図１８のS_PROCの処理で、大きな音がすると、立ち上がって歩きだし、音がしばらくしなけれぱ、立ち止まり、座り、伏せる、という動作をする。すなわち、外界からの刺激がなければ休む、ということを、設定したステートマシンＳ１の動作、姿勢により実現している。
【００９０】
しかし、例えばSleepingに対応する姿勢は確かに各モータで消費されるエネルギは小さいが、ロボットの機構系の歪み、あるいはロボットの下の床が平でないこと、あるいは、パルス幅データの不正確さなどが原因で、脚部が床から浮いていたり、逆に床に対して脚部が角度を持っているが、ロボットの自重によりモータにかなりの負荷がかかったまま脚部が床に平行になっていたりして、かなり無駄なエネルギを消費している。
【００９１】
そこで本実施例においては、図１９のM_C0NTの処理で、エネルギ消費の極小値へ駆動系を制御することにより、この無駄なエネルギ消費を減らすようにしている。
【００９２】
最初にステップＳ７１において、現在、静止姿勢であるか否かを判定する。この判定は、P_bufferにデータがあるか否かから判定することができる。静止姿勢でない場合においては、このM_C0NTの処理は終了される。
【００９３】
いま、静止姿勢であるとすると、ステップＳ７２に進み、T_buffer_flagがオンであるか否か、すなわち、T_bufferにデータがあるか否かが判定される。２０msec毎に行われる、図２１のint2のステップＳ２１において、１４個のサーボモータＭ１乃至Ｍ１４の負荷信号T1乃至T14が取り込まれると、T_bufferにそのデータが書き込まれ、T_buffer_flagがオンされる。
【００９４】
T_buffer_flagがオンのとき、ステップＳ７３に進み、マイクロプロセッサ部１４０は、T_bufferから１４個のデータを読み出す。そして、読み出しが完了したことを表すために、T_buffer_flagをオフにする。次にステップＳ７４に進み、次式を演算する。
ＤＸ＝NEW_X - OLD_X    （２）
【００９５】
ここでベクトルＸ（=(X_1,X_2,…,X_14)）は、１４個のサーボモータの角度を表し、NEW_Xは、現在の１４個のサーボモータの角度を表し、OLD_Xは、直前の（２０msec前の）１４個のサーボモータの角度を表す。
【００９６】
この実施例においては、Ｘにサーボモータの角度そのものを割り当てずに、サーボモータへ与えるパルス幅を割り当てる。従って、Ｘの要素の１つX_iは、サーボモータMiへのパルス幅を表す（i＝１乃至１４）。この実施例においては、このパルス幅X_iを微小の値dX_iだけ増減させることで、静止姿勢におけるエネルギの極小値を求めるようにしている。
【００９７】
負荷信号Tiに対応するi番目の要素X_iがNEW_Xとして初めて取り込まれたとき、OLD_XはTiに対応するX_iであるから、上記式（２）の値ＤＸは、dX_iでもなく、また-2dX_iでもない。そこで、この場合においては、ステップＳ７４からステップＳ７７に進み、dX_iを増加した場合におけるエネルギの評価関数を求めたことを表すフラグEP_flagと、値dX_iだけ減少させた場合おけるエネルギの評価関数を求めたことを表すフラグEM_flagの両方をオフする。そして、X_bufferに+dX_iを設定する。
【００９８】
次にステップＳ７８に進み、フラグEP_flagとEM_flagが、いずれもオンであるか否かが判定される。いまの場合、いずれもオフであるから、M_CONTの処理を終了する。
【００９９】
ステップＳ７７で、X_bufferに+dX_iを設定すると、図２２に示したint3のステップＳ３７において、このX_bufferに設定されている値+dX_iが読み出され、ステップＳ３６で取り込まれた現ステートの静止データパルス幅に加算される。そして、ステップＳ３４において、このパルス幅が、パルス生成部１５０に設定され、設定したパルス幅のControliが発生される。
【０１００】
１４個のT1乃至T14を取り込んでから、２０msecが経過したとき、再び図２１のint2の処理が行われ、新たなT1乃至T14が取り込まれ、T_buffer_flagが、再びオンされる。
【０１０１】
そして、この新たなデータに対しての処理が、M_CONTにおいて同様に行われる。この場合においても、ステップＳ７４において、式（２）の演算が行われるが、このとき、NEW_XはX+dX_i（=(X_1,X_2,…,X_i+dX_i,…,X_14)）であり、OLD_XはX（(=X_1,X_2,…,X_i,…,X_14)）である。従って、式（２）のＤＸはdX_iとなる。
【０１０２】
そこで、この場合においては、ステップＳ７４からステップＳ７５に進み、消費エネルギの評価関数を演算する。
【０１０３】
ベクトルＸの評価関数をE(X)とする。この実施例においては、E(X)として、各サーボモータに流れる電流の２乗和が用いられる。いまの場合、NEW_Xは、X+dX_iであるから、評価関数E(X+dX_i)が演算される。そして、Xを+dX_iだけ増加させた場合の評価関数が求められたので、フラグEP_flagがオンされる。そして、X_bufferに-dX_iが設定される。
【０１０４】
次に、ステップＳ７８に進み、フラグEP_flagとEM_flagが、いずれもオンであるか否かが判定される。いまの場合、EP_flagのみがオンであり、EM_flagはオフであるから、M_CONTの処理がここで終了される。
【０１０５】
そして、上述した場合と同様にして、ステップＳ７５で、X_bufferに設定された-dX_iが図２２のステップＳ３７で読み出され、ステップＳ３６で取り込まれた現在の静止データに加算される。そして、ステップＳ３４において、パルス生成部１５０にそのパルス幅が設定される。
【０１０６】
従って、さらに２０msecが経過し、さらに新たなT1乃至T14が取り込まれ、図１９のステップＳ７４の演算が再び行われると、このとき、NEW_XはX-dX_iであり、OLD_XはX+dX_iであるから、式（２）の演算結果ＤＸは-2dX_iとなる。
【０１０７】
そこで、この場合においては、ステップＳ７４からステップＳ７６に進み、評価関数E(X-dX_i)を演算する。そして、フラグEM_flagをオンする。
【０１０８】
以上により、評価関数E(X+dX_i)とE(X-dX_i)の両方が得られたので、フラグEP_flagとEM_flagの両方がオンと判定され、ステップＳ７９に進む。
【０１０９】
ステップＳ７９においては、次式が演算される。
dE_i=E(X+dX_i) -E (X-dX_i)    （３）
【０１１０】
そして、このdE_iが、０であるか、正であるか、負であるかを判定する。この値が負である場合、ステップＳ８０に進み、XにdX_iを加算した値（=X+dX_i）を新たなXとする。また、この値が正である場合においては、ステップＳ８２に進み、XからdX_iを引いた値（=X-dX_i）を新たなXとする。また、この値が０である場合においては、ステップＳ８１に進み、Xの値はそのままとする。
【０１１１】
次に、ステップＳ８３に進み、ステップＳ８０乃至Ｓ８２で得られたパルス幅データXを、静止姿勢の新たなパルス幅データとしてパルス生成部１５０に設定する。
【０１１２】
次にステップＳ８４に進み、次のiを乱数で選択し、X_bufferをクリアする（全ての要素を０にする）。
【０１１３】
以上のようにして、１４個のサーボモータのいずれか１つを等確率で選択し、対応するサーボモータのインデックスをiとして、このiを確率的な降下法に従って変化させ、評価関数の極小値の探索が行われる。
【０１１４】
次に、第２実施例について説明する  第１実施例では消費エネルギをおさえるため、関節の角度を徐々に変えていったが、第２実施例ではさらにアクチュエータへのエネルギ供給を行なわいようにする。あるいは、等価な制御を行なうものである。第２実施例の第１実施例と異なる点は、マイクロプロセッサ部１４０の処理と、パルス生成部１５０の出力を、もう１つ別の回路で処理した後、パルスとしてNew_Control1,2,…,14が出力される点である。第２実施例は第１実施例とほとんど同じ構成であるので、異なる構成のみ説明し、同一の構成には同じ符号をつけ説明は省略する。
【０１１５】
図２８に第２実施例の信号処理部１１０の構成を示す。前述したように、第２実施例と第１実施例との違いは、マイクロプロセッサ部１４０の処理と、パルス生成部１１０の出力の処理であり、第２実施例では、図２８に示すように、符号１７４をマイクロプロセッサ部とし、パルス生成部７５の出力をパルス制御部１６０へ入力するものとする。パルス制御部１６０へはマイクロプロセッサ部１４０から、halt1,2,…,14という各サーボモータＭ１〜Ｍ１４に対応する１４ビットの制御信号が入力される。
【０１１６】
パルス制御部１６０では、図２９に示すように、アンド回路１６１−１で、前述のhalt1信号とControl1信号との論理積がとられて、New_Control1として出力される。すなわち、サーボモータＭ１へのパルス幅信号New_Control1は、マイクロプロセッサ部１４０により出力された制御信号halt1によって、出力されなくなるように制御される。その他のサーボモータＭ２〜Ｍ１４に関しても同様である。
【０１１７】
ただし、haltiは負論理であり、haltiがアクティブとは、Ｌｏｗレベル意味する。アンド回路１６１−ｉは、haltiをＬｏｗにすることで、その出力をＬｏｗに下げ続ける。
【０１１８】
本実施例で用いているようなサーボモータ（例えば、ＪＲ社製、ＮＥＳ−４７２１）は、制御パルスをＬｏｗに落とし続けると、モータへの制御が行われなくなる。すなわち、どのような角度であってもモータへは電流が流れないような構成になっている。第２実施例ではこの事実を利用して、サーボモータへのエネルギ供給を行なわなくする。
【０１１９】
次に、マイクロプロセッサ部１４０の処理について説明する。第２実施例と第１実施例との違いは、ステートマシンの構成とS_PROC内のステートマシン更新の方法である。
【０１２０】
図３０に第２実施例で用いるステートマシンＳ２を示す。第１実施例の図２３に示したステートマシンＳとの違いは、図３０に示すように、ステートＳＴ１１のHalt_Sleepingというステートが、ステートＳＴ１のSleepingに接続され たことである。
【０１２１】
第２実施例においてもステートマシンＳ２を進める方向に更新するとは、次の動作をすることとする。すなわち、現ステートがステートＳＴ１１のHalt_Sleepingであれば、ステートＳＴ１のSleepingに、Sleepingであれば、ステートＳＴ２のSittingに、Sittingであれば、ステートＳＴ３のStandingに、Standingであれば、ステートＳＴ４のWalkingへ、ステートをそれぞれ更新する。もし、現ステートがWalkingであれば、Walkingに更新するものとする。
【０１２２】
第２実施例においてステートマシンＳ２を戻す方向に更新するとは、次の動作をすることである。すなわち、現ステートがWalkingであればStandingに、StandingであればSittingに、SittingであればSleepingに、SleepingであればHalt_Sleepingに更新する。現ステートがHalt_SleepingであればHalt_Sleepingに更新するものとする。
【０１２３】
各ステート間への更新に伴って対応するパルス幅データの時系列が出力される。例えば、SleepingからSittingへの更新に伴い、第１実施例と 同様に、ＰＴ２のWakeupというパルス幅の時系列を発生する。その他のパルス幅データの時系列出力は第１実施例と同じであるので説明は省略する（図２３参照）。なお、Halt_Sleepingにつながる矢印にはパルス幅データは対応していないものとする。
【０１２４】
一方、これに伴って、S_PR0CにHalt_Sleepingに対応する処理が加えられる。 このフローチャートを図３１に示す。加わった処理は図３１のステップＳ１１０乃至Ｓ１１３である。その他のステップＳ１０１乃至Ｓ１０９の処理は、図１８のステップＳ１乃至Ｓ５９と同じであるのでその証明は省略する。
【０１２５】
ステップＳ１１０においては、P_bufferのパルス幅時系列がなくなったことが判断され、かつ、ステップＳ１１１において、現ステートがHalt_Sleepingであるか否かが判定される。現ステートがHalt_Sleepingであれば、ステップＳ１１２においてHalt信号halt1,2,…,14をｏｎ（すなわち、Ｌｏｗレベル）とし、そうでなければステップＳ１１３においてｏｆｆ（Ｈｉｇｈレベル）として出力する。ステップＳ１１０でP_bufferが空ではないと判定されるか、ステップＳ１１１で現ステートがHalt_Sleepingでないと判定された場合も、ステップＳ１１３でHalt信号はｏｆｆされる。
【０１２６】
これにより、大きな音がすれば起き上がって歩き回り、音がしなくなれば、すわって、伏せて、そして力が抜けた状態で伏せ（Halt_Sleeping）を続けることになる。最後の状態では、サーボモータは刺激の音がしない限り、トルクを発生しない。第１実施例では、Sleepingの状態で、エネルギ消費の極小点になったとしても、振動やあるいは何らかの原因で関節に力が加わると、元の角度になるようにモータが動きだす。従って、エネルギが消費される。しかしながら、第２実施例では、サーボモータに関しては全くエネルギを消費しなくなる。そして、大きな音がすれば、halt1,2,…,14をＨ ｉｇｈレベルにするだけで、伏せの姿勢に戻ることができる。
【０１２７】
第２実施例でのポイントは、SleepingにおいてHalt on状態にして、各サーボモータがトルクを発生できなくしたときの姿勢から、すなわち、Halt_Sleepingにおける姿勢から、再びHalt offとして、halt1,2,…,14をＨｉｇｈレベルにするだけで、Sleepingの姿勢に戻れることにある。すなわち、ある姿勢（第１の姿勢）からサーボモータヘのエネルギ供給を禁止したとき取られるロボットの姿勢が、再び、エネルギ供給を禁止する直前の姿勢（第１の姿勢）を直接指定するだけで取ることが可能になっている。そのような姿勢をHalt onにする前に取っておくことがポイントとなる。
【０１２８】
第１実施例での図２４乃至図２６におけるSleeping,sitting,standingの静止の姿勢は、そのような条件を満たしている。図３２乃至３４に、それぞれの姿勢でHalt onした場合のHalt_Sleeping,Halt_sitting,Halt_standingの姿勢を、図２４乃至図２６の姿勢に対応させて示す。ただし、首頭部６００に関してはHalt onしていない例である。
【０１２９】
もちろん、こうならない姿勢も一般には存在する。図３５にその例を示す。図３５に示すように、Playingの姿勢でHalt onすると、Halt_Playingの姿勢になるが、この状態からHalt offしても、Playingの姿勢には戻らない。これは、Halt onしたときに、ロボットの重心を支える構造が変化してしまうために起こる。また、図２５と図２６のsittingとstandingの姿勢でも、サーボモータのトルクが不十分であれば、Halt offで、元の姿勢に戻らない場合がある。このように、単純にHalt offしただけでは、前述のように、正常な動作が図３０のようなステートマシンＳ２では確保できない姿勢がある。
【０１３０】
しかしながら、図３２乃至図３５のように、Halt onしたときの姿勢が予測可能であれば、図３６の様なステートマシンを考えることによって正常な動作が可能になる。例えば、図３５のPlayingの姿勢をステートＳＴ２１のPlayingというステートとし、ステートＳＴ３のStandingから、あらかじめ設定したパルス幅の時系列データＰＴ２１のStand2Playによって、図３５のPlayingの姿勢が取れるようにする。逆にPlayingからStandingの姿勢へは、ＰＴ２２のPlay2Standのパルス幅時系列によって変化できるようにする。さらに、PlayingからHalt onすることによって作られるHalt_Playingの姿勢を、ＳＴ２２のHalt_Playingというステートに割り付ける。
【０１３１】
図３０のステートマシンＳ２においては、Halt onでとられる姿勢Halt_Sleepingは、Sleepingと実質的に同一の姿勢であったが、図３６のステートマシンＳ３では、PlayingのステートＳＴ２１においてHalt onされると、Halt_PlayingのステートＳＴ２２に移行し、ＰＴ２３のC_Halt_Playという図３５のHalt_Playingに相当する姿勢のパルス幅データを出力しながらhalt1,2,…,14をＬｏｗにしておくものとする。また、Halt_PlayingからStandingのステートへ変換する際に、ＰＴ２４のHalt_Play2Standというパルス幅時系列を出力することによって、Standingの姿勢を取るようにする。このようにHalt on時の姿勢をステートに加え、その姿勢からステートマシンのどこかのステートに移れるように動きを設定することにより、図３５のような状態にも対処できる。
【０１３２】
なお、ステートマシンの更新にもPlayingをいれるように変更しなければならな い。例えば、現ステートがStandingのとき、ステートマシンを進める方向に更新するとは、PlayingかWalkingのどちらかを確率的に選ぶものとする。また、現ステートがPlayingの時は、C_Playのパルス幅時系列を出力してPlayingを取り続けるものとする。さらに、現ステートがHalt_Playingであるならば、Halt_Play2Standのパルス時系列ＰＴ２４を出力してStandingに進めるものとする。
【０１３３】
現ステートがPlayingのとき、ステートマシンを戻す方向に更新するとは、Play2Standのパルス時系列ＰＴ２２を出力して、Standingへ更新するものとする。現ステートがHalt_Playingであれば、C_Halt_Playのパルス時系列ＰＴ２３を出力してHalt_Playingを取り続けるものとする。その他は、図３０と同様である。
【０１３４】
また、例えば、図２６のStandingの姿勢においてエネルギ供給を停止し、図３４のHalt_Standingの姿勢に変更した場合において、エネルギ供給を再開するだけでは、トルクが足りなくて、図３４のHalt_Standingの姿勢から、図２６のStandingの姿勢が取れないとき、図３６のようなステートマシンによって対応することが容易にできる。すなわち、Halt_Standingの姿勢からStandingの姿勢へ移行するようなパルス幅データの時系列Halt_Play2Stand（ＰＴ２４）を設定することにより、Standingの姿勢においてもエネルギ供給を停止することができる。
【０１３５】
ここで、従来技術の項でも述べたがコンピュータシステムにおけるフロッピディスクのドライブとの対比を行なう。フロッピディスクがアクセスされない時に回転を停止させるのは、ディスク面の保護と同時に、バッテリの消耗を防ぐ目的も持っている。回転を停止するとき、ディスクからヘッドを浮かせたり、ヘッドを所定の位置に格納したりするが、これはディスク保護のためであり、第２実施例で示したロボットの場合とは目的が異なる。
【０１３６】
すなわち、フロッピディスクのドライブの例では、ディスクの回転を停止させる際、あるいはディスクを再び回転させる際、へッドの位置処理を行なわなくとも、駆動系の動作は正常になるのが一般的である。
【０１３７】
これに対して、ロボットにおいては、一般的な姿勢から電源を切ると、その位置あるいは姿勢が重心の影響などで異なるものになるのが一般的である。そして、再び電源を入れた場合、いきなり電源を切る前の位置を指定しても、その姿勢を取らない（戻らない）のが一般的であり、第２実施例の図３２乃至図３４に対応する図２４乃至図２６におけるSleeping,sitting,standingの静止の姿勢はむしろ特殊な姿勢である。また、図２４乃至図２６の静止の姿勢でもトルクが十分でないと、図３２乃至図３４のようなHalt_Sleeping,Halt_sitting,Halt_standingの姿勢から、元の姿勢（図２４乃至図２６の姿勢）には直接位置の指定では戻れないのが一般的である。さらに、図３５の場合は、トルクがいくらあっても元の姿勢には直接位置の指定では戻れない。
【０１３８】
このようなことは、電源を切ったときに、単にディスクに触れる、あるいはぶつかるのを避けるためヘッドを格納するフロッピディスクドライブの場合には考慮する必要がなかったことである。また、座業用ロボットの原点位置復帰に関しても同様である。
【０１３９】
上記実施例では、アクチュエータとして市販のサーボモータあるいはそれを改造したものを使用するとしたが、これに限らず、エネルギを消費するあらゆるアクチュエータに適用できる。例えば形状記憶合金を用いることもできる。
【０１４０】
また、上記実施例では関節部をサーボモータで直接駆動していたが、ワイヤ、ギヤ、リンクなどを用いて関節的に駆動する方法でもよい。また、液体や気体を用いて駆動することもできる。
【０１４１】
さらに、上記実施例では、サーボモータに流れる電流の２乗和を評価基準にしていたが、それに限定されるものではない。サーボモータを制御することにより変化する消費エネルギと関係する評価基準であればどんなものでもそれを利用できる。
【０１４２】
また、上記実施例では、図２４乃至図２７、図３２乃至図３４に示すような姿勢を用いたが、それに限定されるものではない。さらに、上記実施例では、人間があらかじめ決定した姿勢を用いたが、静止姿勢であれば、あらゆる姿勢が容易に適用可能である。
【０１４３】
また、上記実施例では、４足で１つの脚が３自由度を持つものであったが、それに限定されるものではなく、２足、５足、６足など任意の数の脚（あるいは手）や自由度を持つロボット、あるいは、首や頭のみを持ち、移動はタイヤでおこなうロボットなどでも、アクチュエータを動かすことによって、静止状態の消費エネルギが異なるような機構系を持つロボットであれば適用できる。消費エネルギは、アクチュエータの熱から検出してもよい。
【０１４４】
さらに、上記実施例では、すべてのアクチュエータに対して式（２）を用いて評価していたが、必ずしもすべてのアクチュエータとする必要はない。適当に、選ばれた特定のアクチュエータに対してのみ適用してもよい。選び方として、例えば、あらかじめ静止姿勢に対応して消費エネルギに影響しそうもないアクチュエータは変化させなくともよい。その選び方は限定されない。
【０１４５】
また、上記実施例では、式（２）を評価して評価基準の極小値を探索したが、それに限定されるものではない。例えば、通常のロボット制御で行なうようなロボット本体の構造と重量分布をモデル化して、現在の姿勢と重力方向の関係、床の反力のモデル化を行えば静止状態の力のバランスのために、どのアクチュエータにいくらのトルクが必要であるかを解く方程式ができる。トルクは直接消費エネルギに関係するため、トルクの２乗和などをアクチュエータの角度などで微分すれば、勾配法などを用いて極小点を探索できる。このような一般的な極小点探索法が利用できる。
【０１４６】
さらに、上記実施例では、音を用いてステートマシンを更新して複数の静止姿勢をとっているが、それに限定されるものではない。外部からの刺激信号は必ずしも必要ではなく、また、刺激信号を用いる場合、音以外でもよく、またその数は複数であってもよい。
【０１４７】
また、上記実施例では、静止姿勢の時であればいつでも極小値を探す更新を行っていたが、それに限定されるものではない。例えば、適当な姿勢であるSleepingのときのみ行なうようにしてもよい。
【０１４８】
さらに、上記実施例では、すべてのアクチュエータが静止の姿勢に関係していたが、それに限定されるものではない。例えば、首頭部は動いている状態で、その他の部位が静止しているのであれば、静止に関係するアクチュエータが消費するエネルギに関係する評価基準に対して極小直を探索すればよい。
【０１４９】
また、上記実施例では、評価基準の極小値を探索していたが、探索範囲を限定してもよい。また、探索するのは、必ずしも完全な極小値である必要はない。
【０１５０】
さらに、上記実施例では、図１９のステップＳ８３において、記憶してある次データを更新、すなわち学習しているが、このように更新せずに、初期データを持ち続け、そのステートになるたびに初期データから始めてもよい。
【０１５１】
また、上記実施例では、エネルギ供給の制限をアンド回路１６１−ｉを用いて行なうようにしたが、それに限定されるものではない。例えば、モータドライブ用の回路への電源を電子的な制御でオフしてもよい。あるいは、モータ制御のフィードバックを電子的に切ることによって等価的にトルクが発生しないようにしてもよい。
【０１５２】
さらに、上記実施例では、エネルギ供給を完全に禁止するようにしたが、それに限定されるものではない。エネルギ供給に制限を設けることにより消費エネルギを抑えるようにしてもよい。これはモータの位置制御のフィードバックのゲインを下げることなどで容易に実現でき、その方法も任意である。
【０１５３】
また、上記実施例では、エネルギ供給を瞬間的に禁止するようにしたが、徐々に禁止することにより衝撃を抑制することも可能である。これは、モータの位置制御のフィードバックのゲインを時間の経過と共に徐々に下げることで容易に実現できる。
【０１５４】
さらに、上記実施例では外界からの刺激がない場合、エネルギ供給を制限するか、あるいは停止するという処理を行なうが、内部状態のみでこの処理を行なったり、スイッチなどでこの処理を強制的に行なうようにしてもよい。
【０１５５】
【発明の効果】
以上説明したように、請求項１のロボット装置および請求項２８に記載のロボット装置の制御方法によれば、機構部の静止姿勢において消費するエネルギに関する評価基準を求め、評価基準より静止姿勢において消費するエネルギが小さくなる姿勢を検索し、検索した姿勢に制御するようにしたので、静止姿勢における消費エネルギを最小とし、安定した静止姿勢を保持することができる。
【０１５６】
さらに、駆動手段へ供給するエネルギを制限し、エネルギが制限された後、再度供給されたとき、エネルギを制限したときの姿勢から静止姿勢に復帰させるようにすることにより、確実に静止姿勢に復帰させることができる。
【図面の簡単な説明】
【図１】本発明を適用した関節型ロボットの第１実施例の構成を示す斜視図である。
【図２】図１の実施例の構成を示す平面図である。
【図３】図１の実施例の構成を示す正面図である。
【図４】図１の実施例の構成を示す右側面図である。
【図５】図１の実施例のサーボモータの構成を示す図である。
【図６】図１の実施例の関節の可動範囲を説明する正面図である。
【図７】図１の実施例の関節の可動範囲を説明する右側面図である。
【図８】図１の実施例の関節の可動範囲を説明する右側面図である。
【図９】図１の実施例の首頭部の構成を示す正面図である。
【図１０】図１の実施例の首頭部の構成を示す左側面図である。
【図１１】図１の実施例の首頭部の構成を示す平面図である。
【図１２】図１の実施例のサーボモータの回転角の制御を説明する図である。
【図１３】図１の実施例のサーボモータの回転角の制御を説明する図である。
【図１４】図１の実施例の胴体部内に設けられた信号処理部の構成を示すブロック図である。
【図１５】図１４のパルス生成部の構成を示すブロック図である。
【図１６】図１５の実施例の動作を説明するタイムチャートである。
【図１７】図１４の信号処理部の全体の処理の流れを示すフローチャートである。
【図１８】図１７のステップＳ１のS_PROC処理の流れを示すフローチャートである。
【図１９】図１７のステップＳ２のM_CONT処理の流れを示すフローチャートである。
【図２０】図１４の信号処理部における第１のインタラプト処理の流れを示すフローチャートである。
【図２１】図１４の信号処理部における第２のインタラプト処理の流れを示すフローチャートである。
【図２２】図１４の信号処理部における第３のインタラプト処理の流れを示すフローチャートである。
【図２３】図１の実施例の姿勢と行動を示すステートマシンを説明する図である。
【図２４】図２３のステートマシンによる関節型ロボットの姿勢を説明する図である。
【図２５】図２３のステートマシンによる関節型ロボットの姿勢を説明する図である。
【図２６】図２３のステートマシンによる関節型ロボットの姿勢を説明する図である。
【図２７】図２３のステートマシンによる関節型ロボットの姿勢を説明する図である。
【図２８】本発明の信号処理部の第２実施例の構成を示すブロック図である。
【図２９】図２８のパルス制御部の構成を示すブロック図である。
【図３０】図２８の実施例におけるステートマシンを説明する図である。
【図３１】図２８の実施例におけるS_PROC処理の流れを示すフローチャートである。
【図３２】図３０のステートマシンによる関節型ロボットの姿勢を説明する図である。
【図３３】図３０のステートマシンによる関節型ロボットの姿勢を説明する図である。
【図３４】図３０のステートマシンによる関節型ロボットの姿勢を説明する図である。
【図３５】図３０のステートマシンによる関節型ロボットの姿勢を説明する図である。
【図３６】図３０のステートマシンの変形例を示す図である。
【符号の説明】
１  関節型ロボット
１００  胴体部
１０１  胴体フレーム
１１０  信号処理部
１２０  電源部
１３０  ＡＤ変換部
１４０  マイクロプロセッサ部
１５０  パルス生成部
１５１  クロック発生器
１５２  カウンタスタート信号発生器
１５３  アドレスデコーダ
１６１乃至１７４  カウンタ部
１８１  ラッチ回路
１８２  コンパレータ
１８３  カウンタ
１８４  セットリセット回路
２００  右前脚部
２０１，２０２  右前脚支持部
３００  左前脚部
３０１，３０２  左前脚支持部
４００  右後脚部
４０１，４０２  右後脚支持部
５００  左後脚部
５０１，５０２  左後脚支持部
６００  首頭部
【図１】
0003687076.tif 000002
【図２】
0003687076.tif 000003
【図３】
0003687076.tif 000004
【図４】
0003687076.tif 000005
【図５】
0003687076.tif 000006
【図６】
0003687076.tif 000007
【図７】
0003687076.tif 000008
【図８】
0003687076.tif 000009
【図９】
0003687076.tif 000010
【図１０】
0003687076.tif 000011
【図１１】
0003687076.tif 000012
【図１２】
0003687076.tif 000013
【図１３】
0003687076.tif 000014
【図１４】
0003687076.tif 000015
【図１５】
0003687076.tif 000016
【図１６】
0003687076.tif 000017
【図１７】
0003687076.tif 000018
【図１８】
0003687076.tif 000019
【図１９】
0003687076.tif 000020
【図２０】
0003687076.tif 000021
【図２１】
0003687076.tif 000022
【図２２】
0003687076.tif 000023
【図２３】
0003687076.tif 000024
【図２４】
0003687076.tif 000025
【図２５】
0003687076.tif 000026
【図２６】
0003687076.tif 000027
【図２７】
0003687076.tif 000028
【図２８】
0003687076.tif 000029
【図２９】
0003687076.tif 000030
【図３０】
0003687076.tif 000031
【図３１】
0003687076.tif 000032
【図３２】
0003687076.tif 000033
【図３３】
0003687076.tif 000034
【図３４】
0003687076.tif 000035
【図３５】
0003687076.tif 000036
【図３６】
0003687076.tif 000037