(57)【特許請求の範囲】
【請求項１】
駆動輪と、鉛直方向に対して駆動輪の車軸の回りに傾斜可能なボディとを有しており、駆動輪を駆動することによって車軸回りのボディのバランスを維持しながら走行する倒立振子型車輪移動体であり、
ボディから下方へ向けて伸びており、その下端が駆動輪の車軸の前後で接地しているとともに、ボディの傾斜に応じて下端がボディに対して上下する支持部材と、
当該車輪移動体の速度が速度許容範囲を超える走行速度条件が成立した場合に支持部材の下端のボディに対する位置を固定するロック機構と、
を備えることを特徴とする倒立振子型車輪移動体。
【請求項２】
ロック機構は、倒立振子制御の開始と同時に支持部材の下端の位置の固定を解除することを特徴とする請求項１に記載の倒立振子型車輪移動体。
【請求項３】
支持部材の下端に補助輪が取り付けられており、補助輪の回転角速度と駆動輪の回転角速度差に基づいて、駆動輪のスリップを検出することを特徴とする請求項１又は２に記載の倒立振子型車輪移動体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、倒立振子型車輪移動体に関する。
【背景技術】
【０００２】
倒立振子型車輪移動体が知られている。本明細書にいう「倒立振子型車輪移動体」とは、ひとつの駆動輪、或いは同軸に配置された複数の駆動輪によって走行する車輪移動体であり、車軸回りに傾斜可能なボディのバランスを保ちながら走行する移動体を意味する。本明細書では、「倒立振子型車輪移動体」を単に「移動体」と称することがある。
ボディの重心は駆動輪の車軸よりも上方に位置している。そのため、制御しない状態では、この移動体は不安定である。ここでいう「不安定」とは、ボディのバランスが保たれている状態において小さな外乱が加わるだけで、ボディのバランスが崩れてしまうことを意味する。従って、ボディと車輪の全状態量もしくはその一部の状態量をフィードバックすることでボディの姿勢（鉛直方向に対するボディの傾斜角）を安定化する制御を行う必要がある。そのような制御を本明細書では倒立振子制御と称する。簡単にいえば、駆動輪を駆動することによってボディの傾斜角を維持する制御を倒立振子制御という。
倒立振子型車輪移動体は、制御的な観点からいうと不安定システムである。すなわち、倒立振子制御を停止するとボディが転倒する。或いは、倒立振子制御が適切に機能しないとボディが転倒する。従って、倒立振子型車輪移動体は、ボディの転倒を防止するために補助的な支持部材を有している。例えば、昇降可能な支持脚を備えた倒立振子制御型の移動ロボットが特許文献１に開示されている。
特許文献１に開示された移動ロボットは、倒立振子制御の作動時には支持脚を地面の上方に離間させて維持する。倒立振子制御を停止する場合、或いは不測の事態によって倒立振子制御が適切に機能しなくなった場合に、支持脚を降ろして接地させる。支持脚がボディを支持することによって転倒を防止する。
【０００３】
【特許文献１】特開２００６−２４７８０２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
特許文献１の移動ロボットは、倒立振子制御が機能している間は、支持脚を接地させない。倒立振子制御の停止時、或いは、倒立振子制御が適切に機能しなくなった時点で、支持脚を降下させる。従って、倒立振子制御が適切に機能しなくなってから支持脚が接地するまでにタイムラグが生じる。このタイムラグの期間では、ボディの傾斜角が不安定となる。タイムラグの期間では、ボディの傾斜角が変化してしまう虞がある。また、人を載せる倒立振子型車輪移動体の場合、ボディの傾斜角を一定に制御できないタイムラグの期間は、搭乗者に不安感を与える。
不測の事態に限らず、倒立振子制御を停止する場合でも、倒立振子制御を停止してから支持脚が接地するまでにタイムラグが生じると同じ課題が起こり得る。
不測の事態が発生して倒立振子制御が適切に機能しなくなった場合、或いは、倒立振子制御を停止する場合に、タイムラグなく支持部材によってボディを支持することができる倒立振子型車輪移動体が望まれている。
【課題を解決するための手段】
【０００５】
本発明の倒立振子型車輪移動体は、ボディから下方へ向けて伸びており、その下端が駆動輪の車軸の前後で接地しているとともに、鉛直方向に対するボディの傾斜に応じて下端がボディに対して相対的に上下する支持部材と、ボディに対する支持部材の下端の相対的な位置を固定するロック機構を備えている。
支持部材は、例えばバネによってボディに取り付けられている。支持部材の下端が、倒立振子制御の動作／非動作に関わらずに接地しているとともに、ボディの傾斜に応じてボディに対して上下する。従って、支持部材は、常に接地しているものの、倒立振子制御を妨げない。不測の事態が生じて倒立振子制御が適切に機能しなくなった場合、或いは、倒立振子制御を停止する場合に、ロック機構を作動させて支持部材の下端のボディに対する位置を固定する。上下動が可能な支持部材とロック機構を備えることによって、倒立振子制御が機能している状態から機能しない状態に移行するときに、タイムラグなく支持部材でボディを支持することができる。
【０００６】
倒立振子型車輪移動体は、駆動輪（ひとつの車輪、或いは、同軸に配置された複数の車輪）のみで接地しながらボディのバランスを維持する移動体である。従って、倒立振子制御が正常に機能している間は、駆動輪以外の部材を接地させないことが従来の常識であった。本発明は、その従来の常識を覆し、倒立振子制御が機能している状態であっても支持部材を上下可能に接地させておくという斬新な発想によって、倒立振子制御が機能している状態から機能しない状態に移行するときにタイムラグなく支持部材でボディを支持することに成功した。
【０００７】
以下では、「ボディに対する支持部材の下端の位置を固定する」ことを、単純に「支持部材を固定する」、或いは「支持部材をロックする」と表現することがある。
ロック機構は、不測の事態が生じて倒立振子制御が適切に機能しなくなった場合に支持部材を固定する。或いは、ロック機構は、不測の事態でなくとも、倒立振子制御を停止するときに支持部材を固定してよい。
不測の事態の発生は、例えば、次のいずれかの条件の成立によって特定されてよい。
（１）鉛直方向に対するボディの傾斜角が角度許容範囲を超える傾斜角条件
（２）ボディの傾斜角速度が傾斜角速度許容範囲を超える傾斜角速度条件
（３）移動体の速度が速度許容範囲を超える走行速度条件
いずれの条件も、倒立振子制御が適切に機能しなくなる状態を特定する条件である。
【０００８】
支持部材の長さをひとたび固定したロック機構は、倒立振子制御の開始と同時に支持部材の固定を解除してよい。倒立振子制御の非作動状態から、作動状態に移行するときに、ボディの傾斜角が変化することを防止できる。
【０００９】
倒立振子制御時にも支持部材が接地していることを利用して、駆動輪のスリップを検出することができる。具体的には、支持部材の下端に補助輪を取り付けておく。駆動輪の回転角速度と補助輪の回転角速度が相違する場合に、スリップの発生を検出することができる。
スリップが発生すると、ボディのバランスを維持することが困難になり転倒しやすくなる。スリップの発生を検知できると、これを制御に反映して、スリップ時に転倒し難くすることができる。例えば、スリップの発生時に、倒立制御を停止するとともにロック機構を作動させればよい。
【発明の効果】
【００１０】
本発明によれば、倒立振子制御が適切に機能しなくなった場合、或いは、倒立振子制御を停止する場合に、タイムラグなくボディを安定に支持することができる倒立振子型車輪移動体を実現することができる。
【発明を実施するための最良の形態】
【００１１】
実施例の移動体の付加的な技術的特徴を列記する。
（第１特徴）支持脚２０は、弾性部材（バネ２４）によって、その下端が常に接地するように付勢されている。バネによる付勢力は、ボディ１０の傾斜を阻害しない程度に弱く設定してよい。
（第２特徴）スリップが検知された場合に、倒立振子制御を停止する。
【実施例】
【００１２】
図面を参照して、本発明に好適な倒立振子型車輪移動体を説明する。図１は、倒立振子型車輪移動体１００の模式的正面図（図１（Ａ））と模式的側面図（図１（Ｂ））である。図２は、倒立振子型車輪移動体１００のボディ１０が傾いた状態を示す模式的側面図である。以下、「倒立振子型車輪移動体１００」を単に「移動体１００」と称する場合がある。なお、図１、２では、理解のし易さのために、ボディ１０に内蔵されている部品も実線で描いてある。
図１、２において、符号Ｂは地面を示しており、符号Ｇはボディ１０の重心を示している。
移動体１００は、ボディ１０と、一対の駆動輪１６と、一対の支持脚２０ａ、２０ｂを備えている。一対の駆動輪１６は、同軸に配置されている。夫々の駆動輪１６は、車軸１４を介してモータ１２に連結されている。即ち、駆動輪１６は、モータ１２によって駆動される。
一対の支持脚２０ａ、２０ｂは、同じ構造を有している。一対の支持脚２０ａ、２０ｂは、それらの下端が車軸１４の前後で接地している。以下では、一方の支持脚２０ａについて説明し、他方の支持脚２０ｂについては説明を省略する。
支持脚２０ａは、ボディ１０から下方に伸びている。支持脚２０ａの下端に、補助輪２２ａが取り付けられている。支持脚２０ａは、バネ２４ａによってボディ１０に連結されている。支持脚２０ａは、バネ２４ａによって、補助輪２２ａが常に接地するように、下方に付勢されている。また、支持脚２０ａは、バネ２４ａによって、ボディ１０の上下方向にスライドすることができる。即ち支持脚２０ａの下端（補助輪２２ａ）は、接地を維持しながらボディ１０の傾斜に応じてボディ１０に対して上下する。バネ２４ａによる付勢力は、ボディ１０の傾斜を阻害しない程度に弱く設定されている。すなわち、バネ２４ａの付勢力だけでは、ボディ１０が倒れることを防止できない。
支持脚２０ａの途中に、ボディ１０に対する支持脚２０ａの下端の相対的な位置を固定するためのブレーキ２６ａ（ロック機構）が配置されている。ブレーキ２６ａは、ボディ１０に内蔵されたコントローラ３０から指令によって、支持脚２０ａの下端の位置を固定したり、その固定を解除したりする。以下では、「支持脚２０ａの下端の位置を固定する」ことを、「支持脚２０ａをロックする」と表現することがある。
ボディ１０には、ボディ１０の車軸１４回りの傾斜角速度を検出するためのジャイロ３２が搭載されている。ジャイロ３２の出力は、コントローラ３０に送られる。
【００１３】
図示を省略しているが、移動体１００には、夫々の補助輪２２ａ、２２ｂの回転角を検出するための回転角センサ（例えばエンコーダ）と、駆動輪１６の回転角を検出するための回転角センサ（例えばエンコーダ）が搭載されている。補助輪２２ａ、２２ｂ、或いは駆動輪１６の回転角から、回転角速度を算出することができる。
【００１４】
図２を参照して、倒立振子制御について概説する。図２において、直線Ｐは、重心Ｇを通る鉛直線を表している。直線Ｓは、重心Ｇと車軸１４を通る直線を表している。角度Ａｂは、鉛直線Ｐに対するボディ１０の傾き（車軸１４回りのボディ１０の傾き：ボディ傾斜角Ａｂと称する）を表している。
一対の支持脚２０ａ、２０ｂは、ブレーキ２６ａ、２６ｂがロックを解除している間は、ボディ１０の傾斜に応じて伸縮する。そのため、ボディ１０は、ブレーキ２６ａ、２６ｂがロックを解除している間は、倒立振子制御が作動していなければ倒れてしまう。倒立振子制御とは、駆動輪を駆動してボディ１０を倒れないようにする制御をいう。「ボディ１０を倒れないようにする」ことを、「ボディ１０のバランスを維持する」と表現することがある。
図２に示すように、ボディ１０には、重力が作用している。重力は、ボディ１０の重心Ｇを通り、鉛直方向下方を向くベクトルＦＧで表現できる。
他方、駆動輪１６を駆動すると、ボディ１０には水平方向の慣性力が作用する。図２の矢印Ｖが示すように、移動体１００を図２の右側へ加速するように駆動輪１６を駆動するときの慣性力は、重心Ｇを通り水平方向左側を向くベクトルＦＥで表現できる。
重力ベクトルＦＧと慣性力ベクトルＦＥの合力ベクトルを符号ＦＴで表す。合力ベクトルＦＴは、車軸１４回りのモーメントを発生させる。倒立振子制御は、駆動輪１６を制御することによって、合力ベクトルＦＴの方向、即ち、車軸１４回りのモーメントの向きや大きさを変化させる。倒立振子制御は、ボディ１０のバランスを維持するように、車軸１４回りのモーメントの向きや大きさを変化させる。
ボディ１０のバランスを維持しながらボディ傾斜角Ａｂを修正するには、車体が右に傾いている時は、車体から車輪に右回りのモーメントを与えれば、車輪は右に加速し、車体は起き上がる。また、車体が左に傾いている時は、その逆となる。このように駆動輪１６に加える駆動力を調整することによって、ボディ傾斜角Ａｂを望ましい角度へ近づけることができる。すなわち、ボディ１０のバランスを維持することができる。直線Ｓが鉛直線Ｐと一致するようにボディ傾斜角Ａｂを制御すると、ボディ１０のバランスを維持したまま、移動体１００は停止、または一定速で走行することができる。移動体１００は、ボディ傾斜角Ａｂを適切に制御することによって（すなわち駆動力を適切に制御することによって）、ボディ１０のバランスを維持しながら加減速することもできる。
【００１５】
移動体１００の補助輪２２ａ、２２ｂは常に接地している。ブレーキ２６ａ、２６ｂがロックを解除している間は、支持脚２０ａ、２０ｂは自由にスライドできるのでボディ１０を支持しない。従って、倒立振子制御によって、ボディ１０のバランスを維持しながら移動することができる。
倒立振子制御を停止するとき、あるいは、不測の事態によって倒立振子制御が適切に機能しなくなった場合（すなわち、倒立振子制御ではボディ１０のバランスを維持することが困難な場合）には、ブレーキ２６ａ、２６ｂを動作させて、支持脚２０ａ、２０ｂをロックする。そうすることによって、支持脚２０ａ、２０ｂによってボディ１０を安定に支持することができる。ここで、支持脚先端の補助輪２２ａ、２２ｂは、常に接地しているので、ブレーキ２６ａ、２６ｂを作動させると直ちにボディ１０を支持することができる。予定された倒立振子制御の停止時、あるいは、不測の事態の検知によって緊急に倒立振子制御を停止するとき、ロックされた支持脚２０ａ、２０ｂによってボディ１０を直ちに（タイムラグなく）安定に支持することができる。従って、倒立振子制御を停止するときに、ボディ１０がふらつくことがない。
以下では、支持脚２０ａ、２０ｂを、「支持脚２０」と総称する場合がある。ブレーキ２６ａ、２６ｂ等についても同様である。
【００１６】
従来は、「倒立振子制御」によってボディのバランスを維持する移動体では、ボディ傾斜角の変化を許容するため、「倒立振子制御」の実行時には支持脚を収納していた。すなわち、支持脚を地面から所定距離だけ上方に離間させていた。「倒立振子制御」の実行時に支持脚が接地していると、支持脚が地面から受ける力（床反力）が「倒立振子制御」を阻害すると考えられていたからである。そのため、支持脚が降下を開始してから接地するまでの間にタイムラグが生じる。タイムラグの間にボディ傾斜角が不安定となる可能性があった。支持脚を地面から離間させる従来の方式では、支持脚が接地する前に倒立振子制御を停止する必要があった。なぜならば、倒立振子制御によってボディ傾斜角が変化する可能性があるが、支持脚が地面の近傍まで降下した状態でボディ傾斜角が変化すると、支持脚が地面に強く当たってしまい、かえってボディのバランスが悪くなってしまう虞があるからである。
本実施例の移動体１００では、ブレーキ２６が解放状態（支持脚２０の下端のボディ１０に対する位置を固定していない状態）のときには、支持脚２０はスライド自在なので接地しているが倒立振子制御を妨げない。倒立振子制御の停止と同時にブレーキ２６をロックしても（支持脚２０の下端のボディ１０に対する位置を固定しても）、ボディ１０のバランスを崩すことなく、スムーズに支持脚による支持状態に移行することができる。
【００１７】
移動体１００は、支持脚２０がボディ１０を支持した状態で走行することもできる。支持脚２０がボディ１０を支持した状態で走行するモードを「４輪モード」と称する場合がある。駆動輪１６のみでボディ１０を支持し、ボディ１０のバランスを維持しながら走行するモードを「２輪モード」と称する場合がある。「２輪モード」、「４輪モード」という表現は、車輪の数を限定しない。
【００１８】
次に、移動体１００のコントローラ３０の構造と、移動体１００の動作について説明する。図３は、移動体１００のブロック図である。図３は特に、コントローラ３０の内部のブロック図を詳細に示している。なお図３では、理解しやすくするために、コントローラ３０を移動体１００と別に描いている。実際には、図１に示したように、コントローラ３０も移動体１００の一部を構成することに留意されたい。
【００１９】
コントローラ３０は、主に、メイン制御部４７、支持脚制御部４６、目標値生成部４８、倒立振子制御部５４、及び旋回制御部５６を含んでいる。コントローラ３０には他に、旋回角度算出部４２、並進移動量算出部４３、微分器４４、並進方向左右輪分配部６４、旋回方向左右輪分配部６６、差分器６０ａ、６０ｂ、６０ｃ、及び、加算器６２ａ、６２ｂを含んでいる。これらのモジュール（支持脚制御部４６等）は、コントローラ３０のＣＰＵが実行するプログラムとして具現化されている。
【００２０】
図３の符号「ＷＲ」、「ＷＬ」は、各々駆動輪１６の左右車輪の回転角を表している。左右一対のモータ１２に取り付けられた一対の回転角度センサが、左右車輪回転角「ＷＲ」、「ＷＬ」を検出する。即ち、移動体１００が旋回中は、回転角「ＷＲ」と「ＷＬ」の値は異なる値となる。並進移動量算出部４３では、左右車輪回転角「ＷＲ」と「ＷＬ」から車軸中央の並進移動量Ａｗを求める。これは、例えば、左右車輪回転角「ＷＲ」と「ＷＬ」を足して２で割り、さらに車輪半径ｒをかけることで車軸中央の並進移動量Ａｗを得ることができる（数１）。
【数１】
0004681016.tif 000002
【００２１】
並進移動量Ａｗを微分器４４で微分することで、並進速度ｄＡｗが求まる。微分器では通常よく行われる微分演算を行えばよい（数２）。
【数２】
0004681016.tif 000003
【００２２】
図３の符号Ａｚは、移動体１００の旋回角度を表している。旋回角度とは、水平面内における移動体１００の基準方向からの方位角度（向き）を意味する。旋回角度算出部４２では、左右車輪の回転角「ＷＲ」と「ＷＬ」から車軸の水平面内における旋回角度Ａｚを求める。これは、例えば、左右車輪の回転角「ＷＲ」と「ＷＬ」の差分をとり、さらに車軸半径ｒをかけ、車輪間のトレッド幅の半分の長さｄで割ることで、車軸の水平面内における旋回角度Ａｚを得ることができる（数３）。
【数３】
0004681016.tif 000004
【００２３】
図３の符号「ｄＡｂ」は、鉛直方向に対するボディ１０の傾斜角の角速度（ボディ傾斜角速度）を表している。ボディ１０に取り付けられたジャイロ３２が、ボディ傾斜角速度ｄＡｂを検出する。ボディ傾斜角速度ｄＡｂを積分することで、ボディ傾斜角Ａｂを得ることができる。
図３の符号「Ａｓ」は、補助輪２２の回転角を表している。補助輪２２に取り付けられた回転角センサ（不図示）が、回転角Ａｓを検出する。補助輪２２の回転センサが検出した回転角Ａｓは、支持脚制御部４６に入力される。図３では、ブロック図が複雑になることを避けるために、補助輪２２と支持脚制御部４６を結ぶべき回転角Ａｓの線を省略している。なお、回転角Ａｓを微分することで、補助輪２２の回転角速度を得ることができる。
ブロック図が複雑になることを避けるために、支持脚制御部４６に入力される信号（並進移動量Ａｗ、並進移動速度ｄＡｗ、ボディ傾斜角速度ｄＡｂ）を示す線の一部も図示を省略している。
【００２４】
移動体１００は、外部コントローラ９０からのコマンドを受けて動作する。外部コントローラ９０から送られるコマンドの主なものに、２輪モードコマンド、４輪モードコマンド、及び停止コマンドがある。「２輪モードコマンド」は、移動体１００を２輪モード（支持脚２０による支持なしに、ボディ１０のバランスを維持しながら走行するモード）で走行させるコマンドである。「４輪モードコマンド」は、移動体１００を４輪モード（支持脚２０によってボディ１０を支持しながら走行するモード）で走行させるコマンドである。２輪モードコマンドと４輪モードコマンドには、移動体１００が移動すべき目標軌道（軌道に沿って移動する速度を含む）のデータが付随する。
【００２５】
まず、コントローラ３０の機能を概説する。コントローラ３０内部の各モジュールの詳細については後述する。
外部コントローラ９０のコマンドは、メイン制御部４７に入力される。メイン制御部４７は、コマンドを解析し、他の制御モジュールを管理する。外部コントローラ９０から送られる目標軌道のデータは、メイン制御部４７から目標値生成部４８に送られる。
２輪走行モードにおいて、コントローラ３０は、ボディ１０のバランスを維持しながら、目標軌道に追従するように駆動輪１６を駆動するためのトルク指令値を算出してモータ１２（モータドライバ）へ出力する。ボディのバランスを維持するとともに、移動体１００を直進させるためのトルク指令値が倒立振子制御部５４によって算出される。すなわち、倒立振子制御部５４が出力するトルク指令値（Ｔ１）は、並進方向左右輪分配部６４で分配され、左右の駆動輪１６へのトルク指令値（ＴＲ１、ＴＬ１）となる。並進方向左右輪分配部６４では、例えば、倒立振子制御部５４から入力されるトルク指令値を１／２づつして、左右輪のトルク指令値とする（数４）。左右輪で摩擦特性などが異なり、トルク指令値に対する特性や感度が異なる場合には、左右輪で異なるようにして摩擦補償したり、左右へのトルク配分を感度に応じた係数を掛けて行うようにしてもよい。
【数４】
0004681016.tif 000005
【００２６】
倒立振子制御部５４とは別に、旋回制御部５６が、移動体１００を目標軌道に沿って旋回させるためのトルク指令値を算出する。
旋回制御部５６が出力するトルク指令値（Ｔ２）は、移動体１００を旋回させるために必要なトルク値であり、旋回角度の偏差に対応した旋回トルクを算出することで求められる。旋回方向左右輪分配部６６では、旋回制御部５６から入力されるトルク値を左右駆動輪のトルク値（ＴＲ２、ＴＬ２）に分配する。
旋回方向左右輪分配部６６では、例えば旋回制御部５６からの入力に対し、左右輪で符号を変えて車輪半径ｒを掛けさらに車輪間のトレッド幅の半分の長さｄで割りさらに２で割ることで左右輪のトルク値へ配分を行うことができる（数５）。
【数５】
0004681016.tif 000006
【００２７】
並進方向左右輪分配部６４が出力するトルク指令値（ＴＲ１、ＴＬ２）と旋回方向左右輪分配部６６が出力するトルク指令値（ＴＲ２、ＴＬ２）がそれぞれ左右車輪ごとに加算器６２ａおよび６２ｂで加算されて左右モータのトルク指令値（ＴＲ、ＴＬ）として、左右モータ１２（モータドライバ）に出力される。基本的に、加算されたトルク指令値に従って左右のモータ１２（モータドライバ）が作動することによって、移動体１００はボディ１０のバランスを維持しながら、目標軌道に沿って移動する。
倒立振子制御部５４の制御系を設計する際に、支持脚２０（補助輪２２）と地面との接触を考慮して移動体１００をモデル化している。倒立振子制御部５４の制御系は、その移動体１００のモデルに基づいて設計されている。すなわち、倒立振子制御部５４は、床反力の影響が考慮されたトルク指令値を出力する。移動体１００のモデルについては後述する。
支持脚制御部４６は、ブレーキ２６を制御するモジュールである。支持脚制御部４６は、後述する非常停止条件が成立したときに、ブレーキ２６を作動させる。ブレーキ２６が作動すると、支持脚２０がロックされる。すなわち、支持脚２０がボディ１０を安定に支持する。ブレーキ２６が解放されると、支持脚２０が、補助輪２２を接地させながら、ボディ傾斜角に応じてスライドする。
【００２８】
２輪モード時、倒立振子制御部５４には、ボディ傾斜角速度ｄＡｂと同時に、差分器６０ａ、６０ｂの出力も入力される。すなわち、倒立を維持しながら、同時に、目標値（Ａｗｒ、ｄＡｗｒ）とＡｗ、ｄＡｗの差が小さくなるように左右のモータ１２へのトルクを算出して出力する。
【００２９】
次に、各制御モジュールについて説明する。
目標値生成部４８は、目標軌道を、移動体１００の目標並進速度ｄＡｗｒと目標旋回角度Ａｚｒに分解する。目標並進速度は、目標軌道の接線方向の速度で表される。目標旋回角度とは、目標軌道の接線の方位で表される。目標値生成部４８は、目標並進速度ｄＡｗｒおよびそれを積分した目標並進移動量Ａｗｒを出力する。目標値生成部４８はまた、目標旋回角度Ａｚｒを出力する。
【００３０】
次に、倒立振子制御部５４について説明する。
目標値生成部４８から出力された目標並進移動量Ａｗｒは、差分器６０ａに入力される。差分器６０ａは、目標並進移動量Ａｗｒと、移動体１００の実際の並進移動量Ａｗとの差分を算出する。算出された差分は倒立振子制御部５４に入力される。
目標値生成部４８から出力された目標並進速度ｄＡｗｒは、差分器６０ｂに入力される。差分器６０ｂは、目標並進速度ｄＡｗｒと、移動体１００の実際の並進速度ｄＡｗとの差分を算出する。算出された差分は倒立振子制御部５４に入力される。
倒立振子制御部５４にはまた、ボディ傾斜角速度ｄＡｂが入力される。
倒立振子制御部５４は、ボディ傾斜角速度ｄＡｂを積分してボディ傾斜角Ａｂを得る。そして、ボディ１０のバランスを維持しながら、差分器６０ａ、６０ｂの出力した差分を小さくするトルク指令値を算出する。ボディ傾斜角Ａｂとボディ傾斜角速度ｄＡｂは、ボディのバランスを維持する条件として利用される。ボディ１０のバランスを維持するための制御則は、例えばＨ無限大制御を用いてよい。Ｈ無限大制御を採用することによって、ロバストな倒立振子制御を実現することができる。
【００３１】
次に、旋回制御部５６について説明する。
目標値生成部４８から出力された目標旋回角度Ａｚｒは、差分器６０ｃに入力される。差分器６０ｃは、目標旋回角度Ａｚｒと、移動体１００の実際の旋回角度Ａｚとの差分を算出する。算出された差分が旋回制御部５６に入力される。
旋回制御部５６は、差分器６０ｃが出力した差分を小さくするために左右の駆動輪１６に与えるトルク値を算出し、トルク指令値として出力する。旋回制御部５６において旋回角度の偏差を小さくするための制御則としては例えばＰＩＤ制御を用いることができる。旋回制御部５６の出力は旋回方向左右輪分配部６６によって、左右の駆動輪のトルク値に配分される。
【００３２】
並進方向左右輪分配部６４、及び旋回方向左右輪分配部６６が出力したトルク指令値は加算器６２ａ、及び６２ｂによって左右輪ごとに加算されて左右モータ１２（モータドライバ）に入力される。
モータ１２（モータドライバ）がトルク指令値に従って作動することで、移動体１００は、ボディ１０のバランスを維持しながら目標軌道に沿って移動する。倒立振子制御部５４には、床反力を考慮したモデルに基づいた制御系が構築されているので、床反力があってもボディ１０のバランスを維持することができる。
【００３３】
次に、支持脚制御部４６について説明する。
図示を省略しているが、支持脚制御部４６は、倒立振子制御部５４と連動してブレーキ２６を制御する。すなわち、外部コントローラ９０から移動体１００の制御開始のコマンド（２輪モードコマンド或いは４輪モードコマンド）が入力されると、倒立振子制御部５４が制御を開始するとともに支持脚制御部４６がブレーキ２６を解放する（ボディ１０の傾斜に応じて支持脚２０がスライドできるようにする）。外部コントローラ９０から移動体１００の制御停止のコマンドが入力されると、倒立振子制御部５４が制御を停止するとともに支持脚制御部４６がブレーキ２６を作動させる（支持脚２０をロックする）。
【００３４】
支持脚制御部４６はまた、次のいずれかの条件（非常停止条件）が成立したときに、ブレーキ２６を作動させるとともに、倒立振子制御部５４に対して制御停止を指令する。
（１）ボディ傾斜角Ａｂが角度許容範囲を超える傾斜角条件
（２）ボディ傾斜角速度ｄＡｂが傾斜角速度許容範囲を超える傾斜角速度条件
（３）移動体１００の並進速度ｄＡｗが速度許容範囲を超える走行速度条件
傾斜角度許容範囲等は、移動体１００の動特性に基づいて予め設定されており、コントローラ３０に記憶されている。上記の非常停止条件はいずれも、ボディ１０のバランスを維持することが困難となる条件である。いずれかの非常停止条件が成立したときに、支持脚２０ａ、２０ｂをロックするとともに、倒立振子制御を停止することで、ボディ傾斜角が不安定となることなく、すばやくボディ１０を安定に支持することができる。
【００３５】
次に、図４を参照して、コントローラ３０全体の動作フローを概説する。図４は、コントローラ３０が実行するメインルーチンのフローチャート図である。
コントローラ３０は、所定のサンプリングタイムが経過するまで待つ（ステップＳ１０）。その間にコントローラ３０は、外部コントローラ９０からコマンドを受信する。外部コントローラ９０から受けるコマンドの主なものには、前述したように、「２輪モードコマンド」、「４輪モードコマンド」、及び、「停止コマンド」が存在する。
コントローラ３０は、所定のサンプリングタイムが経過するまでにコマンドを受信すると（ステップＳ１２：ＹＥＳ）、コマンドに応じた処理（ステップＳ２２、Ｓ２４、Ｓ２６）を実行する。所定のサンプリングタイムが経過するまでにコマンドを受信しなかった場合（ステップＳ１２：ＮＯ）は、ステップＳ２０に処理が移る。
コントローラ３０は、「停止コマンド」を受信すると（ステップＳ１４：ＹＥＳ）、ブレーキ２６をロックし（即ち、支持脚２０を固定する）とともに、（もし、倒立振子制御が作動中であれば）倒立振子制御を停止する（ステップＳ２６）。そして、メインルーチンを終了する。
コントローラ３０は、「２輪モードコマンド」を受信すると（ステップＳ１６：ＹＥＳ）、ブレーキ２６のロックを解除する（即ち、支持脚２０をスライド自在にする）とともに、前述した倒立振子制御を実行する（ステップＳ２４）。コントローラ３０は、ボディ１０のバランスを維持しながら、目標軌道に追従するようにモータ１２（駆動輪１６）を制御する。
コントローラ３０は、「４輪モードコマンド」を受信すると、ブレーキ２６をロックし（即ち、支持脚２０を固定する）とともに、倒立振子制御を停止する（ステップＳ２２）。ステップＳ２２では、倒立振子制御なしに、目標軌道に追従するようにモータ１２（駆動輪１６）を制御する。
ステップＳ１２の判定が「ＮＯ」の場合、コントローラ３０は、前述した非常停止条件が成立するか否かをチェックする（ステップＳ２０）。非常停止条件が成立する場合（ステップＳ２０：ＹＥＳ）、ステップＳ２２に処理が移る。すなわち、ブレーキ２６ａ、２６ｂをロックするとともに、倒立振子制御を停止する。
ステップＳ２０では、前記した３つの非常停止条件（傾斜角条件、傾斜角速度条件、及び、走行速度条件）のいずれかが成立するか否かがチェックされる。各条件のチェックは、並列に実行されてよい。
ステップＳ２０の判定が「ＮＯ」の場合、ステップＳ２２の実行後、及び、ステップＳ２４の実行後、再び、所定のサンプリングタイムが経過するまで待つ（ステップＳ１０）。
【００３６】
移動体１００は駆動輪１６のスリップに対してもロバストである。スリップが発生したときの制御を次に説明する。スリップが発生したときの制御は、移動体１００が２輪モードのときに図４に示した処理とともに並列に実行される。
駆動輪１６の回転角速度と、補助輪２２の回転角速度が異なる場合に、スリップの発生が検知される。スリップが検出された場合、倒立振子制御を停止するとともに、駆動輪１６の角速度を制限する。具体的には、ボディ１０に対する駆動輪１６の角速度を、補助輪２２の回転速度から得られるボディ１０の速度に対応する車輪速度に対して上下限値の間に制限する。換言すれば、スリップ率を一定の範囲に制限する。
駆動輪１６の角速度を制限することによって、スリップが止まる可能性を高めることができる。倒立振子制御を停止するのは、スリップ状態では駆動輪の駆動力が地面に伝わらないためにボディのバランスを維持することが困難となるからである。ただし、スリップは一時的な場合も多く、スリップの発生を検知しても直ちにブレーキ２６をロックする必要はない。
【００３７】
倒立振子制御部５４の制御系を設計する際に利用する移動体１００のモデルを説明する。図５に、移動体１００のモデルを示す。このモデルは、支持脚２０（補助輪２２）と地面との接触、即ち床反力を考慮している。図５の破線は、鉛直線を示している。
図５に記した記号の意味を以下に示す。
ｍ１：ボディ１０の質量
ｍ２：駆動輪１６（２個分）の質量
Ｊ１：ボディ１０の重心回りのイナーシャ
Ｊ２：駆動輪１６の車軸１４回りのイナーシャ
ｌ：ボディ１０の重心と車軸１４の間の距離
Ｌ１：ボディ１０の中心と補助輪２２の間の距離
ｋｅ１：バネ２４ａ、２４ｂのばね定数
η：鉛直方向に対するボディ１０の傾斜角
Δｘ１、Δｘ２：支持脚２０ａ、２０ｂの変位量（ボディ１０の傾斜角ηがゼロのときを基準とする）
θ：駆動輪１６の回転角
Ｆｅ１、Ｆｅ２：バネ２４ａ、２４ｂが発生するバネ力（即ち床反力）
Ｔext：床反力によって生じる車軸１４回りのモーメント
また、以下の数式で用いる記号の意味は以下のとおりである。
ｒ：駆動輪１６の半径
ｄ：２つの駆動輪１６の間の距離
ｆｒ：粘性係数
Ｊｍ：モータロータのイナーシャ（減速機を含む）
ｎ：減速機のギヤ比
ｇ：重力加速度
【００３８】
ボディ１０の傾斜角ηに比例して床反力が生じると仮定する。図１のモデルにおいて、傾いたボディ１０を起こそうとする方向に働くトルクＴextは、次の（数６）で表される。
【数６】
0004681016.tif 000007
Ｔextを考慮した移動体１００の運動方程式は次の（数７）で表される。
【数７】
0004681016.tif 000008
【００３９】
ηが十分小さいと仮定して（数６）を線形化すると次の（数８）が得られる。
【数８】
0004681016.tif 000009
状態量を次の（数９）とする。
【数９】
0004681016.tif 000010
（数８）、（数９）から（数１０）の状態方程式を得る。
【数１０】
0004681016.tif 000011
（数１０）の状態方程式は、支持脚２０（補助輪２２）が受ける床反力を考慮した移動体１００のモデルである。倒立振子制御は、（数１０）のモデルに基づいて設計すればよい。設計された倒立振子制御は、支持脚２０が床反力を受けてもボディ１０のバランスを維持することができる。なお、このモデルは一例であって、倒立振子制御に利用する移動体モデルは別のものでもよい。
【００４０】
移動体１００は、駆動輪の車軸の前後に、常に接地している支持脚２０を備えている。支持脚２０が常に接地しているので、倒立振子制御を停止する際に、ボディ１０がふらつくことなく（倒立振子制御を停止してからタイムラグなく）支持脚２０でボディ１０を支持することができる。別言すれば、倒立振子制御が機能している状態から機能しない状態に移行するときに、タイムラグなく支持脚２０でボディ１０を支持することができる。タイムラグがないので、倒立振子制御の停止時、或いは不測の事態が発生した場合に、ボディをふらつかせることなく支持脚２０でボディ１０を支持することができる。
支持脚２０が常に接地していると、支持脚２０が地面から床反力を受けるが、倒立振子制御部５４の制御系は床反力を考慮した移動体モデルに基づいて設計されているのでボディ１０が床反力の影響で倒れたりする可能性を小さくすることができる。支持脚が常に接地していても、ボディのバランスを維持することができる。床反力がボディのバランス維持に悪影響を与えるのは、例えば補助輪が地面の隆起に乗り上げてしまう場合などである。
【００４１】
以上、本発明の具体例を詳細に説明したが、これらは例示に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。
【００４２】
例えば、支持脚の構造は、図１の構造に限られない。別の構造の支持脚を備えた移動体２００の模式的側面図を図６に示す。図６において、図１（Ｂ）に示した移動体１００と同じ部品には同じ符号を付してある。
移動体２００の支持脚１２０ａは、第１ロッド１２１ａと第２ロッド１２２ａを備えている。第１ロッド１２１ａは、図１の移動体１００の支持脚２０ａと同様に、バネ２４ａによってボディ１０に連結されている。また、第１ロッド１２１ａには、図１の移動体１００の支持脚２０ａと同様に、ブレーキ２６ａが取り付けられている。ただし、第１ロッド１２１ａの下端には、補助輪の代わりに第２ロッド１２２ａが連結されている。
第２ロッド１２２ａの一端が、ボディ１０に枢動自在に連結されている。第２ロッド１２２ａの他端に、補助輪２２ａが取り付けられている。第２ロッド１２２ａの途中に、第１ロッド１２１ａの下端が連結されている。
支持脚１２０ｂは、支持脚１２０ａと同じ構造であるので説明を省略する。
図６から明らかなように、支持脚１２０ａ、１２０ｂの下端は、ブレーキ２６ａ、２６ｂがロックを解放している間は、ボディ１０の傾斜に応じてボディ１０に対して上下する。ブレーキ２６ａ、２６ｂが作動すると、支持脚１２０ａ、１２０ｂの下端の位置が固定され、ボディ１０は安定に支持される。
【００４３】
鉛直方向に対するボディ１０の傾斜角が角度許容範囲を超える傾斜角条件が成立した場合、ボディ１０が傾斜している側の支持部材のみをロックすることも好適である。この場合は、倒立振子制御を停止する必要はない。
モータの出力トルクが限界に達したときに、支持部材をロックすることも好適である。
移動体が、周囲の障害物を検出するセンサを備えている場合、倒立振子制御を継続すると障害物に接触する可能性があると判断したときに支持部材をロックすることも好適である。
【００４４】
本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成し得るものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【図面の簡単な説明】
【００４５】
【図１】倒立振子型車輪移動体の模式図である。
【図２】ボディが傾斜した移動体を示す模式図である。
【図３】移動体のブロック図である。
【図４】メインルーチンのフローチャート図である。
【図５】移動体のモデル化を説明する図である。
【図６】他の移動体の模式的側面図である。
【符号の説明】
【００４６】
１０：ボディ
１２：モータ
１４：車軸
１６：駆動輪
２０ａ、２０ｂ：支持脚
２２ａ、２２ｂ：補助輪
２６ａ、２６ｂ：ブレーキ
３０：コントローラ
３２：ジャイロ
４６：支持脚制御部
４８：目標値生成部
５２：反力補償部
５４：倒立振子制御部
５６：旋回制御部
９０：外部コントローラ
１００、２００：倒立振子型車輪移動体
【図１】
0004681016.tif 000012
【図２】
0004681016.tif 000013
【図３】
0004681016.tif 000014
【図４】
0004681016.tif 000015
【図５】
0004681016.tif 000016
【図６】
0004681016.tif 000017