説明

倒立振子型車輪移動体

【課題】ボディがふらつくことなく停止できる倒立振子型車輪移動体を実現する。
【解決手段】移動体100は、ボディ10から下方へ向けて伸びており、駆動輪の車軸14の前後で接地しているとともに、その下端がボディ10の傾斜に応じて上下する支持脚20と、支持部材の下端の位置を固定するロック機構26を備えている。支持脚20は、倒立振子制御の動作/非動作に関わらずに接地しているとともに、ボディ10の傾斜に応じて上下する。従って、支持脚20は、常に接地しているものの、倒立振子制御を妨げない。倒立振子制御を停止する場合に、ロック機構26を作動させて支持脚20の下端の位置を固定する。常に接地しており伸縮自在の支持脚20とロック機構26を備えることによって、倒立振子制御が機能している状態から機能しない状態に移行するときに、タイムラグなく支持脚20でボディ10を支持することができるので、ボディがふらつくことがない。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、倒立振子型車輪移動体に関する。
【背景技術】
【0002】
倒立振子型車輪移動体が知られている。本明細書にいう「倒立振子型車輪移動体」とは、ひとつの駆動輪、或いは同軸に配置された複数の駆動輪によって走行する車輪移動体であり、車軸回りに傾斜可能なボディのバランスを保ちながら走行する移動体を意味する。本明細書では、「倒立振子型車輪移動体」を単に「移動体」と称することがある。
ボディの重心は駆動輪の車軸よりも上方に位置している。そのため、制御しない状態では、この移動体は不安定である。ここでいう「不安定」とは、ボディのバランスが保たれている状態において小さな外乱が加わるだけで、ボディのバランスが崩れてしまうことを意味する。従って、ボディと車輪の全状態量もしくはその一部の状態量をフィードバックすることでボディの姿勢(鉛直方向に対するボディの傾斜角)を安定化する制御を行う必要がある。そのような制御を本明細書では倒立振子制御と称する。簡単にいえば、駆動輪を駆動することによってボディの傾斜角を維持する制御を倒立振子制御という。
倒立振子型車輪移動体は、制御的な観点からいうと不安定システムである。すなわち、倒立振子制御を停止するとボディが転倒する。或いは、倒立振子制御が適切に機能しないとボディが転倒する。従って、倒立振子型車輪移動体は、ボディの転倒を防止するために補助的な支持部材を有している。例えば、昇降可能な支持脚を備えた倒立振子制御型の移動ロボットが特許文献1に開示されている。
特許文献1に開示された移動ロボットは、倒立振子制御の作動時には支持脚を地面の上方に離間させて維持する。倒立振子制御を停止する場合、或いは不測の事態によって倒立振子制御が適切に機能しなくなった場合に、支持脚を降ろして接地させる。支持脚がボディを支持することによって転倒を防止する。
【0003】
【特許文献1】特開2006−247802号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
特許文献1の移動ロボットは、倒立振子制御が機能している間は、支持脚を接地させない。倒立振子制御の停止時、或いは、倒立振子制御が適切に機能しなくなった時点で、支持脚を降下させる。従って、倒立振子制御が適切に機能しなくなってから支持脚が接地するまでにタイムラグが生じる。このタイムラグの期間では、ボディの傾斜角が不安定となる。タイムラグの期間では、ボディの傾斜角が変化してしまう虞がある。また、人を載せる倒立振子型車輪移動体の場合、ボディの傾斜角を一定に制御できないタイムラグの期間は、搭乗者に不安感を与える。
不測の事態に限らず、倒立振子制御を停止する場合でも、倒立振子制御を停止してから支持脚が接地するまでにタイムラグが生じると同じ課題が起こり得る。
不測の事態が発生して倒立振子制御が適切に機能しなくなった場合、或いは、倒立振子制御を停止する場合に、タイムラグなく支持部材によってボディを支持することができる倒立振子型車輪移動体が望まれている。
【課題を解決するための手段】
【0005】
本発明の倒立振子型車輪移動体は、ボディから下方へ向けて伸びており、その下端が駆動輪の車軸の前後で接地しているとともに、鉛直方向に対するボディの傾斜に応じて下端がボディに対して相対的に上下する支持部材と、ボディに対する支持部材の下端の相対的な位置を固定するロック機構を備えている。
支持部材は、例えばバネによってボディに取り付けられている。支持部材の下端が、倒立振子制御の動作/非動作に関わらずに接地しているとともに、ボディの傾斜に応じてボディに対して上下する。従って、支持部材は、常に接地しているものの、倒立振子制御を妨げない。不測の事態が生じて倒立振子制御が適切に機能しなくなった場合、或いは、倒立振子制御を停止する場合に、ロック機構を作動させて支持部材の下端のボディに対する位置を固定する。上下動が可能な支持部材とロック機構を備えることによって、倒立振子制御が機能している状態から機能しない状態に移行するときに、タイムラグなく支持部材でボディを支持することができる。
【0006】
倒立振子型車輪移動体は、駆動輪(ひとつの車輪、或いは、同軸に配置された複数の車輪)のみで接地しながらボディのバランスを維持する移動体である。従って、倒立振子制御が正常に機能している間は、駆動輪以外の部材を接地させないことが従来の常識であった。本発明は、その従来の常識を覆し、倒立振子制御が機能している状態であっても支持部材を上下可能に接地させておくという斬新な発想によって、倒立振子制御が機能している状態から機能しない状態に移行するときにタイムラグなく支持部材でボディを支持することに成功した。
【0007】
以下では、「ボディに対する支持部材の下端の位置を固定する」ことを、単純に「支持部材を固定する」、或いは「支持部材をロックする」と表現することがある。
ロック機構は、不測の事態が生じて倒立振子制御が適切に機能しなくなった場合に支持部材を固定する。或いは、ロック機構は、不測の事態でなくとも、倒立振子制御を停止するときに支持部材を固定してよい。
不測の事態の発生は、例えば、次のいずれかの条件の成立によって特定されてよい。
(1)鉛直方向に対するボディの傾斜角が角度許容範囲を超える傾斜角条件
(2)ボディの傾斜角速度が傾斜角速度許容範囲を超える傾斜角速度条件
(3)移動体の速度が速度許容範囲を超える走行速度条件
いずれの条件も、倒立振子制御が適切に機能しなくなる状態を特定する条件である。
【0008】
支持部材の長さをひとたび固定したロック機構は、倒立振子制御の開始と同時に支持部材の固定を解除してよい。倒立振子制御の非作動状態から、作動状態に移行するときに、ボディの傾斜角が変化することを防止できる。
【0009】
倒立振子制御時にも支持部材が接地していることを利用して、駆動輪のスリップを検出することができる。具体的には、支持部材の下端に補助輪を取り付けておく。駆動輪の回転角速度と補助輪の回転角速度が相違する場合に、スリップの発生を検出することができる。
スリップが発生すると、ボディのバランスを維持することが困難になり転倒しやすくなる。スリップの発生を検知できると、これを制御に反映して、スリップ時に転倒し難くすることができる。例えば、スリップの発生時に、倒立制御を停止するとともにロック機構を作動させればよい。
【発明の効果】
【0010】
本発明によれば、倒立振子制御が適切に機能しなくなった場合、或いは、倒立振子制御を停止する場合に、タイムラグなくボディを安定に支持することができる倒立振子型車輪移動体を実現することができる。
【発明を実施するための最良の形態】
【0011】
実施例の移動体の付加的な技術的特徴を列記する。
(第1特徴)支持脚20は、弾性部材(バネ24)によって、その下端が常に接地するように付勢されている。バネによる付勢力は、ボディ10の傾斜を阻害しない程度に弱く設定してよい。
(第2特徴)スリップが検知された場合に、倒立振子制御を停止する。
【実施例】
【0012】
図面を参照して、本発明に好適な倒立振子型車輪移動体を説明する。図1は、倒立振子型車輪移動体100の模式的正面図(図1(A))と模式的側面図(図1(B))である。図2は、倒立振子型車輪移動体100のボディ10が傾いた状態を示す模式的側面図である。以下、「倒立振子型車輪移動体100」を単に「移動体100」と称する場合がある。なお、図1、2では、理解のし易さのために、ボディ10に内蔵されている部品も実線で描いてある。
図1、2において、符号Bは地面を示しており、符号Gはボディ10の重心を示している。
移動体100は、ボディ10と、一対の駆動輪16と、一対の支持脚20a、20bを備えている。一対の駆動輪16は、同軸に配置されている。夫々の駆動輪16は、車軸14を介してモータ12に連結されている。即ち、駆動輪16は、モータ12によって駆動される。
一対の支持脚20a、20bは、同じ構造を有している。一対の支持脚20a、20bは、それらの下端が車軸14の前後で接地している。以下では、一方の支持脚20aについて説明し、他方の支持脚20bについては説明を省略する。
支持脚20aは、ボディ10から下方に伸びている。支持脚20aの下端に、補助輪22aが取り付けられている。支持脚20aは、バネ24aによってボディ10に連結されている。支持脚20aは、バネ24aによって、補助輪22aが常に接地するように、下方に付勢されている。また、支持脚20aは、バネ24aによって、ボディ10の上下方向にスライドすることができる。即ち支持脚20aの下端(補助輪22a)は、接地を維持しながらボディ10の傾斜に応じてボディ10に対して上下する。バネ24aによる付勢力は、ボディ10の傾斜を阻害しない程度に弱く設定されている。すなわち、バネ24aの付勢力だけでは、ボディ10が倒れることを防止できない。
支持脚20aの途中に、ボディ10に対する支持脚20aの下端の相対的な位置を固定するためのブレーキ26a(ロック機構)が配置されている。ブレーキ26aは、ボディ10に内蔵されたコントローラ30から指令によって、支持脚20aの下端の位置を固定したり、その固定を解除したりする。以下では、「支持脚20aの下端の位置を固定する」ことを、「支持脚20aをロックする」と表現することがある。
ボディ10には、ボディ10の車軸14回りの傾斜角速度を検出するためのジャイロ32が搭載されている。ジャイロ32の出力は、コントローラ30に送られる。
【0013】
図示を省略しているが、移動体100には、夫々の補助輪22a、22bの回転角を検出するための回転角センサ(例えばエンコーダ)と、駆動輪16の回転角を検出するための回転角センサ(例えばエンコーダ)が搭載されている。補助輪22a、22b、或いは駆動輪16の回転角から、回転角速度を算出することができる。
【0014】
図2を参照して、倒立振子制御について概説する。図2において、直線Pは、重心Gを通る鉛直線を表している。直線Sは、重心Gと車軸14を通る直線を表している。角度Abは、鉛直線Pに対するボディ10の傾き(車軸14回りのボディ10の傾き:ボディ傾斜角Abと称する)を表している。
一対の支持脚20a、20bは、ブレーキ26a、26bがロックを解除している間は、ボディ10の傾斜に応じて伸縮する。そのため、ボディ10は、ブレーキ26a、26bがロックを解除している間は、倒立振子制御が作動していなければ倒れてしまう。倒立振子制御とは、駆動輪を駆動してボディ10を倒れないようにする制御をいう。「ボディ10を倒れないようにする」ことを、「ボディ10のバランスを維持する」と表現することがある。
図2に示すように、ボディ10には、重力が作用している。重力は、ボディ10の重心Gを通り、鉛直方向下方を向くベクトルFGで表現できる。
他方、駆動輪16を駆動すると、ボディ10には水平方向の慣性力が作用する。図2の矢印Vが示すように、移動体100を図2の右側へ加速するように駆動輪16を駆動するときの慣性力は、重心Gを通り水平方向左側を向くベクトルFEで表現できる。
重力ベクトルFGと慣性力ベクトルFEの合力ベクトルを符号FTで表す。合力ベクトルFTは、車軸14回りのモーメントを発生させる。倒立振子制御は、駆動輪16を制御することによって、合力ベクトルFTの方向、即ち、車軸14回りのモーメントの向きや大きさを変化させる。倒立振子制御は、ボディ10のバランスを維持するように、車軸14回りのモーメントの向きや大きさを変化させる。
ボディ10のバランスを維持しながらボディ傾斜角Abを修正するには、車体が右に傾いている時は、車体から車輪に右回りのモーメントを与えれば、車輪は右に加速し、車体は起き上がる。また、車体が左に傾いている時は、その逆となる。このように駆動輪16に加える駆動力を調整することによって、ボディ傾斜角Abを望ましい角度へ近づけることができる。すなわち、ボディ10のバランスを維持することができる。直線Sが鉛直線Pと一致するようにボディ傾斜角Abを制御すると、ボディ10のバランスを維持したまま、移動体100は停止、または一定速で走行することができる。移動体100は、ボディ傾斜角Abを適切に制御することによって(すなわち駆動力を適切に制御することによって)、ボディ10のバランスを維持しながら加減速することもできる。
【0015】
移動体100の補助輪22a、22bは常に接地している。ブレーキ26a、26bがロックを解除している間は、支持脚20a、20bは自由にスライドできるのでボディ10を支持しない。従って、倒立振子制御によって、ボディ10のバランスを維持しながら移動することができる。
倒立振子制御を停止するとき、あるいは、不測の事態によって倒立振子制御が適切に機能しなくなった場合(すなわち、倒立振子制御ではボディ10のバランスを維持することが困難な場合)には、ブレーキ26a、26bを動作させて、支持脚20a、20bをロックする。そうすることによって、支持脚20a、20bによってボディ10を安定に支持することができる。ここで、支持脚先端の補助輪22a、22bは、常に接地しているので、ブレーキ26a、26bを作動させると直ちにボディ10を支持することができる。予定された倒立振子制御の停止時、あるいは、不測の事態の検知によって緊急に倒立振子制御を停止するとき、ロックされた支持脚20a、20bによってボディ10を直ちに(タイムラグなく)安定に支持することができる。従って、倒立振子制御を停止するときに、ボディ10がふらつくことがない。
以下では、支持脚20a、20bを、「支持脚20」と総称する場合がある。ブレーキ26a、26b等についても同様である。
【0016】
従来は、「倒立振子制御」によってボディのバランスを維持する移動体では、ボディ傾斜角の変化を許容するため、「倒立振子制御」の実行時には支持脚を収納していた。すなわち、支持脚を地面から所定距離だけ上方に離間させていた。「倒立振子制御」の実行時に支持脚が接地していると、支持脚が地面から受ける力(床反力)が「倒立振子制御」を阻害すると考えられていたからである。そのため、支持脚が降下を開始してから接地するまでの間にタイムラグが生じる。タイムラグの間にボディ傾斜角が不安定となる可能性があった。支持脚を地面から離間させる従来の方式では、支持脚が接地する前に倒立振子制御を停止する必要があった。なぜならば、倒立振子制御によってボディ傾斜角が変化する可能性があるが、支持脚が地面の近傍まで降下した状態でボディ傾斜角が変化すると、支持脚が地面に強く当たってしまい、かえってボディのバランスが悪くなってしまう虞があるからである。
本実施例の移動体100では、ブレーキ26が解放状態(支持脚20の下端のボディ10に対する位置を固定していない状態)のときには、支持脚20はスライド自在なので接地しているが倒立振子制御を妨げない。倒立振子制御の停止と同時にブレーキ26をロックしても(支持脚20の下端のボディ10に対する位置を固定しても)、ボディ10のバランスを崩すことなく、スムーズに支持脚による支持状態に移行することができる。
【0017】
移動体100は、支持脚20がボディ10を支持した状態で走行することもできる。支持脚20がボディ10を支持した状態で走行するモードを「4輪モード」と称する場合がある。駆動輪16のみでボディ10を支持し、ボディ10のバランスを維持しながら走行するモードを「2輪モード」と称する場合がある。「2輪モード」、「4輪モード」という表現は、車輪の数を限定しない。
【0018】
次に、移動体100のコントローラ30の構造と、移動体100の動作について説明する。図3は、移動体100のブロック図である。図3は特に、コントローラ30の内部のブロック図を詳細に示している。なお図3では、理解しやすくするために、コントローラ30を移動体100と別に描いている。実際には、図1に示したように、コントローラ30も移動体100の一部を構成することに留意されたい。
【0019】
コントローラ30は、主に、メイン制御部47、支持脚制御部46、目標値生成部48、倒立振子制御部54、及び旋回制御部56を含んでいる。コントローラ30には他に、旋回角度算出部42、並進移動量算出部43、微分器44、並進方向左右輪分配部64、旋回方向左右輪分配部66、差分器60a、60b、60c、及び、加算器62a、62bを含んでいる。これらのモジュール(支持脚制御部46等)は、コントローラ30のCPUが実行するプログラムとして具現化されている。
【0020】
図3の符号「WR」、「WL」は、各々駆動輪16の左右車輪の回転角を表している。左右一対のモータ12に取り付けられた一対の回転角度センサが、左右車輪回転角「WR」、「WL」を検出する。即ち、移動体100が旋回中は、回転角「WR」と「WL」の値は異なる値となる。並進移動量算出部43では、左右車輪回転角「WR」と「WL」から車軸中央の並進移動量Awを求める。これは、例えば、左右車輪回転角「WR」と「WL」を足して2で割り、さらに車輪半径rをかけることで車軸中央の並進移動量Awを得ることができる(数1)。
【数1】

