(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023128625
(43)【公開日】2023-09-14
(54)【発明の名称】巡回ルート作成装置
(51)【国際特許分類】
G05D 1/02 20200101AFI20230907BHJP
G01C 21/34 20060101ALI20230907BHJP
【FI】
G05D1/02 H
G01C21/34
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022033100
(22)【出願日】2022-03-04
(71)【出願人】
【識別番号】000001317
【氏名又は名称】株式会社熊谷組
(74)【代理人】
【識別番号】100141243
【弁理士】
【氏名又は名称】宮園 靖夫
(72)【発明者】
【氏名】冨樫 淳輝
【テーマコード(参考)】
2F129
5H301
【Fターム(参考)】
2F129AA03
2F129EE54
5H301AA02
5H301DD01
(57)【要約】
【課題】複数の移動対象領域を移動体に巡回させるための効率的な巡回ルートを作成可能な巡回ルート作成装置を提供する。
【解決手段】巡回ループ作成手段と、巡回ルート作成手段とを備え、巡回ループ作成手段は、移動対象領域毎に巡回情報を設定することにより巡回ループを作成する初期世代巡回ループ作成手段と、後世代巡回ループ作成手段とを備え、巡回ルート作成手段は、初期世代巡回ルート作成手段と、後世代巡回ルート作成手段とを備え、後世代巡回ループ作成手段は、複数の初期世代巡回ルートのうち、移動コストの小さい初期世代巡回ルートをいくつか抽出し、この抽出された初期世代巡回ルートの巡回情報を使用して後世代巡回ループを作成し、後世代巡回ルート作成手段は、後世代巡回ルートを作成し、巡回情報は、各移動対象領域毎に設定される自己の移動対象領域内の巡回パターンの情報と次に進む移動対象領域の情報とで構成された組み合わせ情報である。
【選択図】
図33
【特許請求の範囲】
【請求項1】
複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを作成するための巡回ルート作成装置であって、
各移動対象領域を一巡する巡回ループを作成する巡回ループ作成手段と、
作成された巡回ループの経路を移動体で移動させる場合の移動コストを算出する移動コスト算出手段と、
作成された巡回ループを形成する移動対象領域間ルートのうち最も移動コストの大きい移動対象領域間ルートを削除して、削除した移動対象領域間ルートのルート終端が繋がれていた移動対象領域を巡回ルートのスタート領域とし、かつ、削除した移動対象領域間ルートのルート始端が繋がれていた移動対象領域を巡回ルートのゴール領域とした各移動対象領域を一巡する巡回ルートを作成する巡回ルート作成手段とを備え、
巡回ループ作成手段は、移動対象領域毎に巡回情報を設定することにより巡回ループを作成する初期世代巡回ループ作成手段と、後世代巡回ループ作成手段とを備え、
巡回ルート作成手段は、初期世代巡回ルート作成手段と、後世代巡回ルート作成手段とを備え、
初期世代巡回ループ作成手段は、複数の巡回ループを作成し、
初期世代巡回ルート作成手段は、初期世代巡回ループ作成手段により作成された複数の初期世代巡回ループ毎に、各移動対象領域毎の巡回情報を変更して、複数の初期世代巡回ルートを作成し、
後世代巡回ループ作成手段は、複数の初期世代巡回ルートのうち、移動コストの小さい初期世代巡回ルートをいくつか抽出し、この抽出された初期世代巡回ルートの巡回情報を使用して後世代巡回ループを作成し、
後世代巡回ルート作成手段は、後世代巡回ループ作成手段により作成された後世代巡回ループ毎に、各移動対象領域毎の巡回情報を変更して、後世代巡回ルートを作成し、
巡回情報は、各移動対象領域毎に設定される自己の移動対象領域内の巡回パターンの情報と次に進む移動対象領域の情報とで構成された組み合わせ情報であることを特徴とする巡回ルート作成装置。
【請求項2】
後世代の世代数は複数であり、
今回の後世代巡回ルート作成手段は、前回の後世代巡回ループ作成手段により作成された前回の後世代巡回ループ毎に、各移動対象領域毎の巡回情報を変更して、今回の後世代巡回ルートを作成し、
最終世代の後世代巡回ルート作成手段は、最終世代として作成した複数の巡回ルートのうち、移動コストが最小である巡回ルートを巡回ルートとして決定することを特徴とする請求項1に記載の巡回ルート作成装置。
【請求項3】
今回の後世代巡回ルート作成手段は、前回の後世代巡回ループ作成手段により作成された前回の複数の後世代巡回ループの中から移動コストの小さい巡回ルートの1つ以上を親と定義し、当該親の巡回ルートの巡回情報を引き継ぐことにより、今回の後世代巡回ルートを作成することを特徴とする請求項2に記載の巡回ルート作成装置。
【請求項4】
今回の後世代巡回ルート作成手段は、今回の後世代巡回ルートを作成する段階において、まだ巡回情報が設定されていない移動対象領域が2つ以上残っていて、かつ、まだ巡回情報が設定されていない移動対象領域に設定する巡回情報である次に進む移動対象領域の情報を親から引き継ぐことができない場合には、まだ巡回情報が設定されていない移動対象領域に設定する次に進む移動対象領域を、まだ巡回情報として設定されていない移動対象領域の中から任意に選択することを特徴とする請求項3に記載の巡回ルート作成装置。
【請求項5】
まだ巡回情報が設定されていない移動対象領域に設定する巡回情報である次に進む移動対象領域の情報を親から引き継ぐことができない場合とは、まだ巡回情報が設定されていない移動対象領域に引き継がせるようとする親の巡回情報である次に進む移動対象領域の情報が、今回の後世代巡回ルートを作成する際に巡回情報を一番最初に設定した移動対象領域である場合、及び、まだ巡回情報が設定されていない移動対象領域に引き継がせるようとする親の巡回情報である次に進む移動対象領域の情報が、今回の後世代巡回ルートの作成において既に使用されている場合であることを特徴とする請求項4に記載の巡回ルート作成装置。
【請求項6】
今回の後世代巡回ルート作成手段は、今回の後世代巡回ルートを作成する段階において、まだ巡回情報が設定されていない移動対象領域が1つしか残っていないと判定した場合に、当該1つ残った移動対象領域の巡回情報である次に進む移動対象領域の情報を、今回の後世代巡回ルートを作成する際に巡回情報を一番最初に設定した移動対象領域とすることを特徴とする請求項3に記載の巡回ルート作成装置。
【請求項7】
今回の後世代巡回ルート作成手段は、前回の後世代巡回ルート作成手段により作成された前回の複数の後世代巡回ルートの中から移動コストの小さい巡回ルートを抽出して、当該抽出された巡回ルートを作成する元となった巡回ループの移動対象領域間のルートを変更する移動対象領域間ルート改変処理手段を備え、
移動対象領域間ルート改変処理手段は、
巡回ループの各移動対象領域のうちから異なる任意の第1の移動対象領域と第2の移動対象領域とを任意に選択する第1ステップと、
第2の移動対象領域の巡回情報として設定されている次に進む移動対象領域の情報を保留情報として記録しておく第2ステップと、
第2の移動対象領域の巡回情報として設定されている次に進む移動対象領域の情報を巡回情報として持っている移動対象領域を探索して当該移動対象領域の有無を判定する第3ステップと、
第1の移動対象領域の巡回情報に設定する次に進むエリアの情報として、第2の移動対象領域を設定する第4ステップと、
第4ステップの処理を行うのが初めてではない場合に、第2の移動対象領域の巡回情報に設定されている巡回パターンを反転させる第5ステップと、
第3ステップでの判定結果が有であった場合、第4ステップの後、又は、第5ステップの後において、第1の移動対象領域を第2の移動対象領域に変更するとともに、第2の移動対象領域を第3ステップで探索された移動対象領域に変更した後に、第3ステップの処理に戻る第6ステップと、
第3ステップでの判定結果が無であった場合、第4ステップの後、又は、第5ステップの後において、保留情報を第2の移動対象領域の巡回情報としての次に進む移動対象領域として設定するとともに、第2の移動対象領域の巡回情報に設定されている巡回パターンを反転させる第7ステップとを備えたことを特徴とする請求項2乃至請求項6のいずれか一項に記載の巡回ルート作成装置。
【請求項8】
今回の後世代巡回ルート作成手段は、前回の後世代巡回ルート作成手段により作成された前回の複数の後世代巡回ルートの中から移動コストの小さい巡回ルートを抽出して、当該抽出された巡回ルートを作成する元となった巡回ループの移動対象領域内の巡回パターンを変更する巡回パターン改変処理手段を備え、巡回パターン改変処理手段は、巡回ループの各移動対象領域から無作為に1つの移動対象領域を選んで、当該移動対象領域の巡回情報である巡回パターンの情報を変更することを特徴とする請求項2乃至請求項6のいずれか一項に記載の巡回ルート作成装置。
【請求項9】
複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを作成するための巡回ルート作成装置であって、
各移動対象領域を一巡する巡回ループを作成する巡回ループ作成手段と、
作成された巡回ループの経路を移動体で移動させる場合の移動コストを算出する移動コスト算出手段と、
作成された巡回ループを形成する移動対象領域間ルートのうち最も移動コストの大きい移動対象領域間ルートを削除して、削除した移動対象領域間ルートのルート終端が繋がれていた移動対象領域を巡回ルートのスタート領域とし、かつ、削除した移動対象領域間ルートのルート始端が繋がれていた移動対象領域を巡回ルートのゴール領域とした各移動対象領域を一巡する巡回ルートを作成する巡回ルート作成手段とを備え、
巡回ループ作成手段は、
移動対象領域毎に巡回情報を設定することにより最初の巡回ループを作成する最初の巡回ループ作成手段と、
最初の巡回ループの巡回情報を変更した巡回ループを作成する巡回ループ更新手段とを備え、
巡回ルート作成手段は、
巡回ループ更新手段により作成された今回の巡回ループに基づいて作成された今回の巡回ルートの移動コストと、巡回ループ更新手段により作成された前回の巡回ループに基づいて作成された前回の巡回ルートの移動コストとを比較して、移動コストの小さい巡回ルートを残す判定手段を備え、
巡回情報は、各移動対象領域毎に設定される自己の移動対象領域内の巡回パターンの情報と次に進む移動対象領域の情報とで構成された組み合わせ情報であることを特徴とする巡回ルート作成装置。
【請求項10】
移動対象領域は、XY座標情報に基づいて区画された領域であり、
移動対象領域内の巡回パターンは、X軸に沿ってジグザグに進むX方向巡回パターン、又は、Y軸に沿って進むジグザグなY方向巡回パターンであり、
X方向巡回パターンは、移動開始位置をX座標最小値Y座標最大値の位置とする第1パターン、移動開始位置をX座標最小値Y座標最小値の位置とする第2パターン、移動開始位置をX座標最大値Y座標最大値の位置とする第3パターン、移動開始位置をX座標最大値Y座標最小値の位置とする第4パターンであり、
Y方向巡回パターンは、移動開始位置をX座標最小値Y座標最大値の位置とする第5パターン、移動開始位置をX座標最大値Y座標最大値の位置とする第6パターン、移動開始位置をX座標最小値Y座標最小値の位置とする第7パターン、移動開始位置をX座標最大値Y座標最小値の位置とする第8パターンであることを特徴とする請求項1乃至請求項9のいずれか一項に記載の巡回ルート作成装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数の移動対象領域を移動体に巡回させる巡回ルートを作成するための巡回ルート作成装置に関する。
【背景技術】
【0002】
本出願人による発明である移動体の移動制御システムとして、移動対象面(移動対象領域)上を移動させる移動体の移動予定情報(移動予定ルート)を作成する移動予定情報作成処理と、移動体を移動予定情報に基づいて移動させるとともに、移動情報取得手段により取得された移動体の実際の移動情報と移動予定情報とを比較して移動体の移動を制御する移動制御処理と、を備えた移動体の移動制御システムが開示されている(特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
上述した移動体の移動制御方法では、移動対象領域が複数ある場合において、移動体を当該複数の移動対象領域間で効率的に巡回させるための巡回ルートを作成することについては開示されておらず、当該巡回ルートを作成するための巡回ルート作成装置の開発が望まれているという課題があった。
本発明は、上記課題に鑑み、複数の移動対象領域を移動体に巡回させるための効率的な巡回ルートを作成可能な巡回ルート作成装置を提供するものである。
【課題を解決するための手段】
【0005】
本発明に係る巡回ルート作成装置は、複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを作成するための巡回ルート作成装置であって、各移動対象領域を一巡する巡回ループを作成する巡回ループ作成手段と、作成された巡回ループの経路を移動体で移動させる場合の移動コストを算出する移動コスト算出手段と、作成された巡回ループを形成する移動対象領域間ルートのうち最も移動コストの大きい移動対象領域間ルートを削除して、削除した移動対象領域間ルートのルート終端が繋がれていた移動対象領域を巡回ルートのスタート領域とし、かつ、削除した移動対象領域間ルートのルート始端が繋がれていた移動対象領域を巡回ルートのゴール領域とした各移動対象領域を一巡する巡回ルートを作成する巡回ルート作成手段とを備え、巡回ループ作成手段は、移動対象領域毎に巡回情報を設定することにより巡回ループを作成する初期世代巡回ループ作成手段と、後世代巡回ループ作成手段とを備え、巡回ルート作成手段は、初期世代巡回ルート作成手段と、後世代巡回ルート作成手段とを備え、初期世代巡回ループ作成手段は、複数の巡回ループを作成し、初期世代巡回ルート作成手段は、初期世代巡回ループ作成手段により作成された複数の初期世代巡回ループ毎に、各移動対象領域毎の巡回情報を変更して、複数の初期世代巡回ルートを作成し、後世代巡回ループ作成手段は、複数の初期世代巡回ルートのうち、移動コストの小さい初期世代巡回ルートをいくつか抽出し、この抽出された初期世代巡回ルートの巡回情報を使用して後世代巡回ループを作成し、後世代巡回ルート作成手段は、後世代巡回ループ作成手段により作成された後世代巡回ループ毎に、各移動対象領域毎の巡回情報を変更して、後世代巡回ルートを作成し、巡回情報は、各移動対象領域毎に設定される自己の移動対象領域内の巡回パターンの情報と次に進む移動対象領域の情報とで構成された組み合わせ情報であることを特徴とする。
また、後世代の世代数は複数であり、今回の後世代巡回ルート作成手段は、前回の後世代巡回ループ作成手段により作成された前回の後世代巡回ループ毎に、各移動対象領域毎の巡回情報を変更して、今回の後世代巡回ルートを作成し、最終世代の後世代巡回ルート作成手段は、最終世代として作成した複数の巡回ルートのうち、移動コストが最小である巡回ルートを巡回ルートとして決定することを特徴とする。
また、今回の後世代巡回ルート作成手段は、前回の後世代巡回ループ作成手段により作成された前回の複数の後世代巡回ループの中から移動コストの小さい巡回ルートの1つ以上を親と定義し、当該親の巡回ルートの巡回情報を引き継ぐことにより、今回の後世代巡回ルートを作成することを特徴とする。
また、今回の後世代巡回ルート作成手段は、今回の後世代巡回ルートを作成する段階において、まだ巡回情報が設定されていない移動対象領域が2つ以上残っていて、かつ、まだ巡回情報が設定されていない移動対象領域に設定する巡回情報である次に進む移動対象領域の情報を親から引き継ぐことができない場合には、まだ巡回情報が設定されていない移動対象領域に設定する次に進む移動対象領域を、まだ巡回情報として設定されていない移動対象領域の中から任意に選択することを特徴とする。
また、まだ巡回情報が設定されていない移動対象領域に設定する巡回情報である次に進む移動対象領域の情報を親から引き継ぐことができない場合とは、まだ巡回情報が設定されていない移動対象領域に引き継がせるようとする親の巡回情報である次に進む移動対象領域の情報が、今回の後世代巡回ルートを作成する際に巡回情報を一番最初に設定した移動対象領域である場合、及び、まだ巡回情報が設定されていない移動対象領域に引き継がせるようとする親の巡回情報である次に進む移動対象領域の情報が、今回の後世代巡回ルートの作成において既に使用されている場合であることを特徴とする。
また、今回の後世代巡回ルート作成手段は、今回の後世代巡回ルートを作成する段階において、まだ巡回情報が設定されていない移動対象領域が1つしか残っていないと判定した場合に、当該1つ残った移動対象領域の巡回情報である次に進む移動対象領域の情報を、今回の後世代巡回ルートを作成する際に巡回情報を一番最初に設定した移動対象領域とすることを特徴とする。
また、今回の後世代巡回ルート作成手段は、前回の後世代巡回ルート作成手段により作成された前回の複数の後世代巡回ルートの中から移動コストの小さい巡回ルートを抽出して、当該抽出された巡回ルートを作成する元となった巡回ループの移動対象領域間のルートを変更する移動対象領域間ルート改変処理手段を備え、移動対象領域間ルート改変処理手段は、巡回ループの各移動対象領域のうちから異なる任意の第1の移動対象領域と第2の移動対象領域とを任意に選択する第1ステップと、第2の移動対象領域の巡回情報として設定されている次に進む移動対象領域の情報を保留情報として記録しておく第2ステップと、第2の移動対象領域の巡回情報として設定されている次に進む移動対象領域の情報を巡回情報として持っている移動対象領域を探索して当該移動対象領域の有無を判定する第3ステップと、第1の移動対象領域の巡回情報に設定する次に進むエリアの情報として、第2の移動対象領域を設定する第4ステップと、第4ステップの処理を行うのが初めてではない場合に、第2の移動対象領域の巡回情報に設定されている巡回パターンを反転させる第5ステップと、第3ステップでの判定結果が有であった場合、第4ステップの後、又は、第5ステップの後において、第1の移動対象領域を第2の移動対象領域に変更するとともに、第2の移動対象領域を第3ステップで探索された移動対象領域に変更した後に、第3ステップの処理に戻る第6ステップと、第3ステップでの判定結果が無であった場合、第4ステップの後、又は、第5ステップの後において、保留情報を第2の移動対象領域の巡回情報としての次に進む移動対象領域として設定するとともに、第2の移動対象領域の巡回情報に設定されている巡回パターンを反転させる第7ステップとを備えたことを特徴とする。
また、今回の後世代巡回ルート作成手段は、前回の後世代巡回ルート作成手段により作成された前回の複数の後世代巡回ルートの中から移動コストの小さい巡回ルートを抽出して、当該抽出された巡回ルートを作成する元となった巡回ループの移動対象領域内の巡回パターンを変更する巡回パターン改変処理手段を備え、巡回パターン改変処理手段は、巡回ループの各移動対象領域から無作為に1つの移動対象領域を選んで、当該移動対象領域の巡回情報である巡回パターンの情報を変更することを特徴とする。
また、本発明に係る巡回ルート作成装置は、複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを作成するための巡回ルート作成装置であって、各移動対象領域を一巡する巡回ループを作成する巡回ループ作成手段と、作成された巡回ループの経路を移動体で移動させる場合の移動コストを算出する移動コスト算出手段と、作成された巡回ループを形成する移動対象領域間ルートのうち最も移動コストの大きい移動対象領域間ルートを削除して、削除した移動対象領域間ルートのルート終端が繋がれていた移動対象領域を巡回ルートのスタート領域とし、かつ、削除した移動対象領域間ルートのルート始端が繋がれていた移動対象領域を巡回ルートのゴール領域とした各移動対象領域を一巡する巡回ルートを作成する巡回ルート作成手段とを備え、巡回ループ作成手段は、移動対象領域毎に巡回情報を設定することにより最初の巡回ループを作成する最初の巡回ループ作成手段と、最初の巡回ループの巡回情報を変更した巡回ループを作成する巡回ループ更新手段とを備え、巡回ルート作成手段は、巡回ループ更新手段により作成された今回の巡回ループに基づいて作成された今回の巡回ルートの移動コストと、巡回ループ更新手段により作成された前回の巡回ループに基づいて作成された前回の巡回ルートの移動コストとを比較して、移動コストの小さい巡回ルートを残す判定手段を備え、巡回情報は、各移動対象領域毎に設定される自己の移動対象領域内の巡回パターンの情報と次に進む移動対象領域の情報とで構成された組み合わせ情報であることを特徴とする。
また、移動対象領域は、XY座標情報に基づいて区画された領域であり、移動対象領域内の巡回パターンは、X軸に沿ってジグザグに進むX方向巡回パターン、又は、Y軸に沿って進むジグザグなY方向巡回パターンであり、X方向巡回パターンは、移動開始位置をX座標最小値Y座標最大値の位置とする第1パターン、移動開始位置をX座標最小値Y座標最小値の位置とする第2パターン、移動開始位置をX座標最大値Y座標最大値の位置とする第3パターン、移動開始位置をX座標最大値Y座標最小値の位置とする第4パターンであり、Y方向巡回パターンは、移動開始位置をX座標最小値Y座標最大値の位置とする第5パターン、移動開始位置をX座標最大値Y座標最大値の位置とする第6パターン、移動開始位置をX座標最小値Y座標最小値の位置とする第7パターン、移動開始位置をX座標最大値Y座標最小値の位置とする第8パターンであることを特徴とする。
本発明によれば、複数の移動対象領域を移動体に巡回させるための効率的な巡回ルートを作成可能な巡回ルート作成装置を提供できるようになる。
【図面の簡単な説明】
【0006】
【
図1】移動対象領域及び障害物領域の作成処理(phase1)の説明図。
【
図2】障害物グループ分け処理(phase2)の説明図。
【
図3】障害物角認識処理(phase3)の説明図。
【
図4】障害物間境界線作成処理(phase4)の説明図。
【
図5】分割領域区分け処理(phase5)の説明図。
【
図6】分割領域区分け処理(phase5)の説明図。
【
図7】分割領域認識処理(phase6)の説明図。
【
図8】分割領域認識処理(phase6)の説明図。
【
図9】等間隔直線経路作成処理(phase7)の説明図。
【
図10】交点座標抽出処理(phase8)の説明図。
【
図11】エリア毎交点座標抽出処理(phase9)及び分割領域内ジグザグ移動予定ルート作成処理(phase10)の説明図。
【
図12】分割領域内ジグザグ移動予定ルート作成処理(phase10)及び分割領域間移動予定ルート作成処理(phase11)の説明図。
【
図13】移動対象領域及び障害物領域の作成処理(phase1)の手順を示すフローチャート。
【
図14】障害物グループ分け処理(phase2)の手順を示すフローチャート。
【
図15】障害物角認識処理(phase3)の手順を示すフローチャート。
【
図16】障害物間境界線作成処理(phase4)の手順を示すフローチャート。
【
図17】分割領域区分け処理(phase5)の手順を示すフローチャート。
【
図18】分割領域認識処理(phase6)の手順を示すフローチャート。
【
図19】等間隔直線経路作成処理(phase7)及び交点座標抽出処理(phase8)の手順を示すフローチャート。
【
図20】エリア毎交点座標抽出処理(phase9)の手順を示すフローチャート。
【
図21】分割領域内ジグザグ移動予定ルート作成処理(phase10)の手順を示すフローチャート。
【
図22】移動コスト計算処理(phase11)の手順を示すフローチャート。
【
図23】別ルート作成処理(phase12~16)の手順を示すフローチャート。
【
図24】ルート選択処理(phase17)の手順を示すフローチャート。
【
図25】分割領域間移動予定ルート作成処理(phase18)の手順を示すフローチャート。
【
図26】分割領域認識処理(phase6)の説明図。
【
図27】分割領域認識処理(phase6)の説明図。
【
図28】分割領域認識処理(phase6)の説明図。
【
図29】エリア毎交点座標抽出処理(phase9)及び分割領域内ジグザグ移動予定ルート作成処理(phase10)の説明図。
【
図30】分割領域内ジグザグ移動予定ルート作成処理(phase10)の説明図。
【
図34】初期世代個体作成処理を示すフローチャート。
【
図38】初期巡回情報配列及び初期巡回ループを示す図。
【発明を実施するための形態】
【0007】
前提技術
まず、本発明に係る巡回ルート作成装置の実施形態を説明する前に、本発明に係る巡回ルート作成装置の前提装置(前提技術)となる移動予定ルート作成装置を、段落0007乃至段落0053、
図1乃至
図31に基づいて説明する。
本発明に係る巡回ルート作成装置の前提装置となる移動予定ルート作成装置は、移動体を移動対象領域内の障害物を避けて移動させるための移動体の移動予定ルート、即ち、当該移動対象領域内を移動させる移動体の障害物回避移動予定ルートを作成する装置である。
当該移動体の移動予定ルート作成装置は、移動対象領域作成手段と、障害物領域作成手段と、移動可能領域分割手段と、分割領域内移動予定ルート作成手段と、分割領域間移動予定ルート作成手段とを備える。
即ち、移動対象領域作成手段は、移動対象領域の位置を示す移動対象領域のXY座標情報(即ち、移動対象領域の平面座標情報)に基づいて移動対象領域を区画する移動対象領域境界線で囲まれた移動対象領域を作成する手段である。
障害物領域作成手段は、移動対象領域内の障害物の位置を示すXY座標情報に基づいて移動対象領域内に存在する障害物を区画する障害物領域境界線で囲まれた障害物領域を作成する手段である。
移動可能領域分割手段は、移動対象領域の位置を示すXY座標情報及び移動対象領域内の障害物の位置を示すXY座標情報を利用して障害物を避けた移動可能領域内を複数の分割領域に分割する手段である。
分割領域内移動予定ルート作成手段は、複数の各分割領域内での移動体の移動予定ルートを作成する手段である。
分割領域間移動予定ルート作成手段は、分割領域間での移動体の移動予定ルートを作成する手段である。
【0008】
そして、移動可能領域分割手段は、分割領域作成手段と、分割領域認識手段とを備える。
当該分割領域作成手段は、障害物同士を繋ぐ第1の境界線、障害物と移動対象領域境界線とを繋ぐ第2の境界線、障害物と第1の境界線又は第2の境界線とを繋ぐ第3の境界線を作成して、移動対象領域内をこれら境界線で区画することにより、これら境界線、障害物領域境界線、移動対象領域境界線で形成された分割領域境界線で囲まれた分割領域を作成する手段である。
分割領域認識手段は、複数の各分割領域及び各障害物領域にそれぞれ識別情報を付与して複数の各分割領域を認識する手段である。
また、分割領域内移動予定ルート作成手段は、横直線作成手段と、縦直線作成手段と、第1の交点認識手段と、第2の交点認識手段と、第1のルート作成手段と、第2のルート作成手段と、第1の移動効率算出手段と、ルート選択手段とを備える。
横直線作成手段は、移動対象領域をY軸に沿って等間隔に区切るX軸と平行な複数の横直線を作成する手段である。
縦直線作成手段は、移動対象領域をX軸に沿って等間隔に区切るY軸と平行な複数の縦直線を作成する手段である。
第1の交点認識手段は、分割領域境界線と横直線との交点を認識する手段である。
第2の交点認識手段は、分割領域境界線と縦直線との交点を認識する手段である。
第1のルート作成手段は、各分割領域境界線上の交点を横直線で繋いで形成されたY軸に沿って進む分割領域毎のジグザグな第1のルートを作成する手段である。
第2のルート作成手段は、各分割領域境界線上の交点を縦直線で繋いで形成されたX軸に沿って進む分割領域毎のジグザグな第2のルートを作成する手段である。
第1の移動効率算出手段は、分割領域毎の第1のルートに沿って移動する場合の移動効率を算出する手段である。
第2の移動効率算出手段は、分割領域毎の第2のルートに沿って移動する場合の移動効率を算出する手段である。
ルート選択手段は、同じ分割領域内を第1のルートに沿って移動する場合の移動効率と第2のルートに沿って移動する場合の移動効率とを比較して、第1のルート及び第2のルートのうち移動効率の良いルートを当該分割領域内での移動予定ルートとして選択する手段である。
そして、上記分割領域作成手段は、より具体的には、移動対象領域内に存在する複数の障害物を、X座標情報の近いもの同士、Y座標情報の近いもの同士に、グループ分けする障害物グループ分け手段と、各障害物の複数の角にそれぞれ識別情報を付与して障害物の角を認識する障害物角認識手段と、X座標情報の近いもの同士としてグループ分けされた一方の障害物の角と他方の障害物の角とを接続する第1の接続線、及び、Y座標情報の近いもの同士としてグループ分けされた一方の障害物の角と他方の障害物の角とを接続する第1の接続線を作成する第1の接続線作成手段と、障害物のうち第1の接続線が接続されていない角と移動対象領域境界線とを接続する第2の接続線を作成する第2の接続線作成手段と、障害物のうち第1の接続線及び第2の接続線が接続されていない角と既に作成した第1の接続線又は第2の接続線とを接続する第3の接続線を作成する第3の接続線作成手段とを備えた構成とした。
また、上記分割領域間移動予定ルート作成手段は、より具体的には、一方の分割領域の分割領域内移動予定ルートの終点と他方の分割領域の分割領域内移動予定ルートの始点とを直線で繋いだ分割領域間移動予定ルートを作成する分割領域間直線移動予定ルート作成手段と、分割領域間直線移動予定ルート作成手段で作成した分割領域間直線移動予定ルートと移動対象領域境界線又は障害物領域境界線とが接触した場合に、移動対象領域境界線又は障害物領域境界線と接触しない分割領域間移動予定ルートである分割領域間迂回移動予定ルートを作成する分割領域間迂回移動予定ルート作成手段とを備えた構成とした。
【0009】
本発明による巡回ルート作成装置の前提装置となる移動予定ルート作成装置を構成する、移動対象領域作成手段、障害物領域作成手段、障害物グループ分け手段、障害物角認識手段、第1の接続線作成手段、第2の接続線作成手段、第3の接続線作成手段、分割領域認識手段、横直線作成手段、縦直線作成手段、第1の交点認識手段、第2の交点認識手段、第1のルート作成手段、第2のルート作成手段、第1の移動効率算出手段、第2の移動効率算出手段、ルート選択手段、分割領域間移動予定ルート作成手段は、制御手段により実現され、当該各手段を実行する制御手段は、各手段が実行する処理の手順を示す処理プログラムと、当該処理プログラムによる情報処理を実現するコンピュータ等のハードウエア資源とにより構成される。
換言すれば、前提装置の移動予定ルート作成処理プログラムは、コンピュータを、上述した移動対象領域作成手段、障害物領域作成手段、障害物グループ分け手段、障害物角認識手段、第1の接続線作成手段、第2の接続線作成手段、第3の接続線作成手段、分割領域認識手段、横直線作成手段、縦直線作成手段、第1の交点認識手段、第2の交点認識手段、第1のルート作成手段、第2のルート作成手段、第1の移動効率算出手段、第2の移動効率算出手段、ルート選択手段、分割領域間移動予定ルート作成手段として機能させるプログラムである。
【0010】
上述した移動対象領域作成手段及び障害物領域作成手段により、
図1,
図13に示した移動対象領域及び障害物領域の作成処理(phase1)が実行される。
障害物グループ分け手段により、
図2,
図14に示した障害物グループ分け処理(phase2)が実行される。
障害物角認識手段により、
図3,
図15に示した障害物角認識処理(phase3)が実行される。
第1の接続線作成手段により、
図4,
図16に示した障害物間境界線作成処理(phase4)が実行される。
第2の接続線作成手段及び第3の接続線作成手段により、
図5,
図6,
図17に示した分割領域区分け処理(phase5)が実行される。
分割領域認識手段により、
図7,
図8,
図18,
図26乃至
図28に示した分割領域認識処理(phase6)が実行される。
また、横直線作成手段により、
図9,
図19に示した等間隔直線経路作成処理(phase7)が実行される。
第1の交点認識手段により、
図10,
図19に示した交点座標抽出処理(phase8)、及び、
図11,
図20,
図29に示したエリア毎交点座標抽出処理(phase9)が実行される。
第1のルート作成手段により、
図12,
図21,
図29,
図30に示した分割領域内ジグザグ移動予定ルート作成処理(phase10)が実行される。
第1の移動効率算出手段により、分割領域毎の第1のルートに沿って移動する場合の
図22に示した移動コスト計算処理(phase11)が実行される。
縦直線作成手段により、等間隔直線経路作成処理(phase7)を置き換えた処理である
図23のステップS230に示したphase12が実行される。
第2の交点認識手段により、交点座標抽出処理(phase8)を置き換えた処理である
図23のステップS240に示したphase13、及び、エリア毎交点座標抽出処理(phase9)と同じ処理である
図23のステップS250に示したphase14が実行される。
第2のルート作成手段により、分割領域内ジグザグ移動予定ルート作成処理(phase10)を置き換えた処理である
図23のステップS260に示したphase15が実行される。
第2の移動効率算出手段により、
図23のステップS270に示したphase16が実行される。つまり、分割領域毎の第2のルートに沿って移動する場合において、
図22に示した移動コスト計算処理(phase11)と同じ移動コスト計算処理が実行される。
ルート選択手段により、
図24に示したルート選択処理(phase17)が実行される。
分割領域間移動予定ルート作成手段により、
図12,
図25に示した分割領域間移動予定ルート作成処理が実行される。
尚、分割領域間移動予定ルート作成手段の分割領域間直線移動予定ルート作成手段によって、分割領域間直線移動予定ルート作成処理(
図25の経路探索アルゴリズム部分以外の部分)が実行されるとともに、分割領域間移動予定ルート作成手段の分割領域間迂回移動予定ルート作成手段によって、分割領域間迂回移動予定ルート作成処理としての
図25の経路探索アルゴリズム部分の処理が実行される。
【0011】
移動体は、移動予定ルート作成装置により作成された移動予定ルートに基づいて、移動対象領域内の移動対象面である例えば床面を移動することができるように構成された移動体1である(
図31参照)。
制御手段は、例えば
図31に示すように、移動体1に搭載されている。
従って、この場合、移動体1の移動予定ルートを作成するとともに、当該作成された移動予定ルート(移動予定情報(XY座標情報))に基づいて移動体1の移動制御を行う制御手段50を備えた移動体1となる。
尚、移動体1の移動予定ルートを作成する制御手段は、移動体1に搭載されたコンピュータではなく、移動体1とは別個のパーソナルコンピュータ等のコンピュータと、当該コンピュータにより処理される上述した処理プログラムとにより構成されてもよい。この場合、当該コンピュータに、後述するように、移動体1を移動させる移動対象領域のXY座標情報と当該移動対象領域内の障害物のXY座標情報とを入力して、移動対象領域及び障害物を認識させて、移動予定ルートを作成させる。そして、当該作成された移動予定ルートを移動体1の制御手段に入力することによって、当該移動体1の制御手段が、当該移動予定ルートに基づいて移動体1を移動対象領域内の移動可能領域内で移動させることができるようになる。
【0012】
移動予定ルート作成処理においては、まず、例えば屋内における移動対象領域Aとしての例えば床面領域と壁との境界位置における壁の角のXY座標情報、及び、当該移動対象領域Aとしての床面領域内に存在する障害物Bとしての柱(以下、柱Bという)の角のXY座標情報を、コンピュータに予め入力しておく。これにより、コンピュータは、入力されたXY座標情報を、当該コンピュータが管理する表示画面D上でのXY座標情報に変換して、記憶手段に記録する。
即ち、予めコンピュータに、移動対象領域Aの位置を示す移動対象領域のXY座標情報として、床面領域と壁との境界位置における壁の角のXY座標情報と、柱(障害物)Bの位置を示すXY座標情報として、柱Bの角のXY座標情報とを入力しておく。
尚、コンピュータは、当該移動対象領域A及び柱(障害物)Bを認識して例えば表示画面Dに表示し(
図1参照)、最終的には、作成した移動予定ルートを認識して例えば表示画面Dに表示する(
図12参照)。
【0013】
尚、上述したXY座標情報は、移動対象領域Aでの実際のXY座標情報、及び、表示画面Dを制御するコンピュータが当該実際のXY座標情報に基づいて表示画面D上で管理するXY座標情報である。
コンピュータが表示画面D上で管理する、X軸方向の最小間隔、及び、Y軸方向の最小間隔は、コンピュータが搭載するXY座標間隔設定プログラムに基づいて、実際の移動対象領域A上における一定の間隔に設定できるようになっている。
例えば、コンピュータが表示画面D上で管理するX軸方向の最小間隔及びY軸方向の最小間隔が、実際の10cmに対応するように設定される。この場合、例えば実際の移動対象領域Aの外に設定された基準点OからX軸方向の正方向に10cm離れた位置a、当該位置aからY軸方向の正方向に10cm離れた位置bは、コンピュータによって、表示画面D上における基準点Oを基準としたXY座標値、a=(1,0),b=(1,1)として記録されて管理されることになる。
また、実際の移動対象領域Aを区画する壁の角のXY座標情報、実際の各柱B,B…の各角のXY座標情報は、例えば、実際の移動対象領域Aの外に設定された基準点Oから、壁の各角の位置までの距離、当該基準点Oから各柱B,B…の各角の位置までの距離を、測距計などの測定手段を用いて測定した測定値を入力したり、あるいは、設計図等から入力することにより、記憶手段に記録される。
例えば、
図1に示すように、移動対象領域Aの一番左下の角から左斜め下の位置を基準点Oに決めた場合を例にして説明する。
この場合、測定した当該基準点Oから各角までの距離をコンピュータに入力することで、当該コンピュータが、XY座標間隔設定プログラムに基づいて、例えば距離10cmを表示画面DのXY座標軸上の一目盛に換算したXY座標値としてファイルに記録する。
例えば、ある角が、当該基準点OからX軸方向の正方向に100cm、基準点OからY軸方向の正方向に100cm離れた位置にあれば、当該角のXY座標値は(10,10)として記録される。尚、例えば、ある角が、当該基準点OからX軸方向の正方向に94cm、当該原点からY軸方向の正方向に96cm離れた位置にあれば、例えば四捨五入されて、当該角のXY座標値は(9,10)として記録される。
【0014】
最初に、移動対象領域及び障害物領域の作成処理(phase1)では、コンピュータが、移動対象領域作成処理プログラム及び障害物領域作成処理プログラムの手順に従って、例えば
図1に示すように、当該移動対象領域A及び移動対象領域A内の複数の柱B,B…を表示画面Dに表示する。
即ち、コンピュータが、例えば
図1に示すように、表示画面Dに、移動対象領域A内と移動対象領域A外との境界線、即ち、移動対象領域境界線Cを作成することによって移動対象領域Aを表示するとともに、当該移動対象領域A内に存在する複数の柱B,B…を表示する。この場合、移動対象領域境界線Cは、例えば移動対象領域Aとしての床面領域と壁との境界位置における壁の角のXY座標情報を繋いで作成され、柱Bの境界線(障害物領域境界線)は、例えば柱Bの角のXY座標情報を繋いで作成される。
具体的には、コンピュータは、移動対象領域作成処理プログラム及び障害物領域作成処理プログラムの手順に従って、
図13のフローチャートに示すような移動対象領域及び障害物領域の作成処理(phase1)を行う。
まず、移動対象領域Aの位置を示すXY座標情報、例えば移動対象領域Aを区切る壁(境界)の角のXY平面座標を記録したファイルからデータ(壁(境界)の角のXY座標値)を取り出すことにより、表示画面Dに移動対象領域境界線Cを作成する(ステップS1)。即ち、表示画面D上に、移動対象領域Aを区切る壁(境界)のすべての角を表示するとともに、各角を直線で繋ぐことにより、表示画面Dに移動対象領域境界線Cを表示する。
次に、柱本数管理変数初期化、即ち、柱本数管理変数nを1に設定する(ステップS2)。尚、柱本数管理変数とは、調べる対象となる柱を指定するための変数であり、記憶手段に逐次記録されて管理される。
そして、障害物として例えば柱Bの位置を示すXY座標情報、n番目の柱Bの角のXY座標を記録したファイルが存在するか否かを判定する(ステップS3)。
即ち、移動対象領域及び障害物領域の作成処理では、コンピュータが、移動対象領域Aの角、例えば移動対象領域Aとなる床面領域と壁との境界位置における壁の角のXY座標を記録した壁角座標記録ファイル、床面領域内に存在する各柱B,B…の角のXY座標を記録した柱角座標記録ファイル、柱本数管理変数レジスタのような記憶手段を使用して処理を行う。
次に、ステップS3において、n番目の柱の角のXY座標を記録したファイルが存在すると判定された場合、n番目の柱の角のXY座標を記録したファイルからデータを取り出して表示画面Dにn番目の柱を表示した(ステップS4)後、柱本数管理変数nをn+1に更新して(ステップS5)、ステップS3に戻る。
ステップS3において、n番目の柱の角のXY座標を記録したファイルが存在しないと判定された場合、移動対象領域A内のすべての柱Bが表示画面Dに表示されたことを認識して、移動対象領域及び障害物領域の作成処理(phase1)を終了し、障害物グループ分け処理(phase2)に進む。
以上の移動対象領域及び障害物領域の作成処理(phase1)により、例えば
図1に示すように、表示画面Dに、移動対象領域Aの境界となる移動対象領域境界線Cと、移動対象領域A内に存在するn個の柱(柱内領域(障害物領域))B,B…が表示される(例えば
図1に示すように、B(n)=B(1),B(2),B(3),B(4)の柱が表示される)。
つまり、コンピュータに認識された移動対象領域A及び柱(柱内領域(障害物領域))B,B…が作成されることになる。
【0015】
障害物グループ分け処理(phase2)では、コンピュータが、障害物グループ分け処理プログラムの手順に従って、
図2に示すように、柱Bの中心座標を基準として、X座標値が近い柱B同士、Y座標値が近い柱B同士をそれぞれグルーピングする。グルーピングは番号を割り振ることで行う。従って、各柱B,B…には、X軸方向の番号及びY軸方向の番号がそれぞれ割り付けられることになる。即ち、
図2の最も左側の柱B(1)の番号は1-1となり、
図2の最も右側の柱B(5)の番号は4-3となる。例えば、
図2の最も右側の柱B(5)の番号4-3の意味は、当該柱B(5)は、X軸方向の4番目のグループに属し、かつ、Y軸方向の3番目のグループに属しているということを意味する。
【0016】
即ち、コンピュータは、障害物グループ分け処理プログラムの手順に従って、
図14のフローチャートに示すような障害物グループ分け処理(phase2)を行う。
障害物グループ分け処理(phase2)では、まず、変数初期化処理を行う。即ち、柱本数管理変数nを0、比較対象管理変数pを0、グループ番号変数gxを1に設定する。(ステップS11)。
即ち、障害物グループ分け処理では、コンピュータが、柱本数管理変数レジスタ、比較対象管理変数レジスタ、グループ番号変数レジスタ、柱グループ番号記録ファイルのような記憶手段を使用して処理を行う。
次に、柱本数管理変数nの値と柱の本数が一致しているか否かを判定する(ステップS12)。
ステップS12において、nの値と柱の本数が一致していないと判定された場合、グループ化未処理の柱が存在していると認識して、柱本数管理変数nをn+1に設定してグループ化対象の柱を更新し(ステップS13)、n番(例えば
図2の柱Bのカッコ内の番号)目の柱に既にX軸方向グループ番号gxが付与されているか否かを判定する(ステップS14)。例えば、n=1(1番目)の柱(例えば
図2の柱B(1))に既にX軸方向グループ番号gxが付与されているか否かを判定する。尚、
図2の場合、柱の本数が「5」であり、nの値の最大値は「5」である。
ステップS14において、n番目の柱にX軸方向グループ番号gxが付与されていないと判定された場合、n番目の柱にX軸方向グループ番号gxを付与する(ステップS15)。グループ番号は、各柱のグループ番号を記録する柱グループ番号記録ファイルに記録される。
その後、n+pの値と柱の本数が一致しているか否かを判定する(ステップS16)。
尚、比較対象管理変数pとは、比較対象となる柱のことであり、例えば、
図2の柱B(1)の比較対象となる柱は、
図2の柱B(2),柱B(3),柱B(4),柱B(5)であり、この場合、例えば、
図2の柱B(2)のpの値は1,柱B(3)のpの値は2,柱B(4)のpの値は3,柱B(5)のpの値は4となる。従って、
図2の場合、1番目の柱B(1)では比較対象となる柱の数pの最大値は4であり、2番目の柱B(2)では比較対象となる柱の数pの最大値は3であり、3番目の柱B(3)では比較対象となる柱の数pの最大値は2であり、4番目の柱B(4)では比較対象となる柱の数pの最大値は1となるので、n+pの値の最大値と柱の本数とが一致する。即ち、
図2の場合、柱の本数が「5」であり、n+pの値の最大値も「5」である。
ステップS16において、n+pの値と柱の本数が一致していないと判定された場合、比較対象となる柱が残っていると認識して、pをp+1に設定して比較対象となる柱を更新し(ステップS17)、n番目の柱の中心座標(以下、「柱の重心」という)とn+p番目の柱の重心のX座標の差exを計算した(ステップS18)後、差exの絶対値が基準値E以下か否かを判定する(ステップS19)。
ステップS19において、差exの絶対値が基準値E以下であると判定された場合、n+p番目の柱に既にX軸方向グループ番号gxが付与されているか否かを判定する(ステップS20)。
ステップS20において、n+p番目の柱に既にX軸方向グループ番号gxが付与されていると判定された場合、ステップS16に戻って、n番目の柱と次の比較対象であるn+p番目の柱との比較処理(ステップS17~ステップS19)を行う。
ステップS20において、n+p番目の柱にX軸方向グループ番号gxが付与されていないと判定された場合、n+p番目の柱にX軸方向グループ番号gxを付与した(ステップS21)後、ステップS16に戻って、n番目の柱と次の比較対象であるn+p番目の柱との比較処理(ステップS17~ステップS19)を行う。
即ち、n番目の柱の重心とn+p番目の柱の重心のX座標の差exの絶対値が基準値E以下であれば、n+p番目の柱には、n番目の柱に付与されているX軸方向グループ番号gxと同じ番号が付与される。
また、ステップS19において、差exの絶対値が基準値E以下でない場合(ステップS19でNo)は、ステップS16に戻って、n番目の柱と次の比較対象であるn+p番目の柱との比較処理(ステップS17~ステップS19)を行う。
また、ステップS16において、n+pの値と柱の本数が一致していると判定された場合、gxをgx+1に設定するとともに、pを0に設定して(ステップS22)、ステップS12に戻る。つまり、比較対象であるn+p番目の柱に対するX軸方向グループ番号を更新してn番目の柱との比較処理に進む。
尚、ステップS19において、重心のX座標の差exの絶対値が基準値E以下でないと判定されたn+p番目の柱には、X軸方向グループ番号の付与処理が終了するまでには、ステップS22を経て、X軸方向グループ番号が付与されることになる。
ステップS14において、n番目の柱に既にX軸方向グループ番号gxが付与されていると判定された場合、ステップS12に戻る。
また、ステップS12において、nの値と柱の本数が一致していると判定された場合、すべての柱にX軸方向グループ番号gxが付与されたことを認識し、Y軸方向グループ番号gyの付与について、X軸方向グループ番号gxの付与と同様の処理を行う(ステップS23)ことによって、障害物グループ分け処理(phase2)を終了し、次の処理である、障害物角認識処理(phase3)に進む。
【0017】
障害物角認識処理(phase3)では、コンピュータが、障害物角認識処理プログラムの手順に従って、例えば
図3に示すように、断面正方形状の柱B1、断面長方形状の柱B2、断面円形状の柱B3、断面L字形状の柱B4等の柱Bの角に番号を付けて柱Bの角を認識する。
尚、例えば
図3に示すように、各柱B,B…の各角部に1~4までの番号を1つずつ付けていくが、断面円形状の柱B3(丸柱)のように角部が無い場合は、丸柱の外周円においてX軸に平行で丸柱の中心座標を通過する直線とY軸に平行で丸柱の中心座標を通過する直線とに交差する4点を角と見做して当該4つの角にそれぞれ番号を付与する。
【0018】
即ち、コンピュータは、障害物角認識処理プログラムの手順に従って、
図15のフローチャートに示すような障害物角認識処理(phase3)を行う。
障害物角認識処理(phase3)においては、まず、柱本数管理変数初期化処理を行う。即ち、柱本数管理変数nを0に設定する(ステップS31)。
次に、nの値と柱の本数が一致しているか否かを判定する(ステップS32)。
ステップS32において、nの値と柱の本数が一致していないと判定された場合、番号付け未処理の柱が存在していることを認識して、nをn+1に更新した(ステップS33)後、n番目の柱の角のうち、最もY軸座標の値が大きい角が複数あるか否かを判定する(ステップS34)。
ステップS34において、n番目の柱の角のうち、最もY軸座標の値が大きい角が1つであると判定された場合(ステップS34でNo)、n番目の柱について、最もY軸座標の値が大きい角に角番号1を付与し(ステップS35、例えば
図3の柱B1、柱B3参照)、その後、n番目の柱の角のうち、最もX軸座標の値が大きい角が複数あるか否かを判定する(ステップS37)。尚、角番号は、各柱の角番号を記録する柱角番号記録ファイルに記録される。
即ち、障害物角認識処理では、コンピュータが、柱本数管理変数レジスタ、柱角座標記録ファイル、柱角番号記録ファイルのような記憶手段を使用して処理を行う。
ステップS34において、n番目の柱の角のうち、最もY軸座標の値が大きい角が複数あると判定された場合(ステップS34でYes)、n番目の柱について、最もY軸座標の値が大きい角同士を比較し、最もX軸座標の値が小さい角に角番号1を付与する(ステップS36、例えば
図3の柱B2、柱B4参照)。つまり、最もY軸座標の値が大きい複数の角のうちX軸座標の値が小さい方の角に角番号1を付与し、その後、ステップS37に進む。
ステップS37において、n番目の柱の角のうち、最もX軸座標の値が大きい角が1つであると判定された場合(ステップS37でNo)、n番目の柱について、最もX軸座標の値が大きい角に角番号2を付与し(ステップS38、例えば
図3の柱B1、柱B3参照)、その後、n番目の柱の角のうち、最もY軸座標の値が小さい角が複数あるか否かを判定する(ステップS40)。
ステップS37において、n番目の柱の角のうち、最もX軸座標の値が大きい角が複数あると判定された場合(ステップS37でYes)、n番目の柱について、最もX軸座標の値が大きい角同士を比較し、最もY軸座標の値が大きい角に角番号2を付与する(ステップS39、例えば
図3の柱B2、柱B4参照)。つまり、最もX軸座標の値が大きい複数の角のうちY軸座標の値が大きい方の角に角番号2を付与し、その後、ステップS40に進む。
ステップS40において、n番目の柱の角のうち、最もY軸座標の値が小さい角が1つであると判定された場合(ステップS40でNo)、n番目の柱について、最もY軸座標の値が小さい角に角番号3を付与し(ステップS41、例えば
図3の柱B1、柱B3参照)、その後、n番目の柱の角のうち、最もX軸座標の値が小さい角が複数あるか否かを判定する(ステップS43)。
ステップS40において、n番目の柱の角のうち、最もY軸座標の値が小さい角が複数あると判定された場合(ステップS39でYes)、n番目の柱について、最もY軸座標の値が小さい角同士を比較し、最もX軸座標の値が大きい角に角番号3を付与する(ステップS42、例えば
図3の柱B2、柱B4参照)。つまり、最もY軸座標の値が小さい複数の角のうちX軸座標の値が大きい方の角に角番号3を付与し、その後、ステップS43に進む。
ステップS43において、n番目の柱の角のうち、最もX軸座標の値が小さい角が1つであると判定された場合(ステップS43でNo)、n番目の柱について、最もX軸座標の値が小さい角に角番号4を付与し(ステップS44、例えば
図3の柱B1、柱B3参照)、その後、ステップS32に戻る。
ステップS43において、n番目の柱の角のうち、最もX軸座標の値が小さい角が複数あると判定された場合(ステップS43でYes)、n番目の柱について、最もX軸座標の値が小さい角同士を比較し、最もY軸座標の値が小さい角に角番号4を付与する(ステップS45、例えば
図3の柱B2、柱B4参照)。つまり、最もX軸座標の値が小さい複数の角のうちY軸座標の値が小さい方の角に角番号4を付与し、その後、ステップS32に戻る。
そして、ステップS32において、nの値と柱の本数が一致していると判定された場合、すべての柱B,B…の各角に番号が付与されたことを認識して、障害物角認識処理(phase3)を終了し、障害物間境界線作成処理(phase4)に進む。
【0019】
第1の接続線作成手段による障害物間境界線作成処理(phase4)では、コンピュータが、障害物間境界線作成処理プログラムの手順に従って、
図4に示すように、柱B,B間の境界線、即ち、柱間境界線(障害物間境界線(第1の境界線))を作成する。例えば、同じグループ番号を持ち、かつ最も近い柱B,B同士の間に柱間境界線を作る。即ち、
図4においては、X軸方向の同じ3グループである番号3-1の柱B(4)と番号3-3の柱B(3)とが柱間境界線Mで繋がれ、Y軸方向の同じ1グループである番号1-1の柱B(1)と番号3-1の柱B(4)とが柱間境界線Mで繋がれ、Y軸方向の同じ3グループである番号3-3の柱B(3)と番号4-3の柱B(5)とが柱間境界線Mで繋がれた例を示している。つまり、各柱毎に、境界線を繋ぐのに最適な柱を選択して、柱同士を境界線で繋ぐようにしている。
尚、
図4においては、柱間境界線Mとして、X軸方向に沿ったクランク状の境界線、あるいは、Y軸方向に沿ったクランク状の境界線を作成した例を示したが、柱間境界線Mは、X軸方向及びY軸方向と交差する斜め直線状の境界線や、なめらかな曲線状の境界線を作成してもよい。
【0020】
即ち、コンピュータは、障害物間境界線作成処理プログラムの手順に従って、
図16のフローチャートに示すような障害物間境界線作成処理(phase4)を行う。
まず、変数初期化処理を行う。即ち、柱本数管理変数nを0、比較対象管理変数pを0に設定する(ステップS51)。
次に、nの値と柱の本数が一致しているか否かを判定する(ステップS52)。
ステップS52において、nの値と柱の本数が一致していなければ(ステップS52でNo)、接続先候補登録変数sの初期化、即ち、sをNull(無)に設定(ステップS53)する。さらに、nをn+1に設定した(ステップS54)後、n番目の柱について、正のX軸方向に既に境界線が接続されているか否かを判定する(ステップS55)。
即ち、障害物間境界線作成処理では、コンピュータが、上述した柱本数管理変数レジスタ、比較対象管理変数レジスタ、接続先候補登録変数レジスタ、柱角座標記録ファイル、柱角番号記録ファイルのような記憶手段を使用して処理を行う。
尚、接続先候補登録変数sとは、接続候補を一時的に記録する変数のことである。
ステップS55において、n番目の柱について、正のX軸方向に境界線が接続されていなければ(ステップS55でNo)、n+pの値と柱の本数が一致しているか否かを判定する(ステップS56)。
ステップS56において、n+pの値と柱の本数が一致していなければ(ステップS56でNo)、比較対象となる柱が残っているということなので、pをp+1に更新した(ステップS57)後、n番目の柱のX軸方向グループ番号とn+p番目の柱のX軸方向グループ番号とが同一か否かを判定する(ステップS58)。
ステップS58において、n番目の柱のX軸方向グループ番号とn+p番目の柱のX軸方向グループ番号とが同一であると判定された場合、n+p番目の柱の重心(中心座標)はn番目の柱から見て正のX軸方向にあるか否かを判定する(ステップS59)。
ステップS58において、n番目の柱のX軸方向グループ番号とn+p番目の柱のX軸方向グループ番号とが同一ではないと判定された場合、ステップS56に戻る。
ステップS59において、n+p番目の柱の重心がn番目の柱から見て正のX軸方向にないと判定された場合、ステップS56に戻る。
ステップS59において、n+p番目の柱の重心がn番目の柱から見て正のX軸方向にあると判定された場合、s=Nullであるか否かを判定する(ステップS60)。
ステップS60において、s=Nullであれば、n番目の柱とn+p番目の柱の重心間の距離L*を計算した(ステップS61)後、n+pを接続先候補変数sに代入し(ステップS62)、ステップS56に戻る。
ステップS60において、s=Nullでなければ、n番目の柱とn+p番目の柱の重心間の距離Lを計算した(ステップS63)後、L*>Lであるか否かを判定する(ステップS64)。
ステップS64において、L*>Lであれば、L*にLを代入し(ステップS65)、n+pを接続先候補変数sに代入した(ステップS66)後に、ステップS56に戻る。
ステップS64において、L*>Lでなければ、ステップS56に戻る。
ステップS56において、n+pの値と柱の本数が一致していると判定された場合、s=Nullであるか否かを判定し(ステップS67)、s=Nullであれば、ステップS52に戻り、s=Nullでなければ、n番目の柱の2番角とs番目の柱の4番角の間に境界線M(例えば
図4において柱B(1)の2番角から右方向に延長して柱B(4)の4番角に繋がる境界線M)を引き、その後、ステップS52に戻る。
そして、ステップS52において、nの値と柱の本数が一致していると判定された場合、正のX軸方向境界線への接続処理が終了し、その後、負のX軸方向境界線への接続処理、正のY軸方向境界線への接続処理、負のY軸方向境界線への接続処理のそれぞれについて、正のX軸方向境界線への接続処理と同様の処理で行う(ただし、X軸方向の境界線の接続は角番号2と角番号4とで行い、Y軸方向の境界線の接続は角番号1と角番号3とで行う)(ステップS69)。
そして、当該負のX軸方向境界線への接続処理、正のY軸方向境界線への接続処理、負のY軸方向境界線への接続処理が終了したら、次の分割領域区分け処理(phase5)に進む。
【0021】
以下、障害物間境界線作成処理(phase4)について、さらに具体的に説明する。
図4の柱を例にして説明すると、ステップS58で、n=1番目の柱としての柱B(1)とn+p=2番目の柱としての柱B(2)は、X軸方向グループ番号が同じではないので、ステップS57を経て、ステップS58で、柱B(1)とn+p=3番目の柱としての柱B(3)とが比較される。柱B(1)とB(3)もX軸方向グループ番号が同じではないので、さらに、ステップS57を経て、ステップS58で、柱B(1)とn+p=4番目の柱としての柱B(4)とが比較される。柱B(1)とB(4)は、X軸方向グループ番号が同じであり、ステップS59、ステップS60を経て、ステップS60において、柱B(1)とB(4)の重心間の距離L*が計算された後、柱B(4)の番号、n+p=「4」が、接続先候補変数sとして記憶される。その後、ステップS57を経て、ステップS58で、柱B(1)とn+p=5番目の柱としての柱B(5)とが比較される。柱B(1)とB(5)もX軸方向グループ番号が同じではないので、ステップS57に戻って、ステップS67を経て、ステップS68において、柱B(1)の2番角とB(4)の4番角とが境界線で繋がれる。
尚、
図4の例では、X軸方向グループ番号が同じ柱が3つ以上存在しないが、例えば、
図4において、柱B(1)及びB(4)とX軸方向グループ番号が同じ図外の柱B(6)が存在した場合には、ステップS63において、柱B(1)と当該柱B(6)の重心間の距離Lが計算される。その後、ステップS64において、柱B(1)と柱B(6)の重心間の距離Lが柱B(1)とB(4)の重心間の距離L*よりも小さければ、柱B(6)の番号、n+p=「6」が、接続先候補変数sとして記憶され、ステップS67を経て、ステップS68において、柱B(1)の2番角と柱B(6)の4番角とが境界線で繋がれることになる。
【0022】
第2の接続線作成手段及び第3の接続線作成手段による分割領域区分け処理(phase5)では、コンピュータが、分割領域区分け処理プログラムの手順に従って、
図5に示すように、柱Bと移動対象領域境界線Cとを繋ぐ境界線N(第2の境界線)、又は、柱Bと柱間境界線M(第1の境界線)又は境界線N(第2の境界線)とを繋ぐ境界線Q(第3の境界線)を作成して、移動対象領域Aを境界線C,M,N,Qで区画された複数の移動可能領域となる複数の分割領域E,E…(
図6参照)に区分けする。
つまり、障害物間境界線作成処理(phase4)において、柱間境界線Mで繋がれなかった柱Bの角部と移動対象領域境界線Cとを繋ぐ境界線N(第2の境界線)、又は、柱間境界線M(第1の境界線)で繋がれなかった柱Bの角部と柱間境界線M(第1の境界線)又は境界線N(第2の境界線)とを繋ぐ境界線Q(第3の境界線)を作成する。
これにより、移動対象領域Aが、境界線C,M,N,Qで区画された複数の移動可能領域となる複数の分割領域E,E…(
図6参照)に区分けされることになる。
【0023】
即ち、コンピュータは、分割領域区分け処理プログラムの手順に従って、
図17のフローチャートに示すような分割領域区分け処理(phase5)を行う。
分割領域区分け処理(phase5)では、まず、変数初期化処理を行う。即ち、柱本数管理変数nを0に設定する(ステップS71)。
次に、nの値と柱の本数が一致しているか否かを判定する(ステップS72)。
ステップS72において、nの値と柱の本数が一致していなければ、比較対象となる柱が残っているということなので、柱角番号管理変数初期化、即ち、柱角番号管理変数cを1に設定し(ステップS73)、さらに、柱本数管理変数nをn+1に更新し(ステップS74)、n番目の柱の角番号cの角について、既に境界線が接続されているか否かを判定する(ステップS75)。
即ち、分割領域区分け処理では、コンピュータが、柱本数管理変数レジスタ、柱角番号管理変数レジスタ、柱角座標記録ファイル、柱角番号記録ファイルのような記憶手段を使用して処理を行う。
ステップS75において、n番目の柱の角番号cの角に境界線が接続されていなければ、c=1であるか否かを判定する(ステップS76)。
ステップS76において、c=1でなければ、c=2であるか否かを判定する(ステップS77)。
ステップS77において、c=2でなければ、c=3であるか否かを判定する(ステップS78)。
ステップS78において、c=3でなければ、角番号4から壁、柱、境界線のいずれかに接触するまで負のX軸方向に境界線Nを伸ばす(ステップS79、例えば
図5の柱B(1)、柱B(2)、柱B(3)参照)。その後、柱角番号管理変数cをc+1に更新し(ステップS80)、c=5であるか否かを判定する(ステップS81)。
ステップS76において、c=1であれば、角番号1から壁、柱、境界線のいずれかに接触するまで正のY軸方向に境界線Nを伸ばす(ステップS82、例えば
図5の柱B(1)、柱B(2)、柱B(3)参照)。その後、ステップS80に進む。
また、ステップS77において、c=2であれば、角番号2から壁、柱、境界線のいずれかに接触するまで正のX軸方向に境界線Nを伸ばす(ステップS83、例えば
図5の柱B(2)、柱B(4)参照)。その後、ステップS80に進む。
また、ステップS78において、c=3であれば、角番号3から壁、柱、境界線のいずれかに接触するまで負のY軸方向に境界線Nを伸ばす(ステップS84、例えば
図5の柱B(1)、柱B(2)、柱B(4)参照)。その後、ステップS80に進む。
即ち、各角番号から境界線を伸ばす処理が終了した(ステップS82,ステップS83,ステップS84,ステップS79)後は、柱角番号管理変数cをc+1に更新し(ステップS80)、c=5であるか否かを判定する(ステップS81)。
ステップS81において、c=5であれば、ステップS72に戻り、次の比較対象となる柱への処理に移行する。
ステップS81において、c=5でなければ、ステップS75に戻り、ステップS75~ステップS84までの処理を行う。
そして、ステップS72において、nの値と柱の本数が一致していれば、分割領域区分け処理(phase5)を終了し、分割領域認識処理(phase6)に進む。
【0024】
分割領域認識処理(phase6)では、コンピュータが、分割領域認識処理プログラムの手順に従って、移動対象領域Aにおいて線で区切られた複数の各エリア(壁外領域(移動対象領域A外領域)、柱B内領域(障害物領域)、分割領域のすべて)にそれぞれ識別情報としての番号を所定の順番で付与することにより、複数の各分割領域E,E…を認識する。
当該分割領域認識処理(phase6)は、例えば、
図8,
図23~
図25に示すような、塗りつぶし処理にてエリアを抽出していき、抽出したエリア毎に個別のエリア番号を付けた後、各分割領域E,E…を認識する処理である。
【0025】
コンピュータは、分割領域認識処理プログラムの手順に従って、
図18のフローチャートに示すような分割領域認識処理(phase6)を行う。
分割領域認識処理では、コンピュータが、塗りつぶし判定兼エリア番号記録配列ファイル、X軸方向探索管理変数レジスタ、Y軸方向探索管理変数レジスタ、エリア番号管理変数レジスタ、X軸方向塗りつぶし管理変数レジスタ、Y軸方向塗りつぶし管理変数レジスタ、塗りつぶし管理ファイル、塗りつぶし管理変数一時保留レジスタのような記憶手段を使用し、これら記憶手段に記憶される値を参照しながら処理を行う。
まず、変数初期化を行う。即ち、塗りつぶし判定兼エリア番号記録配列Stack[Xmax][Ymax]を[0,0,0,・・・・]に、X軸方向探索管理変数iを0に、Y軸方向探索管理変数jを0に、エリア番号管理変数aを1に設定する(ステップS91)。つまり、X軸方向探索管理変数レジスタを0に、Y軸方向探索管理変数レジスタを0にして、塗りつぶし判定兼エリア番号記録配列ファイルにおける各XY座標位置の値を全部0に維持するとともに、エリア番号管理変数レジスタを1に設定して、移動対象領域Aの外側の領域を「1」に塗りつぶす処理から行う。
初めに、i>Xmaxであるか否かを判定し(ステップS92)、i>Xmaxでなければ、Stack[i][j]=0であるか否かを判定する(ステップS93)。
ステップS93において、Stack[i][j]=0であれば、Stack[i][j]を-1にする(ステップS94)ことにより、例えば、
図8(b),(f)、
図23(b),(d)、
図24(b),(d),(f)、
図25(b)の状態となる。
その後、塗りつぶし管理変数初期化、即ち、X軸方向塗りつぶし管理変数fiをiに、Y軸方向塗りつぶし管理変数fjをjに設定する(ステップS95)。
塗りつぶし管理とは、エリア毎に塗りつぶし処理を行う場合において、既にエリア番号が付けられたエリアの塗りつぶし処理を行わないために、各XY座標位置の値の管理を、塗りつぶし判定兼エリア番号記録配列ファイルとは別の塗りつぶし管理ファイルで行うようにしている。即ち、塗りつぶし判定兼エリア番号記録配列ファイルでの各XY座標位置の値であるStack[i][j]を、塗りつぶし管理ファイルでの各XY座標位置の値であるStack[fi][fj]に置き換えて管理する(例えば、
図23(d)参照)ことにより、既にエリア番号が付けられたエリアの各XY座標位置の値の探索を行わないようにして、塗りつぶし処理の処理スピードを速くできるようにしている。
次に、fi>Xmaxであるか否かを判定する(ステップS97)。
ステップS97において、fi>Xmaxでなければ、Stack[fi][fj]=-1であるか否かを判定する(ステップS98)。
ステップS98において、Stack[fi][fj]=-1であれば(ステップS98でYES)、ステップS98Aに進んで、塗りつぶし管理変数一時保留レジスタにおいて、miをfiに設定し、mjをfjに設定してから、Stack[fi][fj]をaに設定する(ステップS99)。
そして、座標(fi+1,fj)が存在し、かつ座標(fi,fj)との間に壁、柱、境界線が通っておらず、かつStack[fi+1][fj]が0であるか否かを判定する(ステップS100)。つまり、a(最初は「1」)に設定された座標[fi][fj]と当該座標[fi][fj]のX軸方向+側の座標(fi+1,fj)との間に壁、柱、境界線が無く、かつ、座標(fi+1,fj)が0であれば(ステップS100でYesの場合)、Stack[fi+1][fj]を-1に設定する(ステップS104)。その後、ステップS101に進む。
ステップS100でNoの場合、即ち、(fi,fj)と(fi+1,fj)との間に壁、柱、境界線が通っていた場合、ステップS101に進んで、座標(fi-1,fj)が存在し、かつ座標(fi,fj)との間に壁、柱、境界線が通っておらず、かつStack[fi-1][fj]が0であるか否かを判定する。つまり、a(最初は「1」)に設定された座標[fi][fj]と当該座標[fi][fj]のX軸方向-側の座標(fi-1,fj)との間に壁、柱、境界線が無く、かつ、座標(fi-1,fj)が0であれば(ステップS101でYesの場合)、Stack[fi-1][fj]を-1に設定する(ステップS105)。その後、ステップS105Aに進んで、miをfi-1に設定(ただし、fi=0のときを除く)した後、ステップS102に進む。
ステップS101でNoの場合、即ち、(fi,fj)と(fi-1,fj)との間に壁、柱、境界線が通っていた場合、ステップS102に進んで、座標(fi,fj+1)が存在し、かつ座標(fi,fj)との間に壁、柱、境界線が通っておらず、かつStack[fi][fj+1]が0であるか否かを判定する。つまり、a(最初は「1」)に設定された座標[fi][fj]と当該座標[fi][fj]のY軸方向+側の座標(fi,fj+1)との間に壁、柱、境界線が無く、かつ、座標(fi,fj+1)が0であれば(ステップS102でYesの場合)、Stack[fi][fj+1]を-1に設定する(ステップS106)。その後、ステップS103に進む。
ステップS102でNoの場合、即ち、(fi,fj)と(fi,fj+1)との間に壁、柱、境界線が通っていた場合、ステップS103に進んで、座標(fi,fj-1)が存在し、かつ座標(fi,fj)との間に壁、柱、境界線が通っておらず、かつStack[fi][fj-1]が0であるか否かを判定する。つまり、a(最初は「1」)に設定された座標[fi][fj]と当該座標[fi][fj]のY軸方向-側の座標(fi,fj-1)との間に壁、柱、境界線が無く、かつ、座標(fi,fj-1)が0であれば(ステップS103でYesの場合)、Stack[fi][fj-1]を-1に設定する(ステップS107)。その後、ステップS107Aに進んで、mjをfj-1に設定(ただし、fi=0のときを除く)した後、ステップS103Aに進んで、fiをmiに、fjをmjに設定する。
ステップS103でNoの場合、即ち、(fi,fj)と(fi,fj-1)との間に壁、柱、境界線が通っていた場合も、ステップS103Aに進んで、fiをmiに、fjをmjに設定する。
ステップS103Aの処理後、ステップS97に戻る。
また、ステップS98において、Stack[fi][fj]=-1でなければ、fiをfi+1に設定して(ステップS108)、ステップS97に戻る。
ステップS97において、fi>Xmaxであれば、ステップS109に進んで、fiを0に、fjをfj+1に設定した後、fj>Ymaxであるか否かを判定する(ステップS110)。
ステップS110において、fj>Ymaxでなければ、ステップS98に進み、fj>Ymaxであれば、ステップS111に進む。
以上により、例えば、
図8(c)~(f)、
図23(c),(d)の状態となる。
ステップS111においては、a=1であるか否かを判定し、a=1でなければ、ステップS112に進んで、a番目の区画の4方向が柱(座標が解っている)と接しており、かつ接触している柱の番号nが全て同じであるか否かを判定する。
ステップS111においては、a=1であれば、a=1番目の区画を壁外であると判定し(ステップS115)、その後、ステップS112に進む。
ステップS112でNoであれば、aをa+1に設定し(ステップS113)、iをi+1に設定して(ステップS114)、ステップS92に戻る。
ステップS112でYesの場合、a番目の区画は、柱内であると判定し(ステップS116)、その後、ステップS113に進む。
即ち、領域の境界線の四方(
図6の上下左右)が柱Bの境界線と一致し、柱Bの境界線が同じ番号の柱Bの境界線であるという柱内領域条件を満たすとコンピュータが判定した場合は、当該領域が柱内領域であると判定する。つまり、a=1ではなく、かつ、柱内領域条件を満たさない領域が、分割領域であると認識される。
換言すれば、ステップS110において、fj>Ymaxであると判定された場合、1つのエリアの塗りつぶし処理が終了し、ステップS111,112でNoであれば、その塗りつぶした領域が分割領域であり、当該分割領域に番号aが付与されて認識されることになる。
また、ステップS93において、Stack[i][j]=0でなければ、iをi+1に設定して(ステップS114)、ステップS92に戻る。
また、ステップS92において、i>Xmaxであれば、iを0、jをj+1に設定し(ステップS117)、その後、j>Ymaxであるか否かを判定し(ステップS118)、j>Ymaxでなければ、ステップS93に戻り、j>Ymaxであれば、分割領域認識処理(phase6)を終了する。
以上により、移動対象領域Aの分割処理(phase1~phase6)が終了し、続いて、移動ルートの作成処理(phase7~phase11)に進む。
【0026】
分割領域認識処理(phase6)を、上述したステップSと
図8,
図26~
図28とを参照しながら説明する。
尚、
図8では、2つのエリアを塗りつぶし処理にて抽出し、抽出したエリア毎に個別の番号を付けた例を示している。
図26~
図28では、複数のエリアを塗りつぶし処理にて抽出し、抽出したエリア毎に個別の番号を昇順に付けた例を示している。
まず、ステップS91では、
図8(a),
図26(a)に示すように、塗りつぶし判定兼エリア番号記録配列ファイル、即ち、移動対象領域A全体と移動対象領域Aの周辺を含む領域全体の各XY座標位置を示すXY座標マトリクスStack[Xmax][Ymax]の値を全部0にする。
そして、ステップS92,93,94,95を経て、
図8(b),
図26(b)に示す状態となる。
そして、ステップS97~S107Aを経て、
図8(c)~(f),
図26(c)に示す処理が行われる。
尚、ステップS105A、ステップS107Aは、
図8(e)(f)に示すような凹部がある場合に座標位置を戻して検索する処理である。つまり、この場合、X方向における-方向やY方向における-方向に座標を戻して処理を行うために、当該戻した座標位置を、塗りつぶし管理変数一時保留レジスタに変数mi,mjとして一時的に保留して処理を行うようにしている。
そして、任意のエリアの座標すべてに番号aが付けられた後(ステップS110でYESの場合)、そのエリアが、壁外領域(移動対象領域A外領域)か、柱内領域が、分割領域かの判定が行われ(ステップS111,112)、その後、次のエリアの番号が更新されて(ステップS113)、次のエリアの塗りつぶし処理に移行していく(
図8(f),(g)、
図26(d)、
図27(a)~(f)、
図28(a)~(d)参照)。
ステップS113でエリア毎に昇順で番号が付けられる。尚、
図26~
図28においては、エリアaに番号1が付与され、エリアbに番号2が付与され、エリアcに番号3が付与され、エリアdに番号4が付与され、エリアeに番号5が付与され、エリアfに番号6が付与された例を示している。つまり、各エリア毎に昇順で番号が付けられた例を示している。
【0027】
次に、移動ルートの作成処理(phase7~phase11)においては、まず、等間隔直線経路作成処理(phase7)が行われる。
等間隔直線経路作成処理(phase7)では、コンピュータが、等間隔直線経路作成処理プログラムの手順に従って、移動対象領域A内に、Y軸方向に沿った間隔が等間隔の複数の横直線S,S…を設定して、後述する分割領域内ジグザグ移動予定ルートの元となる等間隔直線経路を作成する。
図9では、移動対象領域A内に、Y軸方向に沿った間隔が等間隔の複数の横直線S,S…を設定した例を示している。
即ち、等間隔直線経路作成処理(phase7)を実行する手段は、移動対象領域AをY軸に沿って等間隔に区切るX軸と平行な複数の横直線S,S…を作成する横直線作成手段として機能する。
【0028】
次に、交点座標抽出処理(phase8)では、コンピュータが、交点座標抽出処理プログラムの手順に従って、
図10に示すように、各エリア(壁外領域(移動対象領域A外領域)、柱内領域、分割領域のすべて)を区画する境界線C,M,N,Q,柱Bの境界線(障害物領域境界線)と複数の直線S,S…との交点座標G,G…を抽出する。
【0029】
即ち、コンピュータは、等間隔直線経路作成処理プログラム及び交点座標抽出処理プログラムの手順に従って、
図19のフローチャートに示すような等間隔直線経路作成処理(phase7)及び交点座標抽出処理(phase8)を行う。
まず、境界線本数管理変数初期化、即ち、境界線本数管理変数mを0に設定する(ステップS121)。
次に、探索範囲の最も小さなy座標の値(外壁の最も下端のy座標)を特定し、その値をyに設定する(ステップS122)。
そして、X軸に平行で切片がyである直線Sを定義する(ステップS123)。
次に、m番目の境界線(壁、柱の外周を含む)は直線Sと交点を持つか否かを判定する(ステップS124)。
ステップS124において、m番目の境界線が直線Sとの交点を持つと判定された場合、その交点の座標を交点座標記録ファイルに記録し(ステップS125)、その後、mをm+1とし(ステップS126)、mの値が境界線の総本数と一致したか否かを判定する(ステップS127)。
ステップS124において、m番目の境界線が直線Sとの交点を持たないと判定された場合、ステップS126に進む。
ステップS127において、mの値が境界線の総本数と一致しなければ、一致するまで、ステップS124~ステップS126の処理を繰り返す。
ステップS127において、mの値が境界線の総本数と一致すれば、yをy+レーン間距離に設定し(ステップS128)、yの値が探索範囲の上限を超えたか否かを判定する(ステップS129)。
ステップS129において、yの値が探索範囲の上限を超えていなければ、超えるまで、ステップS123~ステップS128の処理を繰り返す、
ステップS129において、yの値が探索範囲の上限を超えた場合には、交点抽出処理を終了して、エリア毎交点座標抽出処理(phase9)に移行する。
即ち、等間隔直線経路作成処理及び交点座標抽出処理では、コンピュータが、境界線本数管理変数レジスタ、各直線Sのy座標記録ファイル、交点座標記録ファイルのような記憶手段を使用しながら処理を行う。
【0030】
尚、ステップS122における、y←探索範囲…の「探索範囲」とは、Cで囲まれた移動対象領域Aのことである。
また、ステップS123での「直線Sを定義」とは、例えば
図9に示した直線Sのことである。従って、
図19の移動予定ルート候補線作成処理では、
図9の下から上に向けて順番に直線Sを1本ずつ引いていって、直線Sを引く毎に、当該直線Sと各境界線との交点座標を記録するという処理を繰り返している。尚、移動対象領域境界線Cの下端位置及び上端位置の水平線上にも直線Sが設定される。
また、ステップS128での「レーン間距離」とは、上下方向(Y軸方向)に隣り合う直線S,S間の距離のことであり、この「レーン間距離」の値(長さ)は予め適当な長さ(例えば、10cm)に決めておく。
従って、分割領域内ジグザグ移動予定ルートの元となる各直線S,S…とすべての境界線との交点の座標がすべて交点座標記録ファイルに記録される。
この場合、例えば、交点座標記録ファイルには、XY座標が小さい順に交点に番号が付けられて、各交点のX座標及びY座標が記録される(
図12の交点XY座標を指した○数字参照)。
【0031】
エリア毎交点座標抽出処理(phase9)では、コンピュータが、エリア毎交点座標抽出処理プログラムの手順に従って、各エリア毎に、各エリアを区画する境界線C,M,N,Q,柱Bの境界線(障害物領域境界線)上の交点座標G,G…を抽出する。
図11では、エリア番号6が付与された分割領域Eを区画する境界線C,N上の交点座標G,G…を抽出した例を示している。
【0032】
コンピュータは、エリア毎交点座標抽出処理プログラムの手順に従って、
図20のフローチャートに示すようなエリア毎交点座標抽出処理(phase9)を行う。
まず、変数初期化を行う。即ち、交点数管理変数kを0、エリア番号管理変数aを1に設定する(ステップS131)。
次に、kの値が、交点座標抽出処理において交点座標記録ファイルに記録された交点数を超えたか否かを判定する(ステップS132)。
ステップS132において、kの値が、交点座標記録ファイルに記録された交点数を超えていないと判定された場合には、エリアaのaの値がエリア数を超えたか否かを判定する(ステップS133)。
ステップS133において、aの値がエリア数を超えていない場合には、k番目の交点がエリアaに隣接しているか否かを判定する(ステップS134)。
ステップS134において、k番目の交点がエリアaに隣接していると判定された場合には、a番目のエリア用の交点座標記録ファイルにすでにk番目の交点と全く同じ座標が代入されているか否かを判定する(ステップS135)。
ステップS134において、k番目の交点がエリアaに隣接していないと判定された場合には、kをk+1に設定し(ステップS137)、その後、ステップS132に戻る。
ステップS135において、a番目のエリア用の交点座標記録ファイルにすでにk番目の交点と全く同じ座標が記録されていると判定された場合、ステップS137に進む。
ステップS135において、a番目のエリア用の交点座標記録ファイルにk番目の交点と全く同じ座標が記録されていないと判定された場合、a番目のエリア用の交点座標記録ファイルにk番目の交点座標を記録し(ステップS136)、その後、ステップS137に進む。
ステップS132において、kの値が交点数を超えたと判定された場合には、kを0に、aをa+1に設定し(ステップS138)し、その後、ステップS133に進む。
ステップS133において、aの値がエリア数を超えたと判定された場合には、エリア毎交点座標抽出処理(phase9)を終了して、分割領域内ジグザグ移動予定ルート作成処理(phase10)に移行する。
即ち、エリア毎交点座標抽出処理では、コンピュータが、交点数管理変数レジスタ、エリア番号管理変数レジスタ、交点座標記録ファイル、エリア毎の交点座標記録ファイルのような記憶手段を使用しながら処理を行う。
【0033】
エリア毎交点座標抽出処理(phase9)では、例えばXY座標値の小さい交点から順番に1つずつどのエリアに隣接しているのかを判定していくことにより、エリア毎に交点の番号と交点のXY座標とがエリア毎の交点座標記録ファイルに記録される。つまり、エリア毎に交点座標が抽出されて、エリア毎の交点座標記録ファイルに記録される(
図29(a)参照)。
まず初めに、ステップS131において、交点数管理変数kが0、エリア番号管理変数aが1に設定されるので、エリアa=1、即ち、移動対象領域Aを囲む境界線Cと交わる交点を所定の順番(例えば、XY座標が最小である交点をk=1とし、X座標、Y座標の小さい交点から順番にkの値を+1していく。)で記録していく。そして、各エリア毎に、交点座標抽出処理において交点座標記録ファイルに記録された交点の座標が各エリアに隣接しているか否かを調べていく(ステップS132~S134)ことにより、各エリア毎の交点座標記録ファイルを作成する(ステップS136)。
つまり、エリア毎交点座標抽出処理(phase9)では、各エリアと各交点との対応付け(ステップS136)を行っているものである。
即ち、各エリアを区画する線上と直線Sとの交点座標を、エリア毎の交点座標として抽出して記録している。
以上のように、交点座標抽出処理(phase8)、及び、エリア毎交点座標抽出処理(phase9)を実行する手段は、各エリアを区画する境界線C,M,N,Q,柱Bの境界線(移動対象領域境界線、境界線、障害物領域境界線)と各横直線S,S…との交点を認識する第1の交点認識手段として機能する。即ち、分割領域境界線と横直線との交点を認識する第1の交点認識手段として機能する。
【0034】
分割領域内ジグザグ移動予定ルート作成処理(phase10)では、コンピュータが、分割領域内ジグザグ移動予定ルート作成処理プログラムの手順に従って、
図12に示すように、各分割領域E,E…毎に、X軸に沿って直線S上で隣り合う座標G,G同士を繋げるとともに、Y軸に沿って隣り合う直線S,S間の交点座標G,G同士を繋げることによって、各分割領域E,E…内でのジグザグな分割領域内ジグザグ移動予定ルートHを作成する。
ジグザグな分割領域内ジグザグ移動予定ルートHとは、X軸方向の一方方向に進んだ後X軸方向の一方方向とは反対の他方方向に折り返す経路が繰り返されるルートのことである。尚、等間隔直線経路作成処理において、X軸方向に沿った間隔が等間隔の複数の縦直線が設定される場合には、Y軸方向の一方方向に進んだ後Y軸方向の一方方向とは反対の他方方向に折り返す経路が繰り返される分割領域内ジグザグ移動予定ルートが作成されることになる。
また、エリア毎の交点座標記録ファイルに記録されている交点は、交点の番号が飛び飛びの状態で記録される。例えば、
図12において、XY座標値の小さい交点から順番に交点の番号が付けられて1つずつどのエリアに隣接しているのかを判定していく場合、交点の番号は、
図12の○内の番号のように付与される。例えば、
図12の番号2が付与されたエリア(分割領域)の交点座標記録ファイルには、
図26(a)に示すように、交点の番号が1,2,6,7,11,12,16,17,18の交点が順番に記録される。しかしながら、例えば
図26(a)の記録順に交点を辿った場合、のこぎり状のルートとなってしまう。そこで、分割領域内ジグザグ移動予定ルート作成処理(phase10)では、
図26(b)に示すように、エリア毎のソート後交点座標記録ファイルに、各交点のXY座標がジグザグ経路を形成するルートの始点から終点の位置まで順番に並ぶように、各交点の記録順を並び変えるようにしている。例えば、
図29(b)に示すように、
図12の番号2が付与されたエリア(分割領域)のソート後交点座標記録ファイルには、各交点は、交点の番号16,18,12,11,6,7,2,1の順番で記録される。従って、分割領域においては、エリア(分割領域)毎のソート後交点座標記録ファイルに記録された順番で交点座標を辿る分割領域内ジグザグ移動予定ルートが作成されることになる。
【0035】
コンピュータは、分割領域内ジグザグ移動予定ルート作成処理プログラムの手順に従って、
図21のフローチャートに示すような分割領域内ジグザグ移動予定ルート作成処理(phase10)を行う。
まず、変数初期化を行う。即ち、エリア番号管理変数aを1に、ソート管理変数iを1に、ソート基準変更変数jを1に設定する(ステップS141)。
尚、ソート管理変数iとは、ソートによって順番を入れ換えた数値を配列のどこにいれるかを管理する変数であり、ソート基準変更変数jとは、ルートがのこぎり状ではなくジグザグな矩形波状のルートになるようにするために並べ替えの基準を変更する際の管理変数である。
分割領域内ジグザグ移動予定ルート作成処理では、コンピュータが、エリア番号管理変数レジスタ、ソート管理変数レジスタ、ソート基準変更変数レジスタ、エリア毎の交点座標記録ファイル、エリア毎のソート後交点座標記録ファイルのような記憶手段を使用しながら処理を行う。
次に、aの値がエリア数の上限を超えている否かを判定する(ステップS142)。
ステップS142において、aの値がエリア数の上限を超えていないと判定された場合、a番目のエリアは有効なエリアか、即ち、壁外、あるいは、柱内部ではないか否かを判定する(ステップS143)。
ステップS143において、a番目のエリアが有効なエリアであると判定された場合、このa番目のエリア用の交点座標記録ファイルの中でY座標が最も大きい交点座標を検索する(ステップS144)。
そして、ステップS145において、Y座標が最も大きい交点座標が複数あったか否かを判定する。
ステップS145において、Y座標が最も大きい交点座標が1個だけあったと判定された場合、ステップS144で検索された座標データを、a番目のエリア用のソート後交点座標記録ファイルのi番目に移し変える(ステップS146)。つまり、iが「1」であれば、Y座標が最も大きい交点座標を有した交点の番号とXY座標値とを、a番目のエリア用のソート後交点座標記録ファイルの一番最初の記録領域に記録する。即ち、Y座標が最も大きい交点の記録順を1番目にする。
尚、ステップS146では、a番目のエリア用の交点座標記録ファイルに記録されていたi番目のデータをa番目のエリア用のソート後交点座標記録ファイルのi番目に移し変えるので、このi番目のデータはa番目のエリア用の交点座標記録ファイルから削除される。
従って、次回のステップS144では、i番目のデータが除かれたa番目のエリア用の交点座標記録ファイルのデータの中で、Y座標が最も大きい座標を検索する。
尚、エリア用の交点座標記録ファイルからデータを削除せずに、エリア用の交点座標記録ファイルをコピーした処理用記録ファイルを用いて処理を行い、当該処理用記録ファイルのデータを削除するようにしてもよい。
また、ステップS145において、各分割領域での移動開始位置候補となる交点座標を抽出し、その後のステップにおいて、ソート後交点座標記録ファイルの1番目に記録される交点座標を、各分割領域での移動開始位置となる交点座標に決めて、各分割領域において、移動開始位置となる交点座標から移動終了位置となる交点座標まで直線Sを辿って交点座標位置で進路を変えるジグザグ経路を作成するものである。
ステップS145において、Y座標が最も大きい座標が2個あったと判定された場合、ソート基準変更変数jの値が奇数か否かを判定し(ステップS150)、jの値が奇数であると判定された場合には、Y座標が最も大きくかつX座標が最も小さい座標を検索し(ステップS151)、その後、jをj+1に設定する(ステップS152)。そして、検索された座標データを、a番目のエリア用のソート後交点座標記録ファイルのi番目に移し変える処理(ステップS146)に進む。
また、ステップS150において、jの値が偶数であると判定された場合には、Y座標が最も大きくかつX座標が最も大きい座標を検索し(ステップS153)、その後、jをj+1に設定した(ステップS152)後、ステップS146に進む。
また、ステップS145において、Y座標が最も大きい座標が3個以上あったと判定された場合は、Y座標が最も大きくかつX座標が最も小さい座標と、Y座標が最も大きくかつX座標が最も小さい座標以外の座標(中間の交点座標)を削除する(ステップS154)。その後、ステップS145において、Y座標が最も大きい座標が2個あったと判定された場合と同じ処理が行われて、ステップS146に進む。
ここで、例えば、
図12のエリア2では、最初、ステップS144において、交点の番号16、番号17、番号18のY座標が最も大きい座標として検索され、ステップS145,S154を経て、交点番号17が削除される。そして、j=1なので、ステップS151に進んで、番号16の交点のXY座標が検索される。その後、jがj+1に設定され(ステップS152)、エリア2(分割領域)のソート後交点座標記録ファイルの一番最初の記録領域に、交点の番号16とそのXY座標とが記録される(
図29(b)参照)。その後、ステップS144において、番号11の交点座標と番号12の交点座標とがY座標が最も大きい座標であるとして検索され、ステップS145において、Y座標が最も大きい座標が2個あったと判定された場合、この際には、j=2なので、ステップS153に進んで、Y座標が最も大きくかつX座標が最も大きい座標を有した番号12の交点座標が検索されて、エリア2(分割領域)のソート後交点座標記録ファイルの3番目の記録領域に、交点の番号12と当該交点のXY座標とが記録される(
図29(b)参照)。
即ち、Y座標が最も大きい座標が複数あった場合に、X座標が最も小さい座標を検索するか、X座標が最も大きい座標を検索するかという基準を、jの値に基づいて、切り替えることにより、ルートがのこぎり状ではなくジグザグな矩形波状のルートとなるように工夫している。
ステップS146の後、エリア用のソート後交点座標記録ファイルのi-1番目の座標からi番目の座標を直線で結んだとき、外壁や柱と接触するか否かを判定する(ステップS147)。接触しなければ、iをi+1に更新して(ステップS147E)、a番目のエリア用の交点座標記録ファイルに座標データが残っているか否かを判定する(ステップS148)。
ステップS147において、直線が外壁や柱と接触すると判定された場合、エリア用のソート後交点座標記録ファイルのi番目の座標データをi+1番目に移動させた後、i番目の領域にi+1番目のX座標とi+1番目のY座標を書き込む(ステップS147A)。その後、iをi+2に更新して(ステップS147B)、ステップS148に進む。
即ち、ステップS147A,S147Bでは、
図30(a)に示すように、ルートが外壁や柱と接触する場合、
図30(b)に示すように、ルートが外壁や柱と接触しないように修正している。
次に、ステップS148において、a番目のエリア用の交点座標記録ファイルに座標データが残っていると判定された場合は、ステップS144に戻る。
ステップS148において、a番目のエリア用の交点座標記録ファイルに座標データが残っていないと判定された場合は、ステップS147Cに進んで、a番目のエリア用のソート後交点座標記録ファイルの1番目と2番目のY座標の値が同一か否かを判定する。
ステップS147Cにおいて、1番目と2番目のY座標の値が同一ではないと判定された場合、1番目に記録された座標情報を消去し、i番目の座標情報をi-1番目に移し替える(ステップS147D)。
即ち、
図12に示すように、例えば3番エリアや11番エリアにおいては、ソート後交点座標記録ファイルの1番目のY座標と2番目のY座標の値は同一ではないため、2番目の交点座標位置(交点3s,11s)を始点とし、ソート後交点座標記録ファイルの3番目以降の交点座標の記録順を1つずつ繰り上げていく。
つまり、ステップS147C,S147Dでは、各分割領域での移動開始位置となる交点座標と次の交点座標とを繋ぐルート(経路)がX軸と平行なルートとなるように、各分割領域での移動開始位置となる交点座標を決める処理を行っている。
ステップS147Cにおいて、1番目と2番目のY座標の値が同一であると判定された場合、ステップS149に進んで、aをa+1に、iを1に、jを1に設定し、S142に戻る。即ち、現在処理中のエリアaのソート処理を終了し、次のエリアのソート処理に移行する。
ステップS143において、a番目のエリアが有効なエリアではないと判定された場合、ステップS149に進んで、aをa+1に、iを1に、jを1に設定し、ステップS142に戻る。即ち、次のエリアのソート処理に移行する。
ステップS142において、aの値がエリア数の上限を超えていると判定された場合には、分割領域内ジグザグ移動予定ルート作成処理(phase10)を終了し、移動コスト計算処理(phase11)に移行する。
即ち、a番目のエリア用のソート後交点座標記録ファイルに記録された交点座標を記録順に辿るルートが分割領域内ジグザグ移動予定ルートとして作成されることになる(
図26(b)、
図12のエリア2において点線で示した分割領域内ジグザグ移動予定ルートH参照)。
つまり、分割領域内ジグザグ移動予定ルート作成処理(phase10)においては、例えば
図12に示すように、エリア2内における移動開始予定地点(座標)2sと移動終了予定地点(座標)2eとを繋ぐジグザグな分割領域内ジグザグ移動予定ルートHが作成される。また、各エリア(2~19までの柱領域7,10,12,16,18を除いたエリア)の移動開始予定地点(座標)Ns及び移動終了予定地点(座標)Ne(Nは2~19までの7,10,12,16,18を除いた整数)が決まり、これら移動開始予定地点(座標)Nsと移動終了予定地点(座標)Neとを繋ぐジグザグな分割領域内ジグザグ移動予定ルート(分割領域毎の第1のルート)Hが作成される。
以上のように、分割領域内ジグザグ移動予定ルート作成処理(phase10)を実行する手段は、各分割領域境界線上の交点を横直線で繋いで形成されたY軸に沿って進む分割領域毎のジグザグな第1のルートを作成する第1のルート作成手段として機能する。
【0036】
移動コスト計算処理(phase11)では、コンピュータが、移動コスト計算処理プログラムの手順に従って、phase10で作成された各分割領域内ジグザグ移動予定ルート(各第1のルート)H,H…の移動コストを計算する。つまり、各分割領域内ジグザグ移動予定ルートH,H…毎に、直進距離の合計、旋回角度の合計、旋回回数を考慮して移動コストを計算する。
【0037】
コンピュータは、移動コスト計算処理プログラムの手順に従って、
図22のフローチャートに示すような、移動コスト計算処理(phase11)を行う。
まず、エリア(分割領域)番号、及び、総コスト配列ファイルの初期化を行う。即ち、エリア番号管理変数aを1に設定するとともに、エリア毎の総コスト配列ファイルの総コスト配列CtHorizontal[amax]を[0,0,0,・・・・]に設定する(ステップS201)。また、ソート後交点座標管理変数iを1に設定する(ステップS202)。
移動コスト計算処理では、コンピュータが、エリア番号管理変数レジスタ、エリア毎のソート後交点座標記録ファイル、エリア毎の総コスト配列ファイルのような記憶手段を使用しながら処理を行う。
尚、総コスト配列ファイルとは、各エリアの走行ルートのコストを記憶しておくファイルのことであり、総コスト配列CtHorizontalとは、エリア毎の第1のルートの総コスト(移動効率評価値)のことである。また、ソート後交点座標管理変数とは、エリアの走行ルートの何番目の曲がり角(交点)かを管理する変数である。
次に、a番目のエリア用のソート後交点座標記録ファイルのi番目の座標からi+1番目の座標間の距離Lを計算する(ステップS203)。
そして、距離Lと直進移動コスト変換定数Ksを積算して直線移動時のコストCsを計算し(ステップS204)、直線移動時のコストCsを総コスト配列CtHorizontal[a]に足し加えた(ステップS205)後、iをi+1に設定し(ステップS206)、a番目のエリア用のソート後交点座標記録ファイルにi番目の座標データがあるか否かを判定する(ステップS207)
ステップS207でYesの場合、総コスト配列CtHorizontal[a]に停止に要するコストCstop(定数)を加える(ステップS208)。つまり、旋回行動に移るには一旦停止する必要がある。停止は、旋回の角度によらず一定であると考えられる。よって、ここで定数コストを加える。具体的な値は移動体1の停止性能(加速性能)に依存する。
次に、a番目のエリア用のソート後座標記録領域のi-1番目の座標からi番目の座標を向くベクトルとi番目の座標からi+1番目の座標を向くベクトルとの成す角θを計算する(ステップS209)。
そして、θと旋回移動コスト変換定数Kcを積算して直線移動時のコストCcを計算して(ステップS210)、直線移動時のコストCcを総コスト配列CtHorizontal[a]に足し加え(ステップS211)、その後、ステップS203に戻る。
ステップS207でNoの場合、aをa+1に設定し(ステップS212)、その後、
aの値がエリア数の上限amaxを超えたか否かを判定する(ステップS213)。
ステップS213でNoの場合、ステップS202に戻り、ステップS213でYesの場合、移動コスト計算処理(phase11)を終了して、別ルート作成処理(phase12~phase16)に移行する。
尚、直進移動コスト変換定数Ks、旋回移動コスト変換定数Kcは、XY座標情報で得られる長さ、角度の単位を無次元量化するための定数である。
また、移動体1の左右のタイヤ間の距離や、かけられる遠心力の上限等により、移動体1の個体差によっても、直進性能、旋回性能が違ってくる。
従って、XY座標情報で得られる単位の違い、移動体1の個体差(性能の違い)等に応じて、直進移動コスト変換定数Ks、旋回移動コスト変換定数Kcを設定することになる。
【0038】
コンピュータは、別ルート作成処理プログラムの手順に従って、
図23のフローチャートに示すような、別ルート作成処理(phase12~phase16)を行う。
最初に、等間隔直線経路作成処理(phase7)の処理で定義されるX軸と平行な直線S,S…をX軸に垂直なもの、即ち、Y軸と平行な直線に置き換えて実行して、これをphase12とする(ステップS230)。
即ち、phase12は、縦直線作成手段によって、移動対象領域をX軸に沿って等間隔に区切るY軸と平行な複数の縦直線を作成する処理である。
次に、交点座標抽出処理(phase8)の処理で、直線の移動方向をX軸に垂直にしたうえで実行して、これをphase13とする(ステップS240)とする。
さらに、エリア毎交点座標抽出処理(phase9)をそのまま実行して、これをphase14とする(ステップS250)とする。
即ち、phase13,14は、第2の交点認識手段によって、分割領域境界線と縦直線との交点を認識する処理である。
次に、分割領域内ジグザグ移動予定ルート作成処理(phase10)の処理で条件分岐の処理部分のX軸座標をY軸座標に、Y軸座標をX軸座標に置き換えて実行する。このとき、phase10の場合とは別の記録ファイルに結果を保存する。以上をphase15とする(ステップS260)。
即ち、phase15は、第2のルート作成手段によって、各分割領域境界線上の交点を縦直線で繋いで形成されたX軸に沿って進む分割領域毎のジグザグな第2のルートを作成する処理である。
最後に、移動コスト計算処理(phase11)での総コスト配列CtHorizontalを総コスト配列CtVerticalに置き換えて処理を実行する。このとき、phase11の場合とは別の記録ファイルに結果を保存する。以上をphase16とする(ステップS270)。
即ち、phase16は、第2の移動効率算出手段によって、分割領域毎の第2のルートに沿って移動する場合の移動効率を算出する処理である。
そして、ルート選択処理(phase17)に移行する。
【0039】
ルート選択処理(phase17)では、コンピュータが、ルート選択処理プログラムの手順に従って、同じ分割領域内を第1のルートに沿って移動する場合の移動効率と第2のルートに沿って移動する場合の移動効率とを比較して、第1のルート及び第2のルートのうち移動効率の良いルートを当該分割領域内での移動予定ルートとして選択する。
【0040】
コンピュータは、ルート選択処理プログラムの手順に従って、
図24のフローチャートに示すような、ルート選択処理(phase17)を行う。
まず、変数初期化を行う。即ち、エリア番号管理変数aを1に設定する(ステップS281)。
ルート選択処理では、コンピュータが、エリア番号管理変数レジスタ、エリア毎の第1のルートの総コストCtHorizontal[a]を記録するファイル、エリア毎の第2のルートの総コストCtVertical[a]を記録するファイルのような記憶手段を使用しながら処理を行う。
次に、エリアaにおける、水平方向移動時(第1のルート選択時)の総コストCtHorizontal[a]と垂直方向移動時(第2のルート選択時)の総コストCtVertical[a]とを比較する(ステップS282)。
ステップS282において、総コストCtHorizontal[a]の方がコストが低いと判定された場合は、エリア番号aではphase10で作成したエリア用ソート後交点座標記録ファイルをアクティブにする(ステップS283)。つまり、当該エリア(分割領域)aにおいては、第1のルートを当該エリア(分割領域)内aでの移動予定ルートとして選択する。
ステップS282において、総コストCtVertical[a]の方がコストが低い、又は、総コストCtVertical[a]のコストと総コストCtHorizontal[a]のコストとが同値と判定された場合は、エリア番号aではphase15で作成したエリア用ソート後交点座標記録ファイルをアクティブにする(ステップS286)。つまり、当該エリア(分割領域)aにおいては、第2のルートを当該エリア(分割領域)内aでの移動予定ルートとして選択する。
ステップS283の後、又は、ステップS286の後、aをa+1に設定し(ステップS284)、aの値がエリア数の上限amaxを超えたか否かを判定する(ステップS284)。
ステップS284でNoであれば、ステップS282に戻り、ステップS284でYesであれば、ルート選択処理を終了して、分割領域間移動予定ルート作成処理(phase18)に移行する。
【0041】
分割領域間移動予定ルート作成処理(phase18)では、コンピュータが、分割領域内ジグザグ移動予定ルート作成処理プログラムの手順に従って、
図12に示すように、n番目の分割領域Eからn+1番目の分割領域Eへの移動予定ルートである分割領域間移動予定ルートを生成する。まず、分割領域間直線移動予定ルート作成処理により、前の分割領域(エリア)の移動終了予定地点(座標)2eと後の分割領域(エリア)の移動開始予定地点(座標)2sとを一直線で結ぶ分割領域間直線移動予定ルートIを作成する。
つまり、n番目の分割領域毎のソート後交点座標記録ファイルの最後に記録された交点の座標位置とn+1番目の分割領域毎のソート後交点座標記録ファイルの最初に記録された交点の座標位置とを一直線で結ぶ分割領域間直線移動予定ルートIを作成する。
ただし、移動終了予定地点(座標)2eと移動開始予定地点(座標)2sとを一直線で結んだ場合に、柱Bと接触(衝突)してしまう場合には、任意の経路探索アルゴリズムを応用した分割領域間迂回移動予定ルート作成処理によって、迂回経路を生成する。
【0042】
コンピュータは、分割領域間移動予定ルート作成処理プログラムの手順に従って、
図25のフローチャートに示すような分割領域間移動予定ルート作成処理(phase18)を行う。
まず、変数初期化を行う。即ち、エリア番号管理変数aを1に、移動先エリア管理変数iを1に設定する(ステップS161)。
分割領域間移動予定ルート作成処理では、コンピュータが、エリア番号管理変数レジスタ、移動先エリア管理変数レジスタ、エリア毎のソート後交点座標記録ファイル、経路探索コスト計算配列ファイル、エリア毎の経路記録ファイルのような記憶手段を使用しながら処理を行う。
次に、aの値がエリア数の上限を超えているか否かを判定し(ステップS162)、上限を超えていなければ、a番目のエリアは有効なエリアか否かを判定し(ステップS163)、a番目のエリアが有効なエリアであれば、a+i番目のエリアは有効なエリアか否かを判定する(ステップS164)。
ステップS164において、a+i番目のエリアが有効なエリアであると判定された場合、a番目のエリア用のソート後交点座標記録ファイルの最後の座標とa+i番目のエリア用のソート後交点座標記録ファイルの最初の座標を直線で結んだとき、外壁や柱と接触するか否かを判定する(ステップS165)。即ち、番号の小さいエリアの移動終了予定地点eと番号の大きいエリアの移動開始予定地点sとを直線で結んだとき、外壁や柱と接触するか否かを判定する。
ステップS165において、Yesの場合(直線が外壁や柱と接触すると判定された場合)、経路探索アルゴリズム処理に移行する。
経路探索アルゴリズム処理では、まず、a番目のエリア用のソート後交点座標記録ファイルの最後の座標、即ち、a番目の分割領域の移動終了予定地点eとなる交点座標の位置(経路探索アルゴリズムにおけるスタート地点)を現在位置とする(ステップS166)。
次に、経路探索アルゴリズムのコスト計算配列初期化を行う。つまり、コストC1[Xmax][Ymax]←[0,0,0,・・・・]、コストC2[Xmax][Ymax]←[0,0,0,・・・・]を行う(ステップS167)。
まず、現在位置から見て上下左右周囲8方向とスタート地点間の距離を計算する。例えば、コストを求めたい位置の周辺のC1を調べ、最も小さいC1に+1する(ただし、初期化時から変化してないC1は無視する)。計算されたコストはその位置に相当する配列番号のC1に代入する(ステップS168A)。
次に、現在位置から見て上下左右周囲8方向からa+i番目のエリア用のソート後交点座標記録ファイルの最初の交点座標(経路探索アルゴリズムにおけるゴール地点)までの推定距離を計算する。例えば、コストを求めたい位置とゴールとの直線距離を計算し、その計算されたコストはその位置に相当する配列番号のC2に代入する(ステップS168B)。
現在位置から見て上下左右周囲8方向それぞれについて、計算済みフラグを立てる(ステップS169)。
コスト計算済みフラグが立っている座標のうち、外壁や柱がなく、かつ最も総コスト(C1[*][**]+C2[*][**])が低い場所(座標)があるか否かを判定する(ステップS170)。
ステップS170において、該当する座標を発見できなかった場合は、エラーと判定して終了する。
ステップS170において、該当する座標が1箇所だけあった場合、当該座標位置へ移動し、その座標に到達済みフラグを立てる(ステップS171)。
また、ステップS170において、該当する座標が複数あった場合、同値の座標のうち、所定の優先順位で一か所を決めた後、ステップに進む。所定の優先順位は、ゴールまでの推定距離が小さい方>スタートからの距離が大きい方>最も原点座標に近い方とする(ステップS174)。その後、ステップS171に進む。
そして、a+i番目のエリア用のソート後交点座標記録ファイルの最初の座標に到達したか否かを判定する(ステップS172)。
a+i番目のエリア用のソート後交点座標記録ファイルの最初の座標に到達したと判定された場合(ステップS172でYES)、現在位置から見て上下左右周囲8方向のうち、到達済みフラグが立っており、かつ最も高いコストの場所があるか否かを判定する(ステップS173)。即ち、ステップS173においては、スタート地点に戻るような処理を行って、移動軌跡の履歴を探索するものである。
ステップS173において、該当する座標を発見できなかった場合は、エラーと判定して終了する。
ステップS173において、該当する座標が1箇所だけあった場合、最もコストが高い方へ移動する。このとき移動先の座標に経路確定フラグを立てる(ステップS173A)。
そして、a番目のソート後交点座標記録ファイルの最後の座標に到達したか否かを判定する(ステップS174)。
また、ステップS173において、該当する座標が複数あった場合、同値の座標のうち、スタートまでの物理的距離(ユークリッド距離)が最も近い方へ移動し、このとき移動先の座標に経路確定フラグを立てる(ステップS173B)。その後、ステップS174に進む。
ステップS174において、a番目のエリア用のソート後交点座標記録ファイルの最後の座標に到達したと判定された場合(ステップS174でYES)、記録された移動右軌跡を逆転させて、これをa番目のエリア探索後の移動の経路(分割領域間移動予定ルートI)として経路記録ファイルに登録する(ステップS175)。その後、ステップS176に進む。
ステップS165において、Noの場合(直線が外壁や柱と接触しないと判定された場合)は、a番目のエリア用のソート後交点座標記録ファイルの最後の座標からa+i番目のエリア用のソート後交点座標記録ファイルの最初の座標を結ぶ直線をa番目のエリア探索後の移動の経路として経路記録ファイルに登録し(ステップS178)、その後、ステップS176に進んで、aをa+iに、iを1に更新した後、ステップS162に戻る。
ステップS163において、a番目のエリアは有効なエリアではないと判定された場合には、ステップS176に進んで、aをa+iに、iを1に更新し、ステップS162に戻る。
ステップS164において、a+i番目のエリアは有効なエリアではないと判定された場合、iをi+1に設定した(ステップS179)後、a+iの値がエリア数の上限を超えているか否かを判定する(ステップS180)。ステップS180において、a+iの値がエリア数の上限を超えていないと判定された場合は、ステップS164に戻り、ステップS180において、a+iの値がエリア数の上限を超えていると判定された場合は、分割領域間移動予定ルート作成処理(phase11)を終了する。
ステップS162において、aの値がエリア数の上限を超えていると判定された場合には、分割領域間移動予定ルート作成処理(phase11)を終了する。
【0043】
分割領域間移動予定ルート作成処理(phase18)によれば、例えば
図12に示すような分割領域間移動予定ルートが作成される。
即ち、例えばa番目の分割領域の終点交点座標とa+i番目の分割領域の開始交点座標とを結び、分割領域aと分割領域a+i間の移動予定ルートIを生成する
図12において、矢印直線23(I)は分割領域2の移動終了予定地点(交点座標)2eと分割領域3の移動開始予定地点(交点座標)3sとを繋ぐ分割領域間移動予定ルート、矢印直線34(I)は分割領域3の移動終了予定地点3eと分割領域4の移動開始予定地点4sとを繋ぐ分割領域間移動予定ルート、矢印直線45(I)は分割領域4の移動終了予定地点4eと分割領域5の移動開始予定地点5sとを繋ぐ分割領域間移動予定ルート、矢印直線56(I)は分割領域5の移動終了予定地点5eと分割領域6の移動開始予定地点6sとを繋ぐ分割領域間移動予定ルートである。
また、矢印直線68(I)は分割領域6の移動終了予定地点6eと分割領域8の移動開始予定地点8sとを繋ぐ分割領域間移動予定ルートであり、矢印直線89(I)は分割領域8の移動終了予定地点8eと分割領域9の移動開始予定地点9sとを繋ぐ分割領域間移動予定ルート、矢印直線911(I)は分割領域9の移動終了予定地点9eと領域11の移動開始予定地点11sとを繋ぐ分割領域間移動予定ルート、柱12を迂回する直線1113(I)は分割領域11の移動終了予定地点11eと分割領域13の移動開始予定地点12sとを繋ぐ分割領域間移動予定ルートであり、経路探索アルゴリズム処理により探索された分割領域間移動予定ルートである。
また、矢印直線1314(I)は分割領域13の移動終了予定地点13eと分割領域14の移動開始予定地点14sとを繋ぐ分割領域間移動予定ルート、矢印直線1415(I)は分割領域14の移動終了予定地点14eと分割領域15の移動開始予定地点15sとを繋ぐ分割領域間移動予定ルート、矢印直線1517(I)は分割領域15の移動終了予定地点15eと分割領域17の移動開始予定地点17sとを繋ぐ分割領域間移動予定ルート、矢印直線1719(I)は分割領域17の移動終了予定地点17eと分割領域19の移動開始予定地点19sとを繋ぐ分割領域間移動予定ルートである。
尚、
図12の例では、すべての分割領域間移動予定ルートが、ステップS178により決められた分割領域間直線移動予定ルートIとなり、分割領域間迂回移動予定ルート作成処理により決められた分割領域間迂回移動予定ルートは無いが、ステップS178により決められた分割領域間直線移動予定ルートIが外壁や柱と接触すると判定される例においては、分割領域間直線移動予定ルートIの代わりに、分割領域間迂回移動予定ルート作成処理に基づいて分割領域間迂回移動予定ルートが作成されることになる。例えば、仮に、
図12において、柱16がもっと大きな柱である場合には、矢印直線1415(I)が柱16と接触する可能性があり、この場合は、経路探索アルゴリズム処理に基づいて、柱16を迂回する分割領域間迂回移動予定ルートが作成されることになる。
【0044】
従って、移動体1は、予め作成された最適な分割領域間移動予定ルートを辿って分割領域間を移動できるようになり、移動体に、分割領域間の移動を効率的に行わせることができるようになる。
【0045】
上述した移動予定ルート作成装置、及び、移動予定ルート作成処理プログラムによれば、第1のルート及び第2のルートのうち移動効率の良いルートを選択するようにしたので、各分割領域の形状に応じて、移動対象領域内の障害物を避けて移動体を移動させるための効率的な移動予定ルートを的確に作成できるようになる。
【0046】
そして、上述した移動体の移動予定ルート作成装置により作成された移動予定ルート(移動予定情報)に基づいて移動体1が移動対象領域A内の柱(障害物)Bを避けて移動対象領域A内を効率的に自走できるようになる。
【0047】
即ち、
図31に示すように、移動体1の制御手段50が、移動予定ルート(移動予定情報)に基づいて移動体1の移動を制御するとともに、移動情報取得手段としての例えば自動追尾型のトータルステーション(以下、TSと言う)等により取得される移動体1の実際の移動情報(移動体の逐次位置情報)と移動予定ルート(移動予定情報)とを用いて移動体1の移動を制御する移動体1の移動制御システムを構築できるようになる。
尚、当該移動体1の移動制御方法としては、例えば、本出願人による発明である特許文献1(特開2020-154400号公報)に開示された移動制御方法を採用すればよい。
【0048】
移動体1の一例について説明する。尚、以下の説明においては、前、後、上、下、左、右は、
図31に示した方向と定義して説明する。
図31に示すように、移動体1は、基体10と、基体10の下側に設けられた移動手段20と、基体10の表面側に設けられたTSの視準となるプリズム等のターゲットT2と、基体10に設けられて移動体1の前側を昇降させる昇降装置40と、制御手段50と、床面を撮影するための図外の撮像手段(カメラ)とを備えている。
尚、撮像手段は、例えば、基体10の下面(床面と対向する下面)側において、移動体1の左右幅間に亘って延長するように設けられており、移動体1が床面上を移動した場合に、移動体1の下面の左右幅間に対向する床面を撮影できるように構成されている。
【0049】
移動手段20は、例えば、基体10の前側下部に設けられた左右の前側車輪21L,21Rと、基体10の後側下部に設けられた左右の後側車輪22L,22Rと、後側車輪22L,22Rの駆動源としてのモータ23L,23Rと、図外の駆動制御回路とを備える。
尚、モータ23L,23Rの各モータ軸には、それぞれ、後側車輪22L,22Rの回転量に基づいて移動体1の移動距離(移動量)を検出するための移動量検出手段としてのエンコーダ25L,25Rが取付けられている。
【0050】
ターゲットT2は、TSから発射される光を反射させる反射プリズム等で構成される。当該ターゲットT2は、例えば、基体10の上面の前側における左右間の中央位置に設置される。
【0051】
制御手段50は、移動体1の移動方向(進行方向)を変更する際、昇降装置40の図外のリニアアクチュエータのロッドを縮退状態から伸長させて図外の転動体を床面に押し付けることにより基体10の前側を上方に移動させて移動体1の前側車輪21L,21Rを床面から浮かせた状態で、左右の後側車輪22L,22Rのモータ23L,23Rを制御して床面に接触している左右の後側車輪22L,22Rを互いに反対方向に回転させる。
この場合、移動体1を前進させる回転方向に一方の後側車輪を回転させるとともに、移動体1を後進させる回転方向に他方の後側車輪を回転させることによって、移動体1の回転中心線を回転中心として、左右の後側車輪22L,22Rと転動体とが床面上を転動するので、床面上において、移動体1が回転中心線を回転中心として左方向又は右方向にスムーズに回転する。よって、移動体1の水平方向の向きがスムーズに変更されるようになる。
【0052】
尚、移動体1として、撮像手段(カメラ)を搭載して床面を撮影する撮像手段搭載移動体を例示したが、移動体は、例えば掃除機を搭載して床面を掃除する掃除機搭載移動体等の特定処理機能搭載移動体、又は、特定処理機能を搭載しない移動体であってもよい。
【0053】
また、上述した前提装置では、移動対象領域Aの外側のエリア、即ち、壁外領域をエリア1に設定したために、
図20のエリア毎交点座標抽出処理(phase9)のステップS131の変数初期化、
図21の分割領域内ジグザグ移動予定ルート作成処理(phase10)のステップS141の変数初期化、
図22の移動コスト処理(phase11)のステップS201の変数初期化、
図24のルート選択処理(phase17)のステップS281の変数初期化、
図25の分割領域間移動予定ルート作成処理(phase18)のステップS161の変数初期化において、エリア番号管理変数aを1に設定して処理を開始する例を示したが、エリア1は分割された領域ではないので、これら各処理の変数初期化において、エリア番号管理変数aを2に設定して、エリア2から処理を開始するようにしてもよい。
【0054】
本発明に係る巡回ルート作成装置の前提装置となる上述した移動予定ルート作成装置では、各分割領域(各移動対象領域)に所定の規則でエリア番号を付けて、一番小さい番号の分割領域(移動対象領域)から昇順に分割領域間を分割領域間移動予定ルートで繋げて作成された移動予定ルートを作成するようにしている。つまり、各分割領域を巡回する巡回ルートを作成するようにしている。
しかしながら、当該移動予定ルート作成装置では、一番小さい番号の分割領域から順番に、一番近い番号が付与された2つの分割領域同士を分割領域間移動予定ルートで繋げるようにしているだけであり、各分割領域を巡回する巡回ルートが、効率的な巡回ルートであるかどうかについての評価を行っていない。
そこで、本発明では、以下に示すように、複数の移動対象領域を移動体に巡回させるための効率的な巡回ルートを作成可能な巡回ルート作成装置を実現した。
【0055】
実施形態
本発明の実施形態に係る巡回ルート作成装置は、複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを作成する巡回ルート作成装置であり、当該巡回ルート作成装置は、複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを、遺伝的アルゴリズム(GA(genetic algorithm))を利用して作成する巡回ルート作成装置とした。
【0056】
尚、本発明において、複数の移動対象領域は、各自独立した複数の移動対象領域、あるいは、上述したような複数の分割領域等であり、以下、「移動対象領域」を「エリア」と呼称して説明する。
【0057】
実施形態に係る巡回ルート作成装置は、各エリアを一巡する巡回ループを作成する巡回ループ作成手段と、作成された巡回ループの経路を移動体で移動させる場合の移動コストを算出する移動コスト算出手段と、作成された巡回ループを形成するエリア間ルートのうち最も移動コストの大きいエリア間ルートを削除して、削除したエリア間ルートのルート終端が繋がれていたエリアを巡回ルートのスタート領域とし、かつ、削除したエリア間ルートのルート始端が繋がれていたエリアを巡回ルートのゴール領域とした各エリアを一巡する巡回ルートを作成する巡回ルート作成手段とを備える。
移動コスト算出手段は、巡回ループ作成手段により作成された巡回ループを移動体で移動させる場合の移動コストや、巡回ループ作成手段により作成された巡回ループにおいて前後のエリア間を繋ぐエリア間ルートを移動体で移動させる場合の移動コストや、巡回ルート作成手段により作成された巡回ルートを移動体で移動させる場合の移動コストを算出する。即ち、移動コスト算出手段は、巡回ループ、巡回ループの前後のエリア間を繋ぐエリア間ルート、移動コストが最も大きいエリア間ルートの移動コストを巡回ループの移動コストから除いた巡回ループ等の、巡回ループの経路の移動コストを算出する手段である。尚、移動コストは、上述した前提装置で説明した、直進距離の合計、旋回角度の合計、旋回回数を考慮した移動コストである。
巡回ループ作成手段は、エリア毎に巡回情報を設定することにより巡回ループを作成する初期世代巡回ループ作成手段と、後世代巡回ループ作成手段とを備える。
巡回ルート作成手段は、初期世代巡回ルート作成手段と、後世代巡回ルート作成手段とを備える。
初期世代巡回ループ作成手段は、複数の巡回ループを作成する。
初期世代巡回ルート作成手段は、初期世代巡回ループ作成手段により作成された複数の初期世代巡回ループ毎に、各エリア毎の巡回情報を変更して、複数の初期世代巡回ルートを作成する。
また、後世代巡回ループ作成手段は、複数の初期世代巡回ルートのうち、移動コストの小さい初期世代巡回ルートをいくつか抽出し、この抽出された初期世代巡回ルートの巡回情報を使用して後世代巡回ループを作成する。
そして、後世代巡回ルート作成手段は、後世代巡回ループ作成手段により作成された後世代巡回ループ毎に、各エリア毎の巡回情報を変更して、後世代巡回ルートを作成する。
尚、後世代の世代数は複数とし、今回の後世代巡回ルート作成手段は、前回の後世代巡回ループ作成手段により作成された前回の後世代巡回ループ毎に、各エリア毎の巡回情報を変更して、今回の後世代巡回ルートを作成する。
また、最終世代の後世代巡回ルート作成手段は、最終世代として作成した複数の巡回ルートのうち、移動コストが最小である巡回ルートを巡回ルートとして決定するようにしている。そして、当該最終の巡回ルートが、GA処理により求められた巡回ルートとなる。
【0058】
上述した各手段は、各手段が実行する処理の手順を示す処理プログラムと、当該処理プログラムによる情報処理を実現するコンピュータ等のハードウエア資源とにより構成される。
換言すれば、巡回ルート作成装置の処理を実現する巡回ルート作成処理プログラムは、コンピュータを、上述した各手段として機能させるプログラムである。
巡回ルート作成装置は、例えば表示画面及び表示制御手段を備えたパーソナルコンピュータ等のコンピュータに、上述した巡回ルート作成処理プログラムがインストールされて構成されている。
【0059】
エリアは、上述したように、XY座標情報に基づいて区画された領域である。
また、エリア内の予め決められた巡回パターンは、例えばX軸に沿ってジグザグに進むX方向巡回パターン、又は、Y軸に沿って進むジグザグなY方向巡回パターンである。
エリア内の予め決められた所定の複数の巡回パターンは、例えば
図32に示すように、X方向巡回パターンにおいては、移動開始位置(始端(入口))をX座標最小値Y座標最大値の位置とするZパターン(第1パターン)、移動開始位置をX座標最小値Y座標最小値の位置とするZ’パターン(第2パターン)、移動開始位置をX座標最大値Y座標最大値の位置とするSパターン(第3パターン)、移動開始位置をX座標最大値Y座標最小値の位置とするS’パターン(第4パターン)である。
また、Y方向巡回パターンにおいては、移動開始位置をX座標最小値Y座標最大値の位置とするWパターン(第5パターン)、移動開始位置をX座標最大値Y座標最大値の位置とするW’パターン(第6パターン)、移動開始位置をX座標最小値Y座標最小値の位置とするMパターン(第7パターン))、移動開始位置をX座標最大値Y座標最小値の位置とするM’パターン(第8パターン)である。
尚、各エリアにおいて、当該複数の巡回パターンの各パターンを設定した場合において、当該各パターン上を移動体で移動させる場合の移動コストは、例えば、予め移動コスト算出手段により算出されてデータベースに記録されている。
【0060】
巡回情報は、例えば
図39に示すような、各エリア毎に設定される自己のエリア内の巡回パターンの情報と次に進むエリアの情報とで構成された組み合わせ情報である。
図39に示した例では、エリア1の巡回情報は、「2-M」であり、この「M」がエリア1(自己)のエリア内の巡回パターンの情報であり、「2」が次に進むエリアの情報である。つまり、当該エリア1の巡回情報によって、エリア1内の巡回パターンは、Mパターン(第7パターン)が設定され、エリア1の次に進むエリアが2であるので、エリア1の巡回パターンであるMパターンの終点(出口)とエリア2の巡回パターンであるZパターンの始点(入口)とを結ぶルートがエリア間ルートとして設定されることになる。
つまり、巡回ループは、巡回情報に基づいて作成され、巡回ループのエリア間ルートのうち最も移動コストの大きいエリア間ルートが削除されて巡回ルートが作成される。
【0061】
実施形態に係る巡回ルート作成装置による巡回ルート作成処理、即ち、遺伝的アルゴリズム(GA)を利用した巡回ルート作成処理(以下、GA処理という)の流れの概略を
図33に示す。
尚、GA処理では、上述した巡回情報を遺伝情報と適宜読み替えて説明する。
また、実施形態においては、後世代の世代数は、例えば100以上としている。
即ち、GA処理では、
図33に示すように、初期世代の複数の個体を作成する初期世代個体作成処理(ステップS401)、個体評価処理(ステップS402)、世代確認処理(ステップS403)、優秀な遺伝情報を持つ個体を複数体だけ親として選出する親選出処理(ステップS404)、親の遺伝情報を用いた後世代個体を作成する後世代個体作成処理(ステップS404)を実行する。
また、GA処理の流れを
図33に基づいて簡単に説明すると、以下のようになる。
まず、初期世代個体作成処理(ステップS401)により、複数の個体、即ち、複数の巡回ループを作成する。この場合、各エリア毎に、
図38(a)に示すような、各エリア毎に設定される自己のエリア内の巡回パターンの情報と次に進むエリアの情報とで構成された組み合わせ情報、即ち、遺伝情報(巡回情報)をランダムに設定することにより、巡回ループとなる個体(初期巡回情報配列)を作成する。
個体評価処理(ステップS402)においては、各個体である各巡回ルートを評価する。即ち、巡回ループにおいて移動コストが一番大きい最大エリア間ルートを削除した巡回ルートを作成し、当該巡回ルートの移動コストを計算する。
世代確認処理(ステップS403)では、今回の世代が事前に決めた世代数に到達したか否かを確認する。
今回の世代が事前に決めた世代数(例えば100以上)に到達していなければ(ステップS403でNoの場合)、今回の世代(初期世代、又は、後世代)の個体の中から移動コストの優秀な個体を複数体(例えば4体)だけ親として選出する(ステップS404)。
今回の世代の個体の中から選出された優秀な個体を親として、当該親の遺伝情報を用いた後世代の個体を作成する(ステップS405)。
その後、ステップ402~ステップ405を繰り返して、ステップS403での判断がYesとなった場合には、GA処理を終了する。
【0062】
即ち、GA処理では、初期世代個体作成処理、個体評価処理、世代確認処理、親選出処理、後世代個体作成処理を行う。つまり、これら各処理の手順を示す処理プログラムと、当該処理プログラムによる情報処理を実現するコンピュータとにより、これら各処理が実行される。
以下、初期世代個体作成処理、個体評価処理、世代確認処理、親選出処理、後世代個体作成処理の内容を詳細に説明する。
つまり、GA処理では、上述した巡回パターン設定手段及び巡回順設定手段が、初期世代個体作成処理、世代確認処理、後世代個体作成処理、個体評価処理、優秀個体抽出処理を行う。つまり、これら各処理(初期世代個体作成処理、世代確認処理、後世代個体作成処理、個体評価処理、優秀個体抽出処理)の手順を示す処理プログラムと、当該処理プログラムによる情報処理を実現するコンピュータとにより、これら各処理が実行される。
【0063】
まず、コンピュータが、初期世代個体作成処理プログラムの手順に従って、
図34のフローチャートに示すような、初期世代個体作成処理(phase1)を行う。
尚、GA処理において、「個体」とは、巡回ループ、又は、巡回ルートのことである。
まず、個体識別変数pの初期化処理とエリア個数情報amaxの取得処理を行う(ステップS411)。つまり、エリア番号管理変数aを1に設定するとともに、エリア個数情報amaxをエリアの個数に設定する(例えば、上述した前提技術の場合(
図12の複数の分割領域の場合)、個数情報amaxは「16」に設定され、
図38(a)の場合、個数情報amaxは「6」に設定される)。
そして、遺伝情報配列G[1~20][1~amax][1~2]を初期化して、空にする(ステップS412)。
次に、初期世代個体の作成ループに入る(ステップS413)。例えば、初期世代個体を20個作成する。つまり、p<=20(即ち、p≦20)である。
まず、エリア番号管理変数aの初期化処理、即ち、エリア番号管理変数aを1に設定する(ステップS414)。
そして、遺伝情報配列G[p][a][1]に、エリア2~amaxの間でかつ遺伝情報配列G[p][1~amax][1]に未だに含まれていない値をランダムに代入する(ステップS415)とともに、遺伝情報配列G[p][a][2]に、巡回パターンを表す数値をランダムに代入する(ステップS416)。
その後、aをG[p][a][1]に設定する(ステップS417)。
そして、遺伝情報配列G[p][1~amax][1]の中に空の要素が2個以上残っているか否かを判定する(ステップS418)。つまり、1つの個体を構成する遺伝情報配列中の遺伝情報(巡回情報)の中で次に進むエリアの情報が設定されていない領域が2つ以上残っていれば(ステップS418でYes)、ステップS415~ステップS417を繰り返して、1つの個体を構成する遺伝情報配列中の遺伝情報の中で次に進むエリアの情報が設定されていないエリアが1つであれば(ステップS418でNo)、そのエリアの遺伝情報配列G[p][a][1]を1に設定する(ステップS419)とともに、そのエリアの遺伝情報配列G[p][a][2]に、巡回パターンを表す数値をランダムに代入する(ステップS420)。つまり、そのエリアの最後に進むエリアのエリア番号を1に設定するとともに、そのエリアの巡回パターンをランダムに設定する。
そして、pをp+1に設定する(ステップS421)。
つまり、ステップS413~ステップS421を複数回数繰り返すことにより、初期世代の個体を複数個(例えば20個)作成する。
即ち、
図34に示した「初期世代個体作成ループ」の処理を行う。
【0064】
遺伝情報配列G[1~20][1~amax][1~2]について説明する。
[1~20]は初期世代個体作成処理で作成する個体を識別するための変数、[1~amax]はエリアを識別するための変数であり、G[p][a][1]には、初期世代のp番目の個体のa番目のエリアが次に進むエリアの情報が設定される。また、G[p][a][2]には、初期世代のp番目の個体のa番目のエリアのエリア内移動ルートパタンの情報が設定される。即ち、作成する個体(巡回ループ)を構成する各エリア毎の巡回情報(遺伝情報)が設定される記録領域が構築されており、当該記録領域に複数個の個体を形成する複数個の巡回情報配列が、遺伝情報配列G[1~pmax][1~amax][1~2]という形で記録される。例えば、初期世代の個体数が20個であれば、当該20の個体を形成する20個の巡回情報配列が、遺伝情報配列G[1~20][1~amax][1~2]という形で記録される。
【0065】
尚、遺伝情報配列G[1~20][1~amax][1~2]における、[1~amax]は各エリアの番号であり、G[a][1]は、エリアaから次に進むエリアの情報が記録される記憶領域のアドレス、G[a][2]は、エリアa内の巡回パターンの情報が記録される記憶領域のアドレスである。
即ち、[a]はエリアの番号を示す情報、G[a][1]には、エリア[a]から次に進むエリアの番号の情報(遺伝情報(巡回情報))が記録され、G[a][2]には、エリア[a]内の巡回パターンの情報(遺伝情報(巡回情報))が記録される。
従って、以下、G[a][1]は、エリア[a]から次に進むエリアの番号の情報を意味し、G[a][2]は、エリア[a]内の巡回パターンの情報を意味するものとする。
つまり、個体毎の巡回情報配列G[1~amax][1~2]は、G[1~amax][1~2]というアドレスに記録された情報群、即ち、
図38(a)に示すような遺伝情報の組み合わせのことであり、当該巡回情報配列により、各初期世代個体の巡回ループが形成される。
例えば、エリアの個数が6個の場合、phase1で設定された遺伝情報配列Gを構成する各巡回情報配列は、
図38(a)に示すような初期巡回情報配列になる。
つまり、
図38(a)に示す初期巡回情報配列G[1~amax][1~2]は、以下の通りである。
エリア[1]から次に進むエリアの番号の情報が記録されるアドレス[1][1]にエリア番号2が記録されて、エリア[1]内の巡回パターンの情報が記録されるアドレス[1][2]にはZパターンが記録される。つまり、エリア番号1の巡回情報として「2-Z」が設定される。
また、エリア[2]から次に進むエリアの番号の情報が記録されるアドレス[2][1]にエリア番号3が記録されて、エリア[2]内の巡回パターンの情報が記録されるアドレス[2][2]にはZパターンが記録される。つまり、エリア番号2の巡回情報として「3-Z」が設定される。
また、エリア[3]から次に進むエリアの番号の情報が記録されるアドレス[3][1]にエリア番号4が記録されて、エリア[3]内の巡回パターンの情報が記録されるアドレス[3][2]にはZパターンが記録される。つまり、エリア番号3の巡回情報として「4-Z」が設定される。
また、エリア[4]から次に進むエリアの番号の情報が記録されるアドレス[4][1]にエリア番号5が記録されて、エリア[4]内の巡回パターンの情報が記録されるアドレス[4][2]にはZパターンが記録される。つまり、エリア番号4の巡回情報として「5-Z」が設定される。
また、エリア[5]から次に進むエリアの番号の情報が記録されるアドレス[5][1]にエリア番号6が記録されて、エリア[5]内の巡回パターンの情報が記録されるアドレス[5][2]にはZパターンが記録される。つまり、エリア番号5の巡回情報として「6-Z」が設定される。
また、エリア[6]から次に進むエリアの番号の情報が記録されるアドレス[6][1]にエリア番号1が記録されて、エリア[6]内の巡回パターンの情報が記録されるアドレス[6][2]にはZパターンが記録される。つまり、エリア番号6の巡回情報として「1-Z」が設定される。
当該初期巡回情報配列に基づいて作成される初期巡回ループは、
図38(b)に示すような初期巡回ループになる。
尚、
図38(b)において、pは巡回パターン、rはエリア間ルートである。
【0066】
即ち、GA処理では、巡回情報配列で特定される初期の巡回ループ(初期個体)を初期世代個体として複数個生成し、かつ、後世代毎に複数個の個体を生成するに当たって、交叉処理や突然変異処理を行う。
大まかにいえば、GA処理では、複数の初期巡回ループ、即ち、初期世代個体を生成して、次の世代の個体を生成する際には、初期世代個体の中から優秀な親個体を選出し、当該親個体を用いた交叉処理や突然変異処理を行うことで次の世代個体を生成していく。そして、以降、同様に、今回の後世代の個体を生成する際には、前回の後世代の個体の中から優秀な親個体を選出し、当該親個体を用いた交叉処理や突然変異処理を行うことで今回の世代個体を生成していくことを、あらかじめ決められた世代数だけ繰り返すものである。
即ち、初期世代個体作成処理は、上述した
図38(a)に示す初期巡回情報配列G[1~amax][1~2]を、複数個、例えば20個の初期巡回情報配列G[1~amax][1~2]を作成して、遺伝情報配列G[1~20][1~amax][1~2]として保管する処理、つまり、
図34のステップS413~ステップS421の処理を20回繰り返して、20個の初期世代個体を生成(作成)する処理である。
また、あらかじめ決められた世代数の処理が終了した時点で最終的に残った最適遺伝情報保存配列Gbest[1~amax][1~2]による巡回ループに基づく巡回ルートが求められることになる。
尚、交叉処理、突然変異処理については、後述する。
【0067】
次に、コンピュータが、個体評価処理プログラム(世代確認処理プログラムを含む)の手順に従って、
図35のフローチャートに示すような、個体評価処理(世代確認処理を含む)(phase2)を行う。
phase1の処理後、最適コスト変数及び最適遺伝情報保存配列の初期化処理を行う(ステップS430)。つまり、最適コスト変数Cbestを0にするとともに、最適遺伝情報保存配列Gbest[1~amax][1~2]を空にする。
次に、評価する個体は何世代目かを判定する(ステップS431)。つまり、世代確認処理を行う。
評価する個体が1世代(初期世代)の個体であれば、個体別変数及びコスト管理配列の初期化処理を行う(ステップS432)。つまり、個体別変数pを1にするとともに、コスト管理配列C[1~amax]を0にする。
そして、個体評価ループに入る(ステップS433)。例えば、初期世代個体である20個の個体を評価する個体評価ループに入る。
まず、エリア番号管理変数a、エリア一周探索済みフラグf、エリア間移動時最大コスト管理変数Cmaxの初期化を行う(ステップS434)。つまり、エリア番号管理変数aを1に、エリア一周探索済みフラグfを0に、エリア間移動時最大コスト管理変数Cmaxを0に設定する。
次に、エリア一周探索済みフラグは立っているか否かを判定する(ステップS435)。つまり、エリア一周探索済みフラグfが1か否かを判定する。
エリア一周探索済みフラグfが1でなければ(ステップS435でNo)、a番目のエリアを遺伝情報配列G[p][a][2]で指定された巡回パターンで巡った際の移動コストをデータベースよりダウンロードして、移動コストC[p]に加算する(ステップS436)。
次に、遺伝情報配列G[p][a][2]が処理を開始した1番目のエリアを指示しているか否かを判定する(ステップS437)。
その後、エリア間ルートの作成処理及び移動コスト計算処理に移行する。
また、ステップS437でNoの場合、その後、ステップS440経由で、エリア間ルートの作成処理及び移動コスト計算処理に移行する。
即ち、ステップS437でYesの場合、つまり、G[p][a][2]の値(次に進むエリアの番号)が処理を開始したエリア番号の場合、探索領域(各エリア)を一周したということになるので、エリア一周探索済みフラグfを1にした後に、a番目のエリアから1番目のエリアへ直線で移動できるか否かを判定し(ステップS439)、エリア間ルートの作成処理及び移動コスト計算処理に移行する。
【0068】
ステップS437でNoの場合、a番目のエリアから遺伝情報配列[p][a][2]に設定されたエリアへ直線で移動できるか否かを判定する(ステップS440)。直線で移動できる場合(ステップS440でYes)、a番目のエリアのゴール地点から遺伝情報配列G[i][a][1]番目のエリアのスタート地点へ直線で移動した場合の移動コストCtravelを計算する(ステップS441)。
また、直線で移動できない場合(ステップS440でNo)、a番目のエリアのゴール地点から遺伝情報配列G[p][a][1]番目のエリアのスタート地点への経路を経路探索アルゴリズム(例えば、前提技術で説明したA*アルゴリズム等)を用いて計算し、その経路に基づいて当該経路の移動コストCtravelを計算する(ステップS442)。
ステップS441又はステップS442の後に、Ctravel>Cmaxか否かを判定する(ステップS443)。
Ctravel>Cmaxでなければ(ステップS443でNo)、a番目のエリアのゴール地点からG[p][a][1]番目のエリアのスタート地点への移動コストを移動コストC[p]に加算して(ステップS444)、その後、G[p][a][1]をaに設定する(ステップS446)。
Ctravel>Cmaxであれば(ステップS443でYes)、CmaxをCtravelにするとともに、G[p][a][1]に設定されたエリアの番号を走行開始エリア番号Sに設定し(ステップS445)、その後、ステップS444に進む。
つまり、ステップS443の判断後のCmaxに残っている移動コストを持つエリア間ルートが、個体(巡回ループ)の最大エリア間ルートとなる。
尚、ステップS439での判断でYesの場合は、ステップS442に進み、ステップS439での判断でNoの場合は、ステップS441に進む。
以上のように、エリア間ルートの作成処理及び移動コスト計算処理を行った後、ステップS435に戻る。
【0069】
エリア一周探索済みフラグfが1であれば(ステップS435でYes)、C[i]←C[i]-Cmaxに設定し(ステップS447)、その後、Cbestが初期状態であるか否か、又は、最適移動コストCbest>C[i]であるか否かを判定する(ステップS448)。尚、ステップS447での右側のC[i]は巡回ループの移動コストであり、ステップS447での左側のC[i]は巡回ルートの移動コストとなる。
Cbestが初期状態であるか、又は、最適コスト変数Cbest>C[i]である場合(ステップS448でYes)、巡回ルートの移動コストC[i]を最適コスト変数Cbestに設定するとともに、最適遺伝情報保存配列Gbest[1~amax][1~2]をG[p][1~amax][1~2]に設定した後、pをp+1に設定する(ステップS450)。
即ち、ステップS447~ステップS449において、C[i]は、作成された各個体(巡回ループ)に基づいて作成された巡回ルートの移動コストである。
今回作成した巡回ルートの移動コストC[i]が、今までに作成した巡回ルートの最適移動コストCbestよりも小さい場合には、ステップS449において、移動コストC[i]を最適移動コストCbestに書き換えて、当該移動コストC[i]を持つ巡回ルートの元となった巡回ループ(個体)の遺伝情報保存配列であるG[p][1~amax][1~2]を最適遺伝情報保存配列Gbest[1~amax][1~2]に書き換える更新処理をおこなっている。即ち、ステップS449において、各世代毎の最適巡回ループ(移動コストが最も小さい巡回ループ)の元となる巡回ループ(個体)を記録している。
Cbestが初期状態でなく、又は、最適コスト変数Cbest>C[i]でもない場合(ステップS448でNo)は、ステップS450に進んで、次の個体pの評価に移行する。
ステップS433からステップS450の処理を繰り返して、世代のすべての個体、例えば、世代毎の20個の個体のエリア間ルートの作成処理及び移動コスト計算処理が終了したら、当該世代が最終世代か否かを判定する(ステップS451)。
最終世代でなければ(ステップS451でNo)、例えば世代毎の20個作成される個体(巡回ループ)の各移動コストC[1~20]の中からコストの低い順に4個体をソートし、各移動コストC[1~4]、及び、遺伝情報配列G[1~4][1~2]にその個体の情報を移し替える(ステップS452)。即ち、当該コストの低い4個体を、後世代の個体を作成するための親として選出し、当該各親の移動コストC[1~4]、及び、各遺伝情報配列G[1~4][1~2]を記録にしておく。
最終世代であれば(ステップS451でYes)、GAを終了する。この終了時点で、最適遺伝情報保存配列Gbest[1~amax][1~2]に記録されている遺伝情報(巡回情報)に基づく巡回ループの移動コストからCmaxを引いた移動コストを持つ巡回ルートが、GAによる探索結果で作成された巡回ルートとなる。即ち、ステップS453において、Gbestを記録した巡回ループの情報、即ち、最適巡回情報配列Gbest[1~amax][1~2]に記録されているルート情報と、このルート情報を基に移動したときのエリア間ルートの軌跡情報と、Sに記録されている走行開始エリア番号をファイルに保存する。このファイルに保存された内容が、GAにより求まった最終の巡回ルートであり、この巡回ルートの情報と巡回ルートの移動コストCbestとが表示画面D上に表示されることにより、使用者は、GAにより求まった最終の巡回ルートを確認できる。
【0070】
コンピュータは、交叉処理プログラムの手順に従って、
図36のフローチャートに示すような、後世代個体作成処理としての交叉処理(phase3-1)を行う。
まず、個体識別変数の初期化をする。即ち、個体識別変数pを5に設定する(ステップS460)。
遺伝情報配列G[1~20][1~amax][1~2]をphase2から引き継ぐ(ステップS461)。
遺伝情報配列G[5~20][1~amax][1~2]を初期化し空にする(ステップS462)。つまり、phase2から引き継いだ例えば20個体のうち、移動コストが大きい例えば16個体の情報を無くす(前世代の16個体を死滅させる)。
次に、交叉処理によって、子を例えば12個体作るループに入る。ここで、p<=16(即ちp≦16)である(ステップS463)。
尚、後世代の子個体は、例えば後世代個体総数20-後世代親個体4=16個体であるが、交叉処理では、12個の子個体を作成し、後述する突然変異処理(phase3-2)にて、4個の子個体を作成する。
【0071】
4つの親個体から2個体を選ぶ。選び方は予め決められた手順で行う(ステップS464)。4つの親個体から2個体をランダムに選んでもよいが、同じ親個体を選んでしまうことなどがあり、多様性が出にくい可能性がある。そこで、例えば、4つの親個体から2個体を選ぶ組み合わせ求め、この組み合わせの内、いずれかの親個体の組み合わせを1つ選ぶ。ここでは、12個の子個体を作成するため、親個体の組み合わせを12回求める。
選ばれた親個体のうち一方の親個体の遺伝情報を配列P1[1~amax][1~2]にコピーするとともに、他方の親個体の遺伝情報を配列P2[1~amax][1~2]にコピーする(ステップS465)。
そして、エリア番号管理変数の初期化、即ち、エリア番号管理変数aを1に設定する(ステップS466)。
また、親P1からの遺伝可否判断フラグの初期化、即ち、フラグf1を0にするとともに、親P2からの遺伝可否判断フラグの初期化、即ち、フラグf2を0にする(ステップS467)。
以上により交叉処理に移るための事前処理が終わり、次に、ステップS468に進んで、a=1かつp番目の個体の遺伝情報交叉処理を1回以上行ったか否かを判定する。つまり、p番目の個体の遺伝情報がエリアを一周して戻ってこられる状態になったか否か、即ち、遺伝情報に基づいて各エリアを一巡するp番目の巡回ループが作成されたか否かを判定し、当該ステップS468での判断がNoである場合、交叉処理に移行する
尚、交叉処理とは、子個体(後世代巡回ループ)を作る際に、親個体の巡回情報を引き継ぐ処理(後述の処理B2)、又は、親個体の巡回情報を引き継げない場合にランダムに巡回情報を設定する処理(後述の処理B4,B3)のことをいう。
【0072】
交叉処理では、まず、致死的遺伝情報の遺伝を防ぐ処理ブロックB1に移行する。
処理ブロックB1では、まず、遺伝情報配列G[p][1~amax][1~2]の中に空の要素が2個以上残っているか否かを判定する(ステップS469)。
ステップS469での判断がYesである場合、P1[a][1]=1であるか、若しくは、今回作成しようとしているG[p][1~amax][1](各エリアに設定される遺伝情報である行先エリアの情報)に既にP1[a][1]と同じ値が記録されているか否かを判定する(ステップS470)。
ステップS470での判断がNoである場合、P2[a][1]=1であるか、若しくは、今回作成しようとしているG[p][1~amax][2](各エリアに設定される遺伝情報である巡回パターンの情報)に既にP2[a][1]と同じ値が記録されているか否かを判定する(ステップS471)。
ステップS471での判断がNoである場合は、基本的な交叉処理ブロックB2に移行する。
ステップS470での判断がYesである場合、遺伝情報として同じ情報が設定されることを回避するために、親P1からの遺伝は不可と判断し、フラグf1に1を設定した後、ステップS471に進む。
ステップS471での判断がYesである場合、遺伝情報として同じ情報が設定されることを回避するために、親P2からの遺伝は不可と判断し、フラグf2に1を設定した後、基本的な交叉処理ブロックB2のステップS472に進む。
即ち、ステップS480、ステップS483、ステップS484によって、盲腸線をもたらす致死的遺伝情報や複数ループをもたらす致死的遺伝情報が遺伝されないようにしている。換言すれば、交叉処理において、必ず1つのループを形成する遺伝情報配列が作成されるようにしている。
【0073】
基本的な交叉処理ブロックB2では、まず、ステップS472において、フラグf1=0でかつフラグf2=0か否かを判定する。即ち、どちらの親からも遺伝可能か否かを判定する。
ステップS472での判断がNoである場合は、フラグf1=1でかつフラグf2=0か否かを判定する。即ち、親P1だけ遺伝不可能か否かを判定する(ステップS473)。
ステップS473での判断がNoである場合は、フラグf1=0でかつフラグf2=1か否かを判定する。即ち、親P2だけ遺伝不可能か否かを判定する(ステップS474)。
基本的な交叉処理ブロックB2において、ステップS472での判断がYesである場合は、1~100までの数値を用意してその中から1つ抜き出してその数値が51以上の数値であるか否かを判定する(ステップS485)。尚、数値1及び0を用意し、抽出した数値が1であるか否かを判定してもよい。
即ち、ステップS472での判断がYesである場合は、親P1又は親P2のいずれからでも遺伝可能であるので、どちらの親から遺伝させるかを、ステップS485でランダムに選択している。
ステップS485での判断がYesである場合は、親P1から遺伝情報を引き継ぐ。即ち、G[p][a][1]をP1[a][1]に、G[p][a][2]をP1[a][2]に置き換える(ステップS486)。その後、aをG[p][a][1]に置き換えて(ステップS478)、ステップS467に戻る。
ステップS485での判断がNoである場合は、親P2から遺伝情報を引き継ぐ。即ち、G[p][a][1]をP2[a][1]に、G[p][a][2]をP2[a][3]に置き換える(ステップS487)。その後、aをG[p][a][1]に置き換えて(ステップS478)、ステップS467に戻る。
【0074】
ステップS469での判断がNoである場合、即ち、遺伝情報配列G[p][1~amax][1~2]の中に空の要素が1個しか残っていない場合、盲腸線や複数ループとならないように、その1個の空のエリアの行先エリアG[p][a][1]を1にして(ステップS480)、1つのループを形成する遺伝情報配列G[p][1~amax][1~2]を作成し、その1個の空のエリアの巡回パターンG[p][a][2]を親P1又は親P2から遺伝させる(処理B3)。
また、ステップS474での判断がNoである場合は、フラグf1=1でかつフラグf2=1であり、親P1、親P2のいずれからも遺伝不可能であるので、今、交叉処理を行っているエリアの行先エリアG[p][a][1]を、既に設定されているエリア以外にエリアにランダムに設定する(処理B4)。
即ち、ステップS474での判断がNoである場合は、ステップS475に進み、エリア2~amaxの中から、G[p][1~amax][1]に既に存在する値以外を無作為に選んで、G[p][a][1]に代入し(ステップS475)、その後、処理ブロックB3のステップS476に移行して、今、交叉処理を行っているエリアの巡回パターンG[p][a][2]を、親P1又は親P2から遺伝させる(処理B3)。
【0075】
処理ブロックB4(ステップS475)から例外的な交叉処理ブロックB3に移行する場合は、まず、ステップS476に進んで、1~100までの数値を用意してその中から1つ抜き出してその数値が51以上の数値であるか否かを判定する。尚、数値1及び0を用意し、抽出した数値が1であるか否かを判定してもよい。
ステップS476での判断がNoである場合、親P1から巡回パターンの遺伝情報を引き継ぐ。即ち、G[p][a][2]をP1[a][2]に置き換える(ステップS477)。その後、aをG[p][a][1]に置き換えて(ステップS478)、ステップS467に戻る。
ステップS476での判断がYesである場合、親P2から巡回パターンの遺伝情報を引き継ぐ。即ち、G[p][a][2]をP2[a][2]に置き換える(ステップS479)。その後、aをG[p][a][1]に置き換えて(ステップS478)、ステップS467に戻る。
【0076】
ステップS480を経て、処理ブロックB1から例外的交叉処理ブロックB3に移行する場合は、まず、ステップS481に進んで、P1[a][1]=1、かつ、P2[a][1]=1、又は、P1[a][1]≠1、かつ、P2[a][1]≠1であるか否かを判定する。
即ち、親P1のエリアaの行先エリアが1で、かつ、親P2のエリアaの行先エリアが1であること、つまり、親P1,P2のエリアaの行先エリアが共に1である場合や、親P1のエリアaの行先エリアが共に1でない場合には、その子のエリアaの巡回パターンG[p][a][1]を、親P1のエリアaの巡回パターン、又は、親P2のエリアaの巡回パターンに設定する。どちらの巡回パターンとするかは、ステップS476にてランダムに決める。
ステップS481での判断がNoである場合、P1[a][1]=1であるか否かを判定し(ステップS482)、P1[a][1]=1である場合はステップS477に進み、P1[a][1]=1でない場合はステップS479に進む。
ステップS481での判断がYesである場合は、ステップS476に進む。
また、ステップS468での判断がYesである場合は、pをp+1にした後、Phase3-2へ移行する。
【0077】
図36の交叉処理の流れを説明する。
子個体の作成において、最初は、ステップS468、ステップS469、ステップS470、ステップS471、ステップS472と進んで、ステップS472でYesとなり、ステップS485を経て、子個体のエリア1の遺伝情報(エリア1の巡回パターン、エリア1から次の行先エリア)が、親P1又は親P2から引き継がれる(基本交叉(ステップS486又はステップS487))。そして、エリア番号管理変数aが、子個体のエリア1の遺伝情報である次の行先エリアG[p][a][1]に設定される(ステップS478)。
また、ステップS469でYesであり、ステップS474まで進んで、親P1又は親P2のどちらからも遺伝情報を引き継げない場合(ステップS474でNo)には、エリア2~amax(
図42ではamax=10)の中から、未だ行先エリアとして設定されていないエリアがランダムに選ばれて次の行先エリアG[p][a][1]に設定される(ステップS475(例外的交叉))とともに、ステップS476に進んで、エリアaの巡回パターン[p][a][2]が、親P1又は親P2から引き継がれる(ステップS477又はステップS479(例外的交叉))。
また、ステップS469での判断がNoである場合、即ち、遺伝情報配列G[p][1~amax][1~2]の中に空の要素が1個しか残っていない場合、G[p][a][1]を1にして(ステップS480)、複数ループをもたらす致死的遺伝情報が生じないようにしている。その後、その子の行先エリアを1としたエリアの巡回パターンG[p][a][2]を親P1又は親P2から遺伝させる(処理ブロックB3)。
また、ステップS470,ステップS483,ステップS471,ステップS484の処理により、盲腸線をもたらす致死的遺伝情報が生じないようにしている。
即ち、今回の後世代巡回ルート作成手段は、巡回ループが複数ループを形成しないように、又は、巡回ループが盲腸線を形成したりしないように、巡回ループを作成する際に巡回情報を設定するものである。
つまり、今回の後世代巡回ルート作成手段は、前回の後世代巡回ループ作成手段により作成された前回の複数の後世代巡回ループの中から移動コストの小さい巡回ルートの1つ以上を親と定義し、当該親の巡回ルートの巡回情報を引き継ぐことにより、今回の後世代巡回ルートを作成する(
図36の処理B1~処理B4参照)。
また、今回の後世代巡回ルート作成手段は、今回の後世代巡回ルートを作成する段階において、まだ巡回情報が設定されていないエリアが2つ以上残っていて、かつ、まだ巡回情報が設定されていないエリアに設定する巡回情報である次に進むエリアの情報を親から引き継ぐことができない場合には、まだ巡回情報が設定されていないエリアに設定する次に進むエリアを、まだ巡回情報として設定されていないエリアの中から任意に選択する(
図36の処理B4(ステップS475)参照)。
尚、上述した、まだ巡回情報が設定されていないエリアに設定する巡回情報である次に進むエリアの情報を親から引き継ぐことができない場合とは、まだ巡回情報が設定されていないエリアに引き継がせるようとする親の巡回情報である次に進むエリアの情報が、今回の後世代巡回ルートを作成する際に巡回情報を一番最初に設定したエリアである場合、及び、まだ巡回情報が設定されていないエリアに引き継がせるようとする親の巡回情報である次に進むエリアの情報が、今回の後世代巡回ルートの作成において既に使用されている場合である(
図36の処理B1のステップS470,S483、S471,S484参照)。
また、今回の後世代巡回ルート作成手段は、今回の後世代巡回ルートを作成する段階において、まだ巡回情報が設定されていないエリアが1つしか残っていないと判定した場合に、当該1つ残ったエリアの巡回情報である次に進むエリアの情報を、今世代の巡回ルートを作成する際に巡回情報を一番最初に設定したエリアとする(
図36の処理B1のステップS469,S480参照)。
【0078】
処理ブロックB1について説明を補足する。
尚、致死的遺伝情報とは、エリア全体を1巡できないような個体、例えばループを複数持つ個体や盲腸線を持つ個体等を形成してしまう遺伝情報(巡回情報)のことをいう。
【0079】
例えば、
図40に示す個体は、1-3-6-1というループと2-10-5-4-9-8-7という2つのループを持つ。このような遺伝情報を持つ個体では、各エリアを一巡したいというそもそもの目的を達成できない。
図41に示す個体は、次に進むエリアを7とする遺伝情報(7-Z,7-Z’)が同じ個体内に2つ存在している。加えて、次に進むエリアを7とする遺伝情報が存在していない。つまり、6-4-9-8-7-2-10-5-1-3-7に戻るとなり、7-2-10-5-1-3のループから7-8-9-4-6のルートが盲腸線化している個体である。このような遺伝情報を持つ個体でも、各エリアを一巡したいというそもそもの目的を達成できない。
【0080】
基本的な交叉処理ブロックB2について説明を補足する。
基本的な交叉処理では、次の交叉の操作は採用した遺伝情報中の「次に進むエリア」に記された領域(エリア番号)で行う。
図42では、子のエリア1の遺伝情報giを、親1の遺伝情報3-Zから遺伝させた例である。この場合、採用した遺伝情報は(3-Z)なので、次の交叉の操作領域はエリア3となる。そして、
図42では、子のエリア3の遺伝情報giを、親2の遺伝情報4-Z’から遺伝させた例を示している。
即ち、
図36の処理ブロックB2では、親1又は親2の何れかから遺伝情報を遺伝させた場合には、次の交叉の操作を行うエリアaを、遺伝した遺伝情報中の「次に進むエリア」であるG[p][P][1]に設定する(ステップS478)。
そして、親1又は親2の何れからも遺伝情報を遺伝させることができない場合には、
次の交叉の操作を行うエリアであるG[p][P][1]をランダムに設定する(ステップS475、処理ブロックB4)。
【0081】
例外的な交叉処理ブロックB3,B4について説明を補足する。
通常の交叉では致死的遺伝情報が生じる可能性がある場合に、それを回避するために、下記のルールに基づく処理を行う。
【0082】
・Aパターン
いずれか一方の親の移動先エリア番号の遺伝情報について、既に自身のそのエリア番号の部分の遺伝情報が確定されているならそちらの親から遺伝情報を採ってくることを禁止する(ステップS470,ステップS483、ステップS471,ステップS484)。
図43において、子のエリア8の遺伝情報を交叉する場合、親2のエリア8の遺伝情報を採ってくると、当該遺伝情報の行先エリアである「9」は、子のエリア4の遺伝情報における行先エリアとして既に確定している(ステップS471)。よって、この交叉対象エリアcaであるエリア8の遺伝情報を、親2から遺伝情報から採ってくることを禁止する(ステップS484)。もし、交叉対象エリアcaであるエリア8の遺伝情報として、親2から遺伝情報を採ってくると、この子は複数ループを持たらす致死的遺伝情報を持つ個体となってしまう。従って、この場合、この子のエリア8の遺伝情報は親1からの遺伝情報7-Z’を遺伝させる(ステップS474,ステップS486)。
【0083】
・Bパターン
両方の親共に移動先エリア番号の遺伝情報について、既に自身のそのエリア番号の部分の遺伝情報が確定されているなら次に進むエリア番号の遺伝情報については親から遺伝することを禁止し(ステップS474でNo)、空き領域のエリア番号からランダムに選択する(ステップS475)。巡回パターンの遺伝情報については、何れかの親からランダムに遺伝させる。
図44においては、この子自身はエリア2もエリア8も、対応する場所の遺伝情報が既に確定している。よってこの交叉対象エリアcaであるエリア7の行先エリアは、次に進むエリア番号の遺伝情報が空き状態eaとなっている領域の番号の中からランダムに選ぶ(この例では3のみが該当するので3で確定)。
巡回パターンは親が持つこの領域の遺伝情報からランダムに選ぶ(この例ではZかS)。
つまりこの状況では、この子の交叉対象エリアcaであるエリア7において3-Zか3-Sの遺伝情報を持つことになる。
【0084】
・Cパターン
交叉対象エリアcaにおいて、両方の親共に移動先エリア番号の遺伝情報について、既に自身のそのエリア番号の部分の遺伝情報が確定され、かつ、空き領域が存在しないなら、親から遺伝することを禁止し、1を選択させる。巡回パターンの遺伝情報については、何れかの親からランダムに遺伝させる。
図45においては、この子自身はエリア4もエリア7も、対応する場所の遺伝情報が既に確定している。加えて空き状態となっている領域も存在しない。この状況においては、交叉対象エリアcaであるエリア6に、次に進むエリア番号の遺伝情報として「1」を設定する。また、巡回パターンは親が持つこの領域の遺伝情報からランダムに選ぶ(この例ではS’で確定)。つまりこの状況では、この子の交叉対象エリアcaであるエリア6においては、1-S’の遺伝情報が設定される。
【0085】
次に、コンピュータは、突然変異処理プログラムの手順に従って、
図37のフローチャートに示すような、突然変異処理(phase3-2)を行う。尚、当該突然変異処理は、多様性を失わせないために行う処理である。
まず、個体識別変数の初期化を行う。即ち、個体識別変数pを17に設定する(ステップS500)。
そして、遺伝情報配列G[1~20][1~amax][1~2]をphase3-1から引き継ぐ(ステップS501)。
次に、突然変異を4個体作るループに入る。ここで、p<=20である(ステップS502)。
まず、phase2で移動コストが低いとされた個体のコピーを作る。即ち、G[p][1~amax][1~2]をG[p-16][1~amax][1~2]に置き換える(ステップS503)。即ち、p=20の場合、4つの個体のコピー(クローン)を作る。
次に、1~100までの数値を用意してその中から1つ抜き出してその数値が51以上の数値であるか否かを判定する(ステップS504)。尚、数値1及び0を用意し、抽出した数値が1であるか否かを判定してもよい。
【0086】
ここで、G[p][P2][1]、G[p][P1][1]について説明する。
ステップS501において、複数の個体を構成する遺伝情報配列G[1~20][1~amax][1~2]の中から4個体の遺伝情報配列G[p-16][1~amax][1~2](即ち、G[1~4][1~amax][1~2])を引き継いだとする。この4個体の遺伝情報配列G[p-16][1~amax][1~2]のうちの1個体の巡回情報配列が例えば
図38(a)に示す巡回情報配列である場合、当該巡回情報配列によって、
図38(b)に示すような巡回ループが作成され、当該巡回情報配列に突然変異処理が施される。
【0087】
ステップS504での判断がNoである場合、エリア番号1~amaxの中から値を無作為に1つ選んで、P1に代入する(ステップS505)とともに、エリア番号1~amaxの中から値を無作為に1つ選んで、P2に代入する(ステップS506)。
その後、ステップS507に進んで、P1とP2とが同じか否か、G[p][P2][1]とP1とが同じか否か、若しくは、G[p][P1][1]とP2とが同じか否かを判定する。
当該ステップS507でYesの場合は、ステップS506に戻って、P2を選び直す。
ステップS507でNoの場合は、ステップS508に進んで、PtmpをG[p][P2][1]に設定する。
次に、ステップS509に進んで、G[p][1~amax][1]=P2となるようなエリア番号aを探索し、このようなエリア番号aを発見できたか否かを判定する。
ステップS509でNoの場合は、mを-1に設定する(ステップS510)。
ステップS509でYesの場合は、mをaに設定する(ステップS511)。つまり、P2に代入されているエリアを次の移動先としている別のエリアが存在していれば、その別のエリアの番号aをmに代入する。
ステップS510の後、又は、ステップS511の後は、ステップS512に進んで、G[p][P1][1]をP2に設定する。
そして、この処理ブロックを取るのは1回目か否かを判定する(ステップS513)。
ステップS513でYesの場合、ステップS514に進んで、m=-1か否かを判定する。
ステップS513でNoの場合、G[p][P2][1]に設定されている巡回パターンを反転させ(ステップS515)、その後、ステップS514に進む。
ステップS514でNoの場合、ステップS516に進んで、P1をP2に設定するとともに、P2をmに設定した後、ステップS509に戻る。
ステップS514でYesの場合、ステップS517に進んで、G[p][P2][1]をPtmpに設定した後、ステップS518に進んで、G[p][P2][2]に設定されている巡回パターンを反転させ、その後、pをp+1にし(ステップS519)、P=20がクリアしていれば、その後、phase2のステップS431に進む。
即ち、ステップS504での判断がNoである場合、GAでのエリア間ルートの改変処理を行う。
つまり、今回の後世代巡回ルート作成手段は、前回の後世代巡回ルート作成手段により作成された前回の複数の後世代巡回ルートの中から移動コストの小さい巡回ルートを抽出して、当該抽出された巡回ルートを作成する元となった巡回ループのエリア間のルートを変更するエリア間ルート改変処理手段を備え、エリア間ルート改変処理手段は、上述した巡回ループの各エリアのうちから異なる任意の第1のエリアと第2のエリアとを任意に選択する第1ステップ(ステップS505,ステップS506)と、第2のエリアの巡回情報として設定されている次に進むエリアの情報を保留情報として記録しておく第2ステップ(ステップS508)と、第2のエリアの巡回情報として設定されている次に進むエリアの情報を巡回情報として持っているエリアを探索して当該エリアの有無を判定する第3ステップ(ステップS509)と、第1のエリアの巡回情報に設定する次に進むエリアの情報として、第2のエリアを設定する第4ステップ(ステップS512)と、第4ステップの処理を行うのが初めてではない場合に、第2のエリアの巡回情報に設定されている巡回パターンを反転させる第5ステップ(ステップS515)と、第3ステップでの判定結果が有であった場合(ステップS514でNo)、第4ステップの後、又は、第5ステップの後において、第1のエリアを第2のエリアに変更するとともに、第2のエリアを第3ステップで探索されたエリアに変更した後に、第3ステップの処理に戻る第6ステップ(ステップS516)と、第3ステップでの判定結果が無であった場合(ステップS514でYes)、第4ステップの後、又は、第5ステップの後において、保留情報を第2のエリアの巡回情報としての次に進むエリアとして設定するとともに、第2のエリアの巡回情報に設定されている巡回パターンを反転させる第7ステップ(ステップS517,ステップS518)とを備えた構成とした。
【0088】
次に、ステップS504での判断がYesである場合の、巡回パターンの改変処理について説明する。
ステップS504においてYesと判定された場合は、エリア番号1~amaxの中から値を無作為に1つ選んで、P1に代入する(ステップS520)とともに、G[p][P][2]に既存の巡回パターン以外の巡回パターンの何れかを無作為に代入する(ステップS521)。つまり、既にG[p][P][2]に設定されている巡回パターンと同じ巡回パターンが無作為に選択された場合は、異なる巡回パターンが出るまで無作為に選び直される。
その後、ステップS519において、pをp+1にした後、phase2のステップS431に進む。
即ち、今回の後世代巡回ルート作成手段は、前回の後世代巡回ルート作成手段により作成された前回の複数の後世代巡回ルートの中から移動コストの小さい巡回ルートを抽出して、当該抽出された巡回ルートを作成する元となった巡回ループのエリア内の巡回パターンを変更する巡回パターン改変処理手段を備え、巡回パターン改変処理手段は、上述した巡回ループの各エリアから無作為に1つのエリアを選んで、当該エリアの巡回情報である巡回パターンの情報を変更する構成とした。
【0089】
そして、ステップS431では、何世代目の処理であるかを判定する。
ステップS431の判断において「1世代(初期世代)である」と判定された場合、ステップS432に進む。
また、ステップS431の判断において「その他の世代(1世代以外)と判定された場合、ステップS453で、個体識別変数の初期化、即ち、pを例えば5に、コスト管理配列の初期化、即ち、C[1~amax][1~2]を0に、遺伝情報配列G[5~20][1~amax][1~2]をphase3から引き継いだ後に、ステップS433に進む。
【0090】
次に、
図37の突然変異処理(phase3-2)におけるエリア間ルート改変処理(ステップS500~ステップS519)について、
図46~
図51に基づいてより具体的に説明する。
例えば、
図39に示した巡回情報配列に基づいて
図46(a)に示すような巡回ループが作られたとする(ステップS503)。
そして、ステップS505で、入れ替え処理が行われるエリア番号として「2」が選択されてP1に代入されたとする。この場合、
図46(a)に示すように、変数の状態は、G[P1][1](エリア2から次に進むエリア)は「5」、G[P1][2](エリア2内の巡回パターン)は「Z」である(
図39参照)。
次に、ステップS506で、入れ替え処理が行われるエリア番号として「3」が選択されてP2に代入されたとする。この場合、
図46(b)に示すように、変数の状態は、G[P2][1](エリア3から次に進むエリア)は「6」、G[P2][2](エリア3内の巡回パターン)は「S」である(
図39参照)。
次に、ステップS508で、Ptmpに、P2であるエリア3の行先エリアG[P2][1]として6を設定する。つまり、Ptmpを「6」にする(
図46(c)参照)。
そして、ステップS509で、変数P2が示すエリアを移動先としているエリアが存在しているか検索する。存在していたらそのエリア番号をmに入れる(ステップS510)。この場合、変数P2が示すエリア3を移動先としているエリアはエリア4が存在する(
図39参照)ので、mを「4」にする(
図47(a)参照)。
次に、ステップS512で、P1「エリア2」の行先エリアG[P1][1]をP2にする。この場合、
図47(b)に示すように、G[P1][1]が「3」に設定される。この場合、P1が「2」、G[P1][1]が「3」なので、エリア2とエリア5とを繋ぐエリア間ルートが解除され、その代わりに、エリア2の終点とエリア3の始点とがエリア間ルートで繋がれる(
図47(b)参照)。
次に、ステップS513に進み、ステップS512の処理は初めてなので、ステップS514に進む。この場合、m=4であり、-1ではないので、ステップS516に進む。
ステップS516では、P1をP2に設定するとともに、P2をmに設定する。この場合、
図48(a)に示すように、P1に「3」が設定され、P2に「4」が設定される。
その後、ステップS509に戻って、変数P2が示すエリアを移動先としているエリアが存在しているか検索する。存在していたらそのエリア番号をmに入れる(ステップS510)。この場合、変数P2が示すエリア4を移動先としているエリアはエリア5が存在する(
図39参照)ので、mを「5」にする(
図48(b)参照)。
そして、ステップS512に進み、P1「エリア2」の行先エリアG[P1][1]をP2にする。この場合、
図48(c)に示すように、G[P1][1]が「4」に設定される。この場合、P1が「3」、G[P1][1]が「4」なので、エリア3とエリア5とを繋ぐエリア間ルートが解除され、その代わりに、エリア3の終点とエリア4の始点とがエリア間ルートで繋がれる(
図48(c)参照)。
その後、ステップS513に進み、ステップS512の処理は初めてではないので、ステップS515に進む。この場合、P1であるエリア3の巡回パターンを反転する。つまり、
図49(a)に示すように、エリア3の巡回パターンが、「S」パターン(
図39参照)から「S’」パターンに変換される(
図49(a)参照)。この場合、P1が「3」、G[P1][1]が「4」なので、巡回パターンが変更したエリア3の終点とエリア4の始点とがエリア間ルートで繋ぎ直される。また、P2が「4」、G[P2][1]が「3」なので、エリア4の終点と巡回パターンが変更したエリア3の始点とがエリア間ルートで繋ぎ直される。また、巡回パターンが変更したエリア3の始点とエリア2の終点とがエリア間ルートで繋ぎ直される。
その後、ステップS514に進む。この場合、m=5であり、ステップS516に進む。
ステップS516では、P1をP2に設定するとともに、P2をmに設定する。この場合、
図49(b)に示すように、P1に「4」が設定され、P2に「5」が設定される。
その後、ステップS509に戻って、変数P2が示すエリアを移動先としているエリアが存在しているか検索する。存在していたらそのエリア番号をmに入れる(ステップS510)。この場合、
図49(c)に示すように、変数P2が示すエリア5を移動先としているエリアは存在しない(
図47(b)において、エリア2とエリア2の行先であったエリア5とのエリア間ルートは既に解除されている)ので、ステップS511に進んで、mが-1に設定される。
そして、ステップS512に進んで、P1「エリア4」の行先エリアG[P1][1]をP2にする。この場合、
図50(a)に示すように、G[P1][1]が「5」に設定される。この場合、P1が「4」、G[P1][1]が「5」なので、エリア4とエリア3とを繋ぐエリア間ルートが解除され、その代わりに、エリア4の終点とエリア5の始点とがエリア間ルートで繋がれる(
図50(a)参照)。
その後、ステップS513に進み、ステップS512の処理は初めてではないので、ステップS515に進む。この場合、P1であるエリア4の巡回パターンを反転する。つまり、
図50(b)に示すように、エリア4の巡回パターンが「M」パターン(
図39参照)から「M’」パターンに変換される(
図50(b)参照)。この場合、P1が「4」、G[P1][1]が「5」なので、巡回パターンが変更したエリア4の終点とエリア5の始点とがエリア間ルートで繋ぎ直される。また、P2が「5」、G[P2][1]が「4」なので、エリア5の終点と巡回パターンが変更したエリア4の始点とがエリア間ルートで繋ぎ直される。また、エリア3の終点とエリア4の始点とがエリア間ルートで繋ぎ直される。
その後、ステップS514に進む。この場合、m=-1であり、ステップS517に進む。
ステップS517では、G[P2][1]をPtmpに設定する。この場合、
図50(c)に示すように、G[P2][1]が6に設定され、P2=5なので、エリア5の行先がエリア6に変更されて、エリア5の終点とエリア6の始点とがエリア間ルートで繋がれる。
そして、最後に、ステップS518に進み、ステップS518では、G[P2][2]の巡回パターンを逆転させる。この場合、
図51に示すように、G[P2][2](=エリア5の巡回パターン)が「Z」パターン(
図39参照)から「Z’」パターンに変換される。この場合、P1が「4」、G[P1][1]が「5」なので、エリア4の終点と巡回パターンが変更したエリア5の始点とがエリア間ルートで繋がれる。また、P2が「5」、G[P2][1]が「6」なので、巡回パターンが変更したエリア5の終点とエリア6の始点とがエリア間ルートで繋がれる。
以上により、
図51に示すような、全エリアをループする巡回ループが作成される。
その後、phase2のステップS431に進み、ステップS447で最も移動コストが高いエリア間ルートを削除した巡回ルートが作成されることになる。
【0091】
突然変異処理(phase3-2)におけるエリア間ルート改変処理(ステップS500~ステップS519)の内容を、
図52に基づいてまとめると以下のようになる。
図52(a)に示すように、1回目にランダムに選ばれたエリア(P1に設定されたエリア)が2、2回目にランダムに選ばれたエリア(P2に設定されたエリア)が3であったとする。この場合、入れ替え対象となるエリア間ルートは、それぞれのエリアから次のエリアに向かっているエリア間ルートになる。即ち、エリア2からエリア5に向かうエリア間ルート、及び、エリア3からエリア6に向かうエリア間ルートとなる。
そして、
図52(b)に示すように、1回目に選ばれたエリア2の行先を2回目に選んばれたエリア3に変更する。つまり、エリア2の行先をエリア5からエリア3に変更する。これにより、エリア2とエリア3とがエリア間ルートで繋がれて、エリア2とエリア5とを繋いでいたエリア間ルートが消滅する。
次に、
図52(c)に示すように、1回目に選んだエリア2の元々の行先であるエリア5から2回目に選んだエリア3へと至る道中のエリア5,4,3の巡回パターン及びエリア間ルートを反転させる。このとき、一つのエリアの行先エリアは1つしか指定できないために、2回目に選ばれたエリア3から次のエリア6へと向かう元々のエリア間ルートは消滅する。
最後に、
図52(d)に示すように、1回目に選んだエリア2の元々の行先のエリア5から2回目に選んだエリア3の元々の行先エリア6へ向かうルートを設定して処理が終了する。
【0092】
即ち、突然変異処理(phase3-2)でのエリア間ルート改変処理(ステップS500~ステップS519)の内容を要約すると、1回目に選ばれたエリア(P1に設定されたエリア)から次のエリアへ向かうエリア間ルート、及び、2回目に選ばれたエリア(P2に設定されたエリア)から次のエリアへ向かうエリア間ルートを、入れ替え対象のエリア間ルートとする処理ステップと、1回目に選ばれたエリアの行先を2回目に選ばれたエリアに変更するとともに、1回目に選ばれたエリアと当該エリアの元々の行先であったエリアとを繋いでいたエリア間ルートを消滅させる処理ステップと、1回目に選んだエリアの元々の行先であるエリアから2回目に選んだエリアへと至る道中のエリアの巡回パターン及びエリア間ルートを反転させるとともに、2回目に選ばれたエリアと当該エリアの元々の行先であったエリアとを繋いでいたエリア間ルートを消滅させる処理ステップと、1回目に選んだエリアの元々の行先のエリアから2回目に選んだエリアの元々の行先のエリアへと向かうルートを設定する処理ステップとを備えた処理である。
【0093】
以上説明したように、実施形態に係る巡回ルート作成装置によれば、巡回情報を用いて、巡回ルートを更新するようにしたので、複数のエリアを移動体に巡回させるための効率的な巡回ルートを作成できるようになった。
また、巡回ループに対して、交叉処理、突然変異処理を行うことで、後世代で作成される巡回ループに多様性を持たせることができるようになり、効率的な巡回ルートを作成できるようになった。
【0094】
尚、以下のような構成を備えた巡回ルート作成装置としてもよい。
即ち、複数のエリアの位置情報を認識して当該複数のエリアを移動体に巡回させる巡回ルートを作成するための巡回ルート作成装置であって、各エリアを一巡する巡回ループを作成する巡回ループ作成手段と、作成された巡回ループの経路を移動体で移動させる場合の移動コストを算出する移動コスト算出手段と、作成された巡回ループを形成するエリア間ルートのうち最も移動コストの大きいエリア間ルートを削除して、削除したエリア間ルートのルート終端が繋がれていたエリアを巡回ルートのスタート領域とし、かつ、削除したエリア間ルートのルート始端が繋がれていたエリアを巡回ルートのゴール領域とした各エリアを一巡する巡回ルートを作成する巡回ルート作成手段とを備えた巡回ルート作成装置において、巡回ループ作成手段は、エリア毎に巡回情報を設定することにより最初の巡回ループを作成する最初の巡回ループ作成手段と、最初の巡回ループの巡回情報を変更した巡回ループを作成する巡回ループ更新手段とを備えた構成とし、巡回ルート作成手段は、巡回ループ更新手段により作成された今回の巡回ループに基づいて作成された今回の巡回ルートの移動コストと、巡回ループ更新手段により作成された前回の巡回ループに基づいて作成された前回の巡回ルートの移動コストとを比較して、移動コストの小さい巡回ルートを残す判定手段を備えた構成としてもよい。
当該巡回ルート作成装置によれば、上述した巡回情報を用いて、巡回ループを更新し、順次、移動コストの小さい巡回ルートを残していけるので、複数のエリアを移動体に巡回させるための効率的な巡回ルートを作成できるようになる。
【0095】
また、実施形態に係る巡回ルート作成装置によれば、後世代巡回ルート作成手段が、突然変異処理におけるエリア間ルート改変処理(ステップS500~ステップS519)を行うことにより、改変(更新)される巡回ループに多様性を持たせることができるようになり、効率的な巡回ルートを作成できるようになった。
また、後世代巡回ルート作成手段が、突然変異処理としての巡回パターン改変処理(ステップS520,S521)を行うことにより、改変(更新)される巡回ループに多様性を持たせることができるようになり、効率的な巡回ルートを作成できるようになった。
【0096】
また、世代数を変更することにより、巡回ルートを得るまでに要する時間を短縮したい、あるいは、より効率的な巡回ルートを得たい等の要望に合わせた巡回ルート作成処理を実現可能な巡回ルート作成装置を提供できる。
【0097】
また、実施形態では、エリア内の巡回パターンとして、8種類の巡回パターンを例示したが、巡回パターンは、例えば、第1パターン及び第2パターンのみ、あるいは、第3パターン及び第4パターンのみ、第5パターン及び第6パターンのみ、第7パターン及び第8パターンのみを、使用するようにしてもよい。
【0098】
また、実施形態では、エリア(移動対象領域)として、建物内の床面を移動させる例を示したが、エリアは、建物外の道路や空き地等の面であってもよい。
また、障害物Bは、柱以外の障害物、例えば間仕切り壁、固定設備、重量物等であってもかまわない。
また、エリアの位置を示すエリアのXY座標情報や障害物の位置を示すXY座標情報は、角のXY座標情報でなく、エリアの位置や障害物の位置を確認できるXY座標情報であればよい。
【0099】
また、複数のエリア(移動対象領域)は、
図12に示したように、各々隣接した複数のエリアであってもよいし、
図37等に示したように、各々離間した複数のエリアであってもよい。
【0100】
実施形態に係る巡回ルート作成装置によれば、例えば撮像手段(カメラ)を搭載して床面を撮影する移動体1を用いて床面検査を行う場合において、複数のエリアを移動体1に巡回させるための効率的な巡回ルートを提供できるようになるため、効率的な床面検査を行うことが可能となる。
尚、床面検査以外の目的で複数のエリアを移動体1に巡回させる場合であっても、複数のエリアを移動体1に巡回させるための効率的な巡回ルートを提供できるようになる。
【0101】
また、上記では、移動体の移動制御システムにおいて、移動体の実際の移動情報を取得して移動体に送信する移動情報取得手段として、自動追尾機能を備えたTS(トータルステーション)を用いた例を示したが、移動情報取得手段としては、TS以外の手段、例えば、GPS、レーザ測位システム等の移動体自己位置認識システムを用いてもよい。
【符号の説明】
【0102】
1 移動体。