(57)【要約】【課題】無駄な経路を通らずに指令値を通過できる、移動体の移動経路データの生成方法を提供すること。【解決手段】移動体の移動位置を特定し逐次与えられる指令値を、３次関数を用いて補間して、当該移動体の移動経路データを生成する方法であって、第１の指令値と、当該第１の指令値より後に通過する第２の指令値に基づいて、当該第１の指令値と当該第２の指令値の間を補間するステップと、第１の指令値により特定される第１の位置と、第２の指令値により特定される第２の位置の間を当該移動体が移動しているときに、第２の指令値よりも後に通過する第３の指令値を取得した場合には、現在値を特定する現在指令値と、第２の指令値と、第３の指令値に基づいて、現在指令値と第２の指令値間を補間するステップと、を備える。【選択図】図３
2011086099.tif 000002
【特許請求の範囲】
【請求項１】
移動体の移動位置を特定し逐次与えられる指令値を、３次関数を用いて補間して、当該移動体の移動経路データを生成する方法であって、
第１の指令値と、当該第１の指令値より後に通過する第２の指令値に基づいて、当該第１の指令値と当該第２の指令値の間を補間するステップと、
前記第１の指令値により特定される第１の位置と、前記第２の指令値により特定される第２の位置の間を当該移動体が移動しているときに、前記第２の指令値よりも後に通過する第３の指令値を取得した場合には、現在値を特定する現在指令値と、前記第２の指令値と、前記第３の指令値に基づいて、前記現在指令値と前記第２の指令値間を補間するステップと、
を備えた、移動体の移動経路データの生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、移動体の移動経路データの生成方法に関する。
【背景技術】
【０００２】
移動体の制御において、自律移動の指令値に代表される様々な指令値が、移動体に与えられる。しかしながら、指令値のすべてが最初から移動体に与えられていることはまれであり、指令値は逐次的に与えられる場合が多い。さらに指令値が与えられる周期は、低周期である場合が多い。したがって、逐次的に与えられる指令値を、補間する方法が必要となる。
【０００３】
与えられた指令値を補間する方法として、スプライン補間が広く知られている。スプライン補間とは、指令値における微分値が連続することを特徴とするものである。
【０００４】
また、逐次的に到来する指令値を補間する方法として、２点の指令値のみを用いて３次関数で補間を行う、Ferguson Coons補間が知られている。
【０００５】
特許文献１乃至特許文献４において、ロボットの移動経路を３次元関数で補間する方法が開示されている。
また、特許文献５には、自律移動ロボットの目標位置が動的に変化しても、柔軟に移動経路における初期位置から目標位置まで移動することができるようにした、スプライン補間による移動経路制御方法が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０８−１３６４１５号公報
【特許文献２】特開平０５−３２４０３６号公報
【特許文献３】特開平０９−２４４７２５号公報
【特許文献４】特開平１０−２２８３０６号公報
【特許文献５】特開２００１−０６０１１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、スプライン補間は、指令値がすべて与えられていないと補間関数を決定することができない。すなわち、逐次的に指令値が与えられる場合に、指令値の補間を行うことは想定されていない。
また、Ferguson Coons補間は、関数の係数決定条件が明確に定められていない。そのため、例えば図９において、実践の丸印の箇所において指令値が与えられたものとすると、補間による経路は、点線で囲んだ箇所のように２点間を大きく迂回した、無駄な経路を通るものとなる場合がある。
【０００８】
本発明は、このような問題点を解決するためになされたものであり、無駄な経路を通らずに指令値を通過できる、移動経路データの生成方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明における移動体の移動経路データの生成方法は、移動体の移動位置を特定し逐次与えられる指令値を、３次関数を用いて補間して、当該移動体の移動経路データを生成する方法であって、第１の指令値と、当該第１の指令値より後に通過する第２の指令値に基づいて、当該第１の指令値と当該第２の指令値の間を補間するステップと、前記第１の指令値により特定される第１の位置と、前記第２の指令値により特定される第２の位置の間を当該移動体が移動しているときに、前記第２の指令値よりも後に通過する第３の指令値を取得した場合には、現在値を特定する現在指令値と、前記第２の指令値と、前記第３の指令値に基づいて、前記現在指令値と前記第２の指令値間を補間するステップ、とを備えた、移動体の移動経路データの生成方法である。
これにより、指令値が逐次追加して与えられた場合に、移動体が無駄な経路を通らずに指令値を通過するよう、経路を補間することができる。
【発明の効果】
【００１０】
本発明により、無駄な経路を通らずに指令値を通過できる、移動経路データの生成方法を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１にかかる補間対象区間を示す図である。
【図２】実施の形態１にかかる補間関数計算フローチャートである。
【図３】実施の形態１にかかる新しい指令値が追加された場合のフローチャートである。
【図４】実施の形態１にかかる第３の指令値が与えられる前の状態を示す図である。
【図５】実施の形態１にかかる第３の指令値が与えられた状態を示す図である。
【図６】実施の形態１にかかる補間関数の再計算が行われた状態を示す図である。
【図７】実施の形態１にかかる移動経路の例を示す図である。
【図８】実施の形態２にかかる最初の補間対象区間を示す図である。
【図９】従来の補間方法により求められる経路を示す図である。
【発明を実施するための形態】
【００１２】
実施の形態１.
以下、図面を参照して本発明の実施の形態について説明する。
本実施の形態では、移動体として自律型のロボットを用いる場合について説明する。なお、指令値は、はじめからすべてがロボットに与えられるものではなく、時間の経過に従い逐次的に与えられるものとする。
【００１３】
図１は、本実施の形態にかかる補間対象区間を示す図である。なお図１において、横軸は時間であり、縦軸は指令値を表す。
指令値２と指令値３の区間を補間対象区間とし、点線で示した曲線部分の補間関数を求めるものとする。このとき、指令値２を第１の指令値、指令値３を第２の指令値とする。指令値１はすでに通過した指令値である。
また、第２の指令値の後の時間について指令値が与えられている場合には、当該指令値４を第３の指令値とする。なお、第２の指令値である指令値３の後の時間について、複数の指令値が与えられている場合には、その中で最も早い時間の指令値を、第３の指令値とする。
【００１４】
補間対象区間における補間は、３次関数
2011086099.tif 000003
により行う。
ここでｔは時間を示し、ｆｋは時間ｋからｋ＋１における関数である。係数ａｋ０、ａｋ１、ａｋ２、及びａｋ３は、１つの補間対象区間において、再計算が行われる場合を除いて、それぞれ１つの値が用いられる。ａｋ０、ａｋ１、ａｋ２、及びａｋ３は、次の補間関数計算フローにより定める。
【００１５】
補間関数計算のフローについて説明する。図２は、補間関数計算フローチャートである。以下では、ｆｋ(ｔ)の１階微分をｆｋ'（ｔ)、２階微分をｆｋ"（ｔ)と表す。
【００１６】
まず、ロボットは、第１の指令値を通過し新たな補完区間に入ると、（２）乃至（４）式の３つの計算条件を設定する（ステップＳ１１）。
2011086099.tif 000004
2011086099.tif 000005
2011086099.tif 000006
ここでｘは指令値を表す。なお、第１の指令値以前の時間における補間関数計算（ｆｋ-１,ｆｋ-２,・・・）は、すでに行われているものとする。
【００１７】
次に、ロボットは、第３の指令値を与えられているか否かの確認を行う（ステップＳ１２）。第３の指令値が与えられている場合には（ステップＳ１２でＹＥＳ）、（５）式を４つ目の計算条件として設定する（ステップＳ１３）。
2011086099.tif 000007
第３の指令値が与えられていない場合には（ステップＳ１２でＮＯ）、（６）式を４つ目の計算条件として設定する（ステップＳ１４）。
2011086099.tif 000008
【００１８】
次に、前述した（２）乃至（４）式による３つの条件と、（５）式または（６）式のいずれか一方の条件から、（１）式におけるａｋ０、ａｋ１、ａｋ２、及びａｋ３を算出する（ステップＳ１５）。
これにより、補間対象区間における補間関数ｆｋを求めることができる。
【００１９】
次に、指令値が新たに追加された場合のフローについて説明する。図３は、ロボットに新しい指令値が追加された場合のフローチャートである。
【００２０】
ロボットは、新しい指令値が追加された場合には、すでに第３の指令値があるか否かを判定する（ステップＳ２１）。
【００２１】
第３の指令値が存在しない場合には（ステップＳ２１でＮＯ）、ロボットは、現時刻Ｔにおける補間値ｆｋ(Ｔ)を新たに第１の指令値とする（ステップＳ２２）。また、ロボットは、新たに追加された指令値を第３の指令値とする（ステップＳ２３）。
次に、そして、ステップＳ２２及びステップＳ２３で指定した第１及び第３の指令値を用い、前述した補間関数計算フロー（ステップＳ１１乃至ステップＳ１５）に基づいて、補間関数計算を行う（ステップＳ２４）。
【００２２】
次に、新たな指令値が与えられた場合のフローによる動作を説明する。
図４は、第３の指令値が与えられていない状態を示す図である。なお、図４の横軸は時間軸であり、縦軸は指令値を示す。また図４における点線の曲線部分は、新たな指令値が与えられる前の時点での補間関数計算により算出された経路を示している。
このとき、（ｔｋ,ｘｋ）における指令値１１が第１の指令値であり、（ｔｋ+１,ｘｋ+１）における指令値１２が第２の指令値である。また、ポイント１３は現在の時間Ｔにおける補間値ｆｋ(Ｔ)であり、すなわちロボットの現在値を示している。
【００２３】
また図５は、（ｔｋ+２,ｘｋ+２）に新たな指令値が与えられ、新たな指令値が第３の指令値となった状態を示す図である。図５の横軸は時間軸であり、縦軸は指令値を示す。また図５における点線の曲線部分は、図４と同様に、新たな指令値が与えられる前の時点での補間関数計算により算出された経路を示している。
図５において、ロボットは、新しい指令値１４が追加されたと判断し（ステップＳ２１）、他に第３の指令値が存在しない場合には（ステップＳ２１でＮＯ）、ポイント１３を新たな第１の指令値として設定し（ステップＳ２２）、指令値１４を第３の指令値とする（ステップＳ２３）。
【００２４】
そして、前述した補間関数計算フロー（ステップＳ１１乃至ステップＳ１５）に基づいて、補間関数計算を行う（ステップＳ２４）。なお、指令値１４を第３の指令値としているため、ステップＳ１２ではＹＥＳと判定される。
図６は、新たな指令値１４を第３の指令値とし、補間関数計算を行った状態を示す。なお、図６の横軸は時間軸であり、縦軸は指令値を示す。すなわち、図６における点線の曲線部分は、新たに第１及び第３の指令値の設定を行った後に、補間関数計算により算出した、新たな経路である。
【００２５】
なお、ステップＳ２１において、すでに第３の指令値が存在すると判定された場合には（ステップＳ２１でＹＥＳ）、現在実行している補間関数に変更を加えない。
【００２６】
次に、図７を用いて、本発明による補間計算を行う例を示す。図７は、横軸を時間とし、縦軸を指令値とする移動体の移動経路を示す図である。
また図７において、丸印は与えられた逐次的に与えられる指令値を示す。黒塗りの四角印（ポイント）はロボットに新たな指令値が与えられ、新たに与えられた指令値が第３の指令値となった時点を示す。
【００２７】
まず、ロボットは、指令値２１から指令値２２の間を動作する。このとき、ロボットは指令値２１より以前から連続的に動作していたものとする。また、ロボットには指令値２３がすでに与えられている。したがって、ロボットは、指令値２１を第１の指令値、指令値２２を第２の指令値、指令値２３を第３の指令値として、前述の補間関数計算フローに従い補間関数ｆ１の計算を行うことができる。なお、指令値２３が第３の指令値として存在するため、ロボットは、ステップＳ１２においてＹＥＳと判定して補間関数計算を行う。ロボットは、指令値２１と指令値２２の間における動作をｆ１に従って実行する。
【００２８】
次に、ロボットは指令値２２と指令値２３の間を動作する。このときロボットには、ポイント３１を通過するまでは指令値２４が与えられていない。すなわち、指令値２２を第１の指令値、指令値２３を第２の指令値とするが、第３の指令値は存在していない。したがってロボットは、ｆ２の補間関数計算を、補間関数計算フローのステップＳ１２においてＮＯと判定して行う。ロボットは、指令値２２と指令値２３の間における動作をｆ２に従って実行する。
【００２９】
次に、ポイント３１において、ロボットに指令値２４が与えられたものとする。この場合、ロボットは、前述の新たな指令値が加えたれた場合のフロー（ステップＳ２１乃至ステップＳ２４）を実行する。ここで指令値２３以後であり、かつ指令値２４以前である指令値は存在しないため、ロボットは、ステップＳ２１においてＮＯと判定する。
したがって、ポイント３１は新たに第１の指令値として設定され（ステップＳ２３）、指令値２４は第３の指令値として設定される（ステップＳ２４）。なお、第２の指令値は指令値２３のままである。ロボットは、これらの第１乃至第３の指令値に基づいて、補間関数計算（ステップＳ１１乃至ステップＳ１５）を行い、算出された補間関数をｆ２(ｎｅｗ)とする。なお、指令値２４を第３の指令値としているため、ステップＳ１２ではＹＥＳと判定される。ロボットは、ポイント３１と指令値２３の間における動作をｆ２(ｎｅｗ)に従って実行する。
【００３０】
次に、ロボットが指令値２３を通過する際にはすでに指令値２５が与えられているものとする。したがって、指令値２３を第１の指令値、指令値２４を第２の指令値、指令値２５を第３の指令値として、前述の補間関数計算フローに従い補間関数ｆ３の計算を行う。なお、指令値２５が第３の指令値として存在するため、ロボットは、ステップＳ１２においてＹＥＳと判定して補間関数計算を行う。ロボットは、指令値２３と指令値２４の間における動作をｆ３に従って実行する。
【００３１】
次に、ロボットは指令値２４と指令値２５の間を動作する。しかしながら、ロボットには、ポイント３２を通過するまでは指令値２６が与えられていない。すなわち、指令値２４を第１の指令値、指令値２５を第２の指令値とするが、第３の指令値は存在していない。したがって、ロボットは、ｆ４の補間関数計算を、補間関数計算フローのステップＳ１２においてＮＯと判定して行う。ロボットは、指令値２４とポイント３２の間における動作をｆ４に従って実行する。
【００３２】
次に、ポイント３２において、ロボットに指令値２６が与えられたものとする。この場合、ロボットは、前述の新たな指令値が加えたれた場合のフロー（ステップＳ２１乃至ステップＳ２４）を実行する。ここで指令値２５以後であり、かつ指令値２６以前である指令値は存在しないため、ロボットは、ステップＳ２１においてＮＯと判定する。
したがって、ポイント３２は新たに第１の指令値として設定され（ステップＳ２３）、指令値２６は第３の指令値として設定される（ステップＳ２４）。なお、第２の指令値は指令値２５のままである。ロボットは、これらの第１乃至第３の指令値に基づいて、補間関数計算（ステップＳ１１乃至ステップＳ１５）を行い、算出された補間関数をｆ４(ｎｅｗ)とする。なお、指令値２６を第３の指令値としているため、ステップＳ１２ではＹＥＳと判定される。ロボットは、ポイント３２と指令値２５の間における動作をｆ４(ｎｅｗ)に従って実行する。
【００３３】
次に、ロボットは指令値２５と指令値２６の間を動作する。しかしながら、ロボットには、ポイント３３を通過するまでは指令値２７が与えられていない。すなわち、指令値２５を第１の指令値、指令値２６を第２の指令値とするが、第３の指令値は存在していない。したがって、ロボットは、ｆ５の補間関数計算を、補間関数計算フローのステップＳ１２においてＮＯと判定して行う。ロボットは、指令値２５とポイント３３の間における動作をｆ５に従って実行する。
【００３４】
次に、ポイント３３において、ロボットに指令値２７が与えられたものとする。この場合、ロボットは、前述の新たな指令値が加えたれた場合のフローを実行する。ここで指令値２６以後であり、かつ指令値２７以前である指令値は存在しないため、ロボットは、ステップＳ２１においてＮＯと判定する。
したがって、ポイント３３は新たに第１の指令値として設定され（ステップＳ２３）、指令値２７は第３の指令値として設定される（ステップＳ２４）。なお、第２の指令値は指令値２６のままである。ロボットは、これらの第１乃至第３の指令値に基づいて、補間関数計算（ステップＳ１１乃至ステップＳ１５）を行い、算出された補間関数をｆ５(ｎｅｗ)とする。なお、指令値２７を第３の指令値としているため、ステップＳ１２ではＹＥＳと判定される。ロボットは、ポイント３３と指令値２６の間における動作をｆ５(ｎｅｗ)に従って実行する。
【００３５】
次に、ロボットは指令値２６と指令値２７の間を動作する。しかしながら、ロボットには、ポイント３４を通過するまでは指令値２８が与えられていない。すなわち、指令値２６を第１の指令値、指令値２７を第２の指令値とするが、第３の指令値は存在していない。したがって、ロボットは、ｆ６の補間関数計算を、補間関数計算フローのステップＳ１２においてＮＯと判定して行う。ロボットは、指令値２６とポイント３４の間における動作をｆ６に従って実行する。
【００３６】
次に、ポイント３４において、ロボットに指令値２８が与えられたものとする。この場合、ロボットは、前述の新たな指令値が加えたれた場合のフローを実行する。ここで指令値２７以後であり、かつ指令値２８以前である指令値は存在しないため、ロボットは、ステップＳ２１においてＮＯと判定する。
したがって、ポイント３４は新たに第１の指令値として設定され（ステップＳ２３）、指令値２８は第３の指令値として設定される（ステップＳ２４）。なお、第２の指令値は指令値２７のままである。ロボットは、これらの第１乃至第３の指令値に基づいて、補間関数計算（ステップＳ１１乃至ステップＳ１５）を行い、算出された補間関数をｆ６(ｎｅｗ)とする。なお、指令値２８を第３の指令値としているため、ステップＳ１２ではＹＥＳと判定される。ロボットは、ポイント３４と指令値２７の間における動作をｆ６(ｎｅｗ)に従って実行する。
【００３７】
次に、ロボットは指令値２７と指令値２８の間を動作する。この場合、指令値２７を第１の指令値、指令値２８を第２の指令値とする。第３の指令値が存在していないため、ロボットは、補間関数計算フローのステップＳ１２においてＮＯと判定して、補間関数計算を行い、ｆ７を算出する。ロボットは、指令値２７と指令値２８の間における動作を、ｆ７に従って実行する。
【００３８】
これによりロボットは、指令値が追加された場合に新たな経路を計算することができ、無駄な経路を通らずに指令値を通過することができる。
【００３９】
実施の形態２．
本実施の形態においても、実施の形態１と同様に、移動体として自律型のロボットを用いる場合について説明する。
【００４０】
図８に、最初の補間区間における状態を示す。なお、図８の横軸は時間軸であり、縦軸は指令値を示す。
t1で与えられた指令値４１は最初に与えられた指令値であり、それ以前の区間に補間関数ｆｋ−１は存在していない。したがって、前述の補間関数計算フローにおいて、指令値４１を第１の指令値、指令値４２を第２の指令値、指令値４３を第３の指令値とした場合であっても、ステップＳ１１において（４）式を用いることができない。
【００４１】
そこで、（４）式に代わり、例えば（７）式や、（８）式を用いることができる。
2011086099.tif 000009
2011086099.tif 000010
【００４２】
これにより、ｔ１とｔ２の区間における補間関数計算を、前述した補間関数計算フロー（ステップＳ１１乃至ステップＳ１５）に従って行うことができる。したがって、図８の点線の曲線で示された経路の補間関数ｆ1を算出でき、ロボットは、指令値２７と指令値２８の間における動作を、ｆ1に従って実行することができる。
【００４３】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【００４４】
１１、１２、１４、２１〜２８、４１〜４３    指令値
１３、３１〜３４    ポイント
【図１】
2011086099.tif 000011
【図２】
2011086099.tif 000012
【図３】
2011086099.tif 000013
【図４】
2011086099.tif 000014
【図５】
2011086099.tif 000015
【図６】
2011086099.tif 000016
【図７】
2011086099.tif 000017
【図８】
2011086099.tif 000018
【図９】
2011086099.tif 000019