【0021】
並進移動量Awを微分器44で微分することで、並進速度dAwが求まる。微分器では通常よく行われる微分演算を行えばよい(数2)。
【数2】

【0022】
図3の符号Azは、移動体100の旋回角度を表している。旋回角度とは、水平面内における移動体100の基準方向からの方位角度(向き)を意味する。旋回角度算出部42では、左右車輪の回転角「WR」と「WL」から車軸の水平面内における旋回角度Azを求める。これは、例えば、左右車輪の回転角「WR」と「WL」の差分をとり、さらに車軸半径rをかけ、車輪間のトレッド幅の半分の長さdで割ることで、車軸の水平面内における旋回角度Azを得ることができる(数3)。
【数3】

【0023】
図3の符号「dAb」は、鉛直方向に対するボディ10の傾斜角の角速度(ボディ傾斜角速度)を表している。ボディ10に取り付けられたジャイロ32が、ボディ傾斜角速度dAbを検出する。ボディ傾斜角速度dAbを積分することで、ボディ傾斜角Abを得ることができる。
図3の符号「As」は、補助輪22の回転角を表している。補助輪22に取り付けられた回転角センサ(不図示)が、回転角Asを検出する。補助輪22の回転センサが検出した回転角Asは、支持脚制御部46に入力される。図3では、ブロック図が複雑になることを避けるために、補助輪22と支持脚制御部46を結ぶべき回転角Asの線を省略している。なお、回転角Asを微分することで、補助輪22の回転角速度を得ることができる。
ブロック図が複雑になることを避けるために、支持脚制御部46に入力される信号(並進移動量Aw、並進移動速度dAw、ボディ傾斜角速度dAb)を示す線の一部も図示を省略している。
【0024】
移動体100は、外部コントローラ90からのコマンドを受けて動作する。外部コントローラ90から送られるコマンドの主なものに、2輪モードコマンド、4輪モードコマンド、及び停止コマンドがある。「2輪モードコマンド」は、移動体100を2輪モード(支持脚20による支持なしに、ボディ10のバランスを維持しながら走行するモード)で走行させるコマンドである。「4輪モードコマンド」は、移動体100を4輪モード(支持脚20によってボディ10を支持しながら走行するモード)で走行させるコマンドである。2輪モードコマンドと4輪モードコマンドには、移動体100が移動すべき目標軌道(軌道に沿って移動する速度を含む)のデータが付随する。
【0025】
まず、コントローラ30の機能を概説する。コントローラ30内部の各モジュールの詳細については後述する。
外部コントローラ90のコマンドは、メイン制御部47に入力される。メイン制御部47は、コマンドを解析し、他の制御モジュールを管理する。外部コントローラ90から送られる目標軌道のデータは、メイン制御部47から目標値生成部48に送られる。
2輪走行モードにおいて、コントローラ30は、ボディ10のバランスを維持しながら、目標軌道に追従するように駆動輪16を駆動するためのトルク指令値を算出してモータ12(モータドライバ)へ出力する。ボディのバランスを維持するとともに、移動体100を直進させるためのトルク指令値が倒立振子制御部54によって算出される。すなわち、倒立振子制御部54が出力するトルク指令値(T1)は、並進方向左右輪分配部64で分配され、左右の駆動輪16へのトルク指令値(TR1、TL1)となる。並進方向左右輪分配部64では、例えば、倒立振子制御部54から入力されるトルク指令値を1/2づつして、左右輪のトルク指令値とする(数4)。左右輪で摩擦特性などが異なり、トルク指令値に対する特性や感度が異なる場合には、左右輪で異なるようにして摩擦補償したり、左右へのトルク配分を感度に応じた係数を掛けて行うようにしてもよい。
【数4】

【0026】
倒立振子制御部54とは別に、旋回制御部56が、移動体100を目標軌道に沿って旋回させるためのトルク指令値を算出する。
旋回制御部56が出力するトルク指令値(T2)は、移動体100を旋回させるために必要なトルク値であり、旋回角度の偏差に対応した旋回トルクを算出することで求められる。旋回方向左右輪分配部66では、旋回制御部56から入力されるトルク値を左右駆動輪のトルク値(TR2、TL2)に分配する。
旋回方向左右輪分配部66では、例えば旋回制御部56からの入力に対し、左右輪で符号を変えて車輪半径rを掛けさらに車輪間のトレッド幅の半分の長さdで割りさらに2で割ることで左右輪のトルク値へ配分を行うことができる(数5)。
【数5】

【0027】
並進方向左右輪分配部64が出力するトルク指令値(TR1、TL2)と旋回方向左右輪分配部66が出力するトルク指令値(TR2、TL2)がそれぞれ左右車輪ごとに加算器62aおよび62bで加算されて左右モータのトルク指令値(TR、TL)として、左右モータ12(モータドライバ)に出力される。基本的に、加算されたトルク指令値に従って左右のモータ12(モータドライバ)が作動することによって、移動体100はボディ10のバランスを維持しながら、目標軌道に沿って移動する。
倒立振子制御部54の制御系を設計する際に、支持脚20(補助輪22)と地面との接触を考慮して移動体100をモデル化している。倒立振子制御部54の制御系は、その移動体100のモデルに基づいて設計されている。すなわち、倒立振子制御部54は、床反力の影響が考慮されたトルク指令値を出力する。移動体100のモデルについては後述する。
支持脚制御部46は、ブレーキ26を制御するモジュールである。支持脚制御部46は、後述する非常停止条件が成立したときに、ブレーキ26を作動させる。ブレーキ26が作動すると、支持脚20がロックされる。すなわち、支持脚20がボディ10を安定に支持する。ブレーキ26が解放されると、支持脚20が、補助輪22を接地させながら、ボディ傾斜角に応じてスライドする。
【0028】
2輪モード時、倒立振子制御部54には、ボディ傾斜角速度dAbと同時に、差分器60a、60bの出力も入力される。すなわち、倒立を維持しながら、同時に、目標値(Awr、dAwr)とAw、dAwの差が小さくなるように左右のモータ12へのトルクを算出して出力する。
【0029】
次に、各制御モジュールについて説明する。
目標値生成部48は、目標軌道を、移動体100の目標並進速度dAwrと目標旋回角度Azrに分解する。目標並進速度は、目標軌道の接線方向の速度で表される。目標旋回角度とは、目標軌道の接線の方位で表される。目標値生成部48は、目標並進速度dAwrおよびそれを積分した目標並進移動量Awrを出力する。目標値生成部48はまた、目標旋回角度Azrを出力する。
【0030】
次に、倒立振子制御部54について説明する。
目標値生成部48から出力された目標並進移動量Awrは、差分器60aに入力される。差分器60aは、目標並進移動量Awrと、移動体100の実際の並進移動量Awとの差分を算出する。算出された差分は倒立振子制御部54に入力される。
目標値生成部48から出力された目標並進速度dAwrは、差分器60bに入力される。差分器60bは、目標並進速度dAwrと、移動体100の実際の並進速度dAwとの差分を算出する。算出された差分は倒立振子制御部54に入力される。
倒立振子制御部54にはまた、ボディ傾斜角速度dAbが入力される。
倒立振子制御部54は、ボディ傾斜角速度dAbを積分してボディ傾斜角Abを得る。そして、ボディ10のバランスを維持しながら、差分器60a、60bの出力した差分を小さくするトルク指令値を算出する。ボディ傾斜角Abとボディ傾斜角速度dAbは、ボディのバランスを維持する条件として利用される。ボディ10のバランスを維持するための制御則は、例えばH無限大制御を用いてよい。H無限大制御を採用することによって、ロバストな倒立振子制御を実現することができる。
【0031】
次に、旋回制御部56について説明する。
目標値生成部48から出力された目標旋回角度Azrは、差分器60cに入力される。差分器60cは、目標旋回角度Azrと、移動体100の実際の旋回角度Azとの差分を算出する。算出された差分が旋回制御部56に入力される。
旋回制御部56は、差分器60cが出力した差分を小さくするために左右の駆動輪16に与えるトルク値を算出し、トルク指令値として出力する。旋回制御部56において旋回角度の偏差を小さくするための制御則としては例えばPID制御を用いることができる。旋回制御部56の出力は旋回方向左右輪分配部66によって、左右の駆動輪のトルク値に配分される。
【0032】
並進方向左右輪分配部64、及び旋回方向左右輪分配部66が出力したトルク指令値は加算器62a、及び62bによって左右輪ごとに加算されて左右モータ12(モータドライバ)に入力される。
モータ12(モータドライバ)がトルク指令値に従って作動することで、移動体100は、ボディ10のバランスを維持しながら目標軌道に沿って移動する。倒立振子制御部54には、床反力を考慮したモデルに基づいた制御系が構築されているので、床反力があってもボディ10のバランスを維持することができる。
【0033】
次に、支持脚制御部46について説明する。
図示を省略しているが、支持脚制御部46は、倒立振子制御部54と連動してブレーキ26を制御する。すなわち、外部コントローラ90から移動体100の制御開始のコマンド(2輪モードコマンド或いは4輪モードコマンド)が入力されると、倒立振子制御部54が制御を開始するとともに支持脚制御部46がブレーキ26を解放する(ボディ10の傾斜に応じて支持脚20がスライドできるようにする)。外部コントローラ90から移動体100の制御停止のコマンドが入力されると、倒立振子制御部54が制御を停止するとともに支持脚制御部46がブレーキ26を作動させる(支持脚20をロックする)。
【0034】
支持脚制御部46はまた、次のいずれかの条件(非常停止条件)が成立したときに、ブレーキ26を作動させるとともに、倒立振子制御部54に対して制御停止を指令する。
(1)ボディ傾斜角Abが角度許容範囲を超える傾斜角条件
(2)ボディ傾斜角速度dAbが傾斜角速度許容範囲を超える傾斜角速度条件
(3)移動体100の並進速度dAwが速度許容範囲を超える走行速度条件
傾斜角度許容範囲等は、移動体100の動特性に基づいて予め設定されており、コントローラ30に記憶されている。上記の非常停止条件はいずれも、ボディ10のバランスを維持することが困難となる条件である。いずれかの非常停止条件が成立したときに、支持脚20a、20bをロックするとともに、倒立振子制御を停止することで、ボディ傾斜角が不安定となることなく、すばやくボディ10を安定に支持することができる。
【0035】
次に、図4を参照して、コントローラ30全体の動作フローを概説する。図4は、コントローラ30が実行するメインルーチンのフローチャート図である。
コントローラ30は、所定のサンプリングタイムが経過するまで待つ(ステップS10)。その間にコントローラ30は、外部コントローラ90からコマンドを受信する。外部コントローラ90から受けるコマンドの主なものには、前述したように、「2輪モードコマンド」、「4輪モードコマンド」、及び、「停止コマンド」が存在する。
コントローラ30は、所定のサンプリングタイムが経過するまでにコマンドを受信すると(ステップS12:YES)、コマンドに応じた処理(ステップS22、S24、S26)を実行する。所定のサンプリングタイムが経過するまでにコマンドを受信しなかった場合(ステップS12:NO)は、ステップS20に処理が移る。
コントローラ30は、「停止コマンド」を受信すると(ステップS14:YES)、ブレーキ26をロックし(即ち、支持脚20を固定する)とともに、(もし、倒立振子制御が作動中であれば)倒立振子制御を停止する(ステップS26)。そして、メインルーチンを終了する。
コントローラ30は、「2輪モードコマンド」を受信すると(ステップS16:YES)、ブレーキ26のロックを解除する(即ち、支持脚20をスライド自在にする)とともに、前述した倒立振子制御を実行する(ステップS24)。コントローラ30は、ボディ10のバランスを維持しながら、目標軌道に追従するようにモータ12(駆動輪16)を制御する。
コントローラ30は、「4輪モードコマンド」を受信すると、ブレーキ26をロックし(即ち、支持脚20を固定する)とともに、倒立振子制御を停止する(ステップS22)。ステップS22では、倒立振子制御なしに、目標軌道に追従するようにモータ12(駆動輪16)を制御する。
ステップS12の判定が「NO」の場合、コントローラ30は、前述した非常停止条件が成立するか否かをチェックする(ステップS20)。非常停止条件が成立する場合(ステップS20:YES)、ステップS22に処理が移る。すなわち、ブレーキ26a、26bをロックするとともに、倒立振子制御を停止する。
ステップS20では、前記した3つの非常停止条件(傾斜角条件、傾斜角速度条件、及び、走行速度条件)のいずれかが成立するか否かがチェックされる。各条件のチェックは、並列に実行されてよい。
ステップS20の判定が「NO」の場合、ステップS22の実行後、及び、ステップS24の実行後、再び、所定のサンプリングタイムが経過するまで待つ(ステップS10)。
【0036】
移動体100は駆動輪16のスリップに対してもロバストである。スリップが発生したときの制御を次に説明する。スリップが発生したときの制御は、移動体100が2輪モードのときに図4に示した処理とともに並列に実行される。
駆動輪16の回転角速度と、補助輪22の回転角速度が異なる場合に、スリップの発生が検知される。スリップが検出された場合、倒立振子制御を停止するとともに、駆動輪16の角速度を制限する。具体的には、ボディ10に対する駆動輪16の角速度を、補助輪22の回転速度から得られるボディ10の速度に対応する車輪速度に対して上下限値の間に制限する。換言すれば、スリップ率を一定の範囲に制限する。
駆動輪16の角速度を制限することによって、スリップが止まる可能性を高めることができる。倒立振子制御を停止するのは、スリップ状態では駆動輪の駆動力が地面に伝わらないためにボディのバランスを維持することが困難となるからである。ただし、スリップは一時的な場合も多く、スリップの発生を検知しても直ちにブレーキ26をロックする必要はない。
【0037】
倒立振子制御部54の制御系を設計する際に利用する移動体100のモデルを説明する。図5に、移動体100のモデルを示す。このモデルは、支持脚20(補助輪22)と地面との接触、即ち床反力を考慮している。図5の破線は、鉛直線を示している。
図5に記した記号の意味を以下に示す。
m1:ボディ10の質量
m2:駆動輪16(2個分)の質量
J1:ボディ10の重心回りのイナーシャ
J2:駆動輪16の車軸14回りのイナーシャ
l:ボディ10の重心と車軸14の間の距離
L1:ボディ10の中心と補助輪22の間の距離
ke1:バネ24a、24bのばね定数
η:鉛直方向に対するボディ10の傾斜角
Δx1、Δx2:支持脚20a、20bの変位量(ボディ10の傾斜角ηがゼロのときを基準とする)
θ:駆動輪16の回転角
Fe1、Fe2:バネ24a、24bが発生するバネ力(即ち床反力)
Text:床反力によって生じる車軸14回りのモーメント
また、以下の数式で用いる記号の意味は以下のとおりである。
r:駆動輪16の半径
d:2つの駆動輪16の間の距離
fr:粘性係数
Jm:モータロータのイナーシャ(減速機を含む)
n:減速機のギヤ比
g:重力加速度
【0038】
ボディ10の傾斜角ηに比例して床反力が生じると仮定する。図1のモデルにおいて、傾いたボディ10を起こそうとする方向に働くトルクTextは、次の(数6)で表される。
【数6】

Textを考慮した移動体100の運動方程式は次の(数7)で表される。
【数7】

【0039】
ηが十分小さいと仮定して(数6)を線形化すると次の(数8)が得られる。
【数8】

状態量を次の(数9)とする。
【数9】

(数8)、(数9)から(数10)の状態方程式を得る。
【数10】

(数10)の状態方程式は、支持脚20(補助輪22)が受ける床反力を考慮した移動体100のモデルである。倒立振子制御は、(数10)のモデルに基づいて設計すればよい。設計された倒立振子制御は、支持脚20が床反力を受けてもボディ10のバランスを維持することができる。なお、このモデルは一例であって、倒立振子制御に利用する移動体モデルは別のものでもよい。
【0040】
移動体100は、駆動輪の車軸の前後に、常に接地している支持脚20を備えている。支持脚20が常に接地しているので、倒立振子制御を停止する際に、ボディ10がふらつくことなく(倒立振子制御を停止してからタイムラグなく)支持脚20でボディ10を支持することができる。別言すれば、倒立振子制御が機能している状態から機能しない状態に移行するときに、タイムラグなく支持脚20でボディ10を支持することができる。タイムラグがないので、倒立振子制御の停止時、或いは不測の事態が発生した場合に、ボディをふらつかせることなく支持脚20でボディ10を支持することができる。
支持脚20が常に接地していると、支持脚20が地面から床反力を受けるが、倒立振子制御部54の制御系は床反力を考慮した移動体モデルに基づいて設計されているのでボディ10が床反力の影響で倒れたりする可能性を小さくすることができる。支持脚が常に接地していても、ボディのバランスを維持することができる。床反力がボディのバランス維持に悪影響を与えるのは、例えば補助輪が地面の隆起に乗り上げてしまう場合などである。
【0041】
以上、本発明の具体例を詳細に説明したが、これらは例示に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。
【0042】
例えば、支持脚の構造は、図1の構造に限られない。別の構造の支持脚を備えた移動体200の模式的側面図を図6に示す。図6において、図1(B)に示した移動体100と同じ部品には同じ符号を付してある。
移動体200の支持脚120aは、第1ロッド121aと第2ロッド122aを備えている。第1ロッド121aは、図1の移動体100の支持脚20aと同様に、バネ24aによってボディ10に連結されている。また、第1ロッド121aには、図1の移動体100の支持脚20aと同様に、ブレーキ26aが取り付けられている。ただし、第1ロッド121aの下端には、補助輪の代わりに第2ロッド122aが連結されている。
第2ロッド122aの一端が、ボディ10に枢動自在に連結されている。第2ロッド122aの他端に、補助輪22aが取り付けられている。第2ロッド122aの途中に、第1ロッド121aの下端が連結されている。
支持脚120bは、支持脚120aと同じ構造であるので説明を省略する。
図6から明らかなように、支持脚120a、120bの下端は、ブレーキ26a、26bがロックを解放している間は、ボディ10の傾斜に応じてボディ10に対して上下する。ブレーキ26a、26bが作動すると、支持脚120a、120bの下端の位置が固定され、ボディ10は安定に支持される。
【0043】
鉛直方向に対するボディ10の傾斜角が角度許容範囲を超える傾斜角条件が成立した場合、ボディ10が傾斜している側の支持部材のみをロックすることも好適である。この場合は、倒立振子制御を停止する必要はない。
モータの出力トルクが限界に達したときに、支持部材をロックすることも好適である。
移動体が、周囲の障害物を検出するセンサを備えている場合、倒立振子制御を継続すると障害物に接触する可能性があると判断したときに支持部材をロックすることも好適である。
【0044】
本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成し得るものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【図面の簡単な説明】
【0045】
【図1】倒立振子型車輪移動体の模式図である。
【図2】ボディが傾斜した移動体を示す模式図である。
【図3】移動体のブロック図である。
【図4】メインルーチンのフローチャート図である。
【図5】移動体のモデル化を説明する図である。
【図6】他の移動体の模式的側面図である。
【符号の説明】
【0046】
10:ボディ
12:モータ
14:車軸
16:駆動輪
20a、20b:支持脚
22a、22b:補助輪
26a、26b:ブレーキ
30:コントローラ
32:ジャイロ
46:支持脚制御部
48:目標値生成部
52:反力補償部
54:倒立振子制御部
56:旋回制御部
90:外部コントローラ
100、200:倒立振子型車輪移動体

【特許請求の範囲】
【請求項1】
倒立振子型車輪移動体であり、
駆動輪と、
鉛直方向に対して駆動輪の車軸の回りに傾斜可能なボディと、
ボディから下方へ向けて伸びており、その下端が駆動輪の車軸の前後で接地しているとともに、ボディの傾斜に応じて下端がボディに対して上下する支持部材と、
支持部材の下端のボディに対する位置を固定するロック機構と、
を備えることを特徴とする倒立振子型車輪移動体。
【請求項2】
鉛直方向に対するボディの傾斜角が角度許容範囲を超える傾斜角条件、ボディの傾斜角速度が傾斜角速度許容範囲を超える傾斜角速度条件、当該車輪移動体の速度が速度許容範囲を超える走行速度条件、倒立振子制御を停止する停止条件、のいずれかの条件が成立した場合に、ロック機構が、支持部材の下端のボディに対する位置を固定することを特徴とする請求項1に記載の倒立振子型車輪移動体。
【請求項3】
ロック機構は、倒立振子制御の開始と同時に支持部材の下端の位置の固定を解除することを特徴とする請求項1又は2に記載の倒立振子型車輪移動体。
【請求項4】
支持部材の下端に補助輪が取り付けられており、補助輪の回転角速度と駆動輪の回転角速度差に基づいて、駆動輪のスリップを検出することを特徴とする請求項1から3のいずれか1項に記載の倒立振子型車輪移動体。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2009−214670(P2009−214670A)
【公開日】平成21年9月24日(2009.9.24)
【国際特許分類】
【出願番号】特願2008−59608(P2008−59608)
【出願日】平成20年3月10日(2008.3.10)
【出願人】(000003609)株式会社豊田中央研究所 (4,200)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【Fターム(参考)】