(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023128624
(43)【公開日】2023-09-14
(54)【発明の名称】巡回ルート作成装置
(51)【国際特許分類】
G05D 1/02 20200101AFI20230907BHJP
G01C 21/34 20060101ALI20230907BHJP
【FI】
G05D1/02 H
G01C21/34
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022033089
(22)【出願日】2022-03-04
(71)【出願人】
【識別番号】000001317
【氏名又は名称】株式会社熊谷組
(74)【代理人】
【識別番号】100141243
【弁理士】
【氏名又は名称】宮園 靖夫
(72)【発明者】
【氏名】冨樫 淳輝
【テーマコード(参考)】
2F129
5H301
【Fターム(参考)】
2F129AA06
2F129DD66
5H301AA02
5H301DD01
(57)【要約】
【課題】複数の移動対象領域を移動体に巡回させるための効率的な巡回ルートを作成可能な巡回ルート作成装置を提供する。
【解決手段】本発明に係る巡回ルート作成装置は、巡回ループ作成手段と、移動コスト算出手段と、巡回ルート作成手段とを備え、巡回ループ作成手段は、移動対象領域毎に巡回情報を設定することにより最初の巡回ループを作成する最初の巡回ループ作成手段と、最初の巡回ループの巡回情報を変更した巡回ループを作成する巡回ループ更新手段とを備え、巡回ルート作成手段は、今回の巡回ループに基づいて作成された今回の巡回ルート、及び、前回の巡回ループに基づいて作成された前回の巡回ルートのうち、どちらの巡回ルートを残すかを判定する判定手段を備え、巡回情報は、各移動対象領域毎に設定される自己の移動対象領域内の巡回パターンの情報と次に進む移動対象領域の情報とで構成された組み合わせ情報であることを特徴とする。
【選択図】
図33
【特許請求の範囲】
【請求項1】
複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを作成するための巡回ルート作成装置であって、
各移動対象領域を一巡する巡回ループを作成する巡回ループ作成手段と、
作成された巡回ループの経路を移動体で移動させる場合の移動コストを算出する移動コスト算出手段と、
作成された巡回ループを形成する移動対象領域間ルートのうち最も移動コストの大きい移動対象領域間ルートを削除して、削除した移動対象領域間ルートのルート終端が繋がれていた移動対象領域を巡回ルートのスタート領域とし、かつ、削除した移動対象領域間ルートのルート始端が繋がれていた移動対象領域を巡回ルートのゴール領域とした各移動対象領域を一巡する巡回ルートを作成する巡回ルート作成手段とを備え、
巡回ループ作成手段は、
移動対象領域毎に巡回情報を設定することにより最初の巡回ループを作成する最初の巡回ループ作成手段と、
最初の巡回ループの巡回情報を変更した巡回ループを作成する巡回ループ更新手段とを備え、
巡回ルート作成手段は、
巡回ループ更新手段により作成された今回の巡回ループに基づいて作成された今回の巡回ルート、及び、巡回ループ更新手段により作成された前回の巡回ループに基づいて作成された前回の巡回ルートのうち、どちらの巡回ルートを残すかを判定する判定手段を備え、
巡回情報は、各移動対象領域毎に設定される自己の移動対象領域内の巡回パターンの情報と次に進む移動対象領域の情報とで構成された組み合わせ情報であることを特徴とする巡回ルート作成装置。
【請求項2】
判定手段は、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも小さい場合には、今回の巡回ルートを残し、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも大きい場合には、所定の条件が成立した場合に、今回の巡回ルートを残し、所定の条件が成立しない場合には、前回の巡回ルートを残すことを特徴とする請求項1に記載の巡回ルート作成装置。
【請求項3】
所定の条件は、条件式、R≦exp(-ΔC/T)であることを特徴とする請求項2に記載の巡回ルート作成装置。
但し、
ΔC=|今回の巡回ルートの移動コスト-前回の巡回ルートの移動コスト|
T=温度
R=乱数
【請求項4】
巡回ループ作成手段は、巡回ループの移動対象領域間のルートを変更する移動対象領域間ルート改変処理手段を備え、
移動対象領域間ルート改変処理手段は、
巡回ループの各移動対象領域のうちから異なる任意の第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乃至請求項3のいずれか一項に記載の巡回ルート作成装置。
【請求項5】
巡回ループ作成手段は、巡回ループの移動対象領域内の巡回パターンを変更する巡回パターン改変処理手段を備え、
巡回パターン改変処理手段は、巡回ループの各移動対象領域から無作為に1つの移動対象領域を選んで、当該移動対象領域の巡回情報である巡回パターンの情報を変更することを特徴とする請求項1乃至請求項3のいずれか一項に記載の巡回ルート作成装置。
【請求項6】
巡回ループ作成手段は、巡回ループに対して、請求項4に記載した移動対象領域間ルート改変処理手段による改変処理と請求項5に記載した巡回パターン改変処理手段による改変処理とを交互に行うことによって、巡回ループを順次改変することを特徴とする巡回ルート作成装置。
【請求項7】
移動対象領域は、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乃至請求項6のいずれか一項に記載の巡回ルート作成装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数の移動対象領域を移動体に巡回させる巡回ルートを作成するための巡回ルート作成装置に関する。
【背景技術】
【0002】
本出願人による発明である移動体の移動制御システムとして、移動対象面(移動対象領域)上を移動させる移動体の移動予定情報(移動予定ルート)を作成する移動予定情報作成処理と、移動体を移動予定情報に基づいて移動させるとともに、移動情報取得手段により取得された移動体の実際の移動情報と移動予定情報とを比較して移動体の移動を制御する移動制御処理と、を備えた移動体の移動制御システムが開示されている(特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
上述した移動体の移動制御方法では、移動対象領域が複数ある場合において、移動体を当該複数の移動対象領域間で効率的に巡回させるための巡回ルートを作成することについては開示されておらず、当該巡回ルートを作成するための巡回ルート作成装置の開発が望まれているという課題があった。
本発明は、上記課題に鑑み、複数の移動対象領域を移動体に巡回させるための効率的な巡回ルートを作成可能な巡回ルート作成装置を提供するものである。
【課題を解決するための手段】
【0005】
本発明に係る巡回ルート作成装置は、複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを作成するための巡回ルート作成装置であって、各移動対象領域を一巡する巡回ループを作成する巡回ループ作成手段と、作成された巡回ループの経路を移動体で移動させる場合の移動コストを算出する移動コスト算出手段と、作成された巡回ループを形成する移動対象領域間ルートのうち最も移動コストの大きい移動対象領域間ルートを削除して、削除した移動対象領域間ルートのルート終端が繋がれていた移動対象領域を巡回ルートのスタート領域とし、かつ、削除した移動対象領域間ルートのルート始端が繋がれていた移動対象領域を巡回ルートのゴール領域とした各移動対象領域を一巡する巡回ルートを作成する巡回ルート作成手段とを備え、巡回ループ作成手段は、移動対象領域毎に巡回情報を設定することにより最初の巡回ループを作成する最初の巡回ループ作成手段と、最初の巡回ループの巡回情報を変更した巡回ループを作成する巡回ループ更新手段とを備え、巡回ルート作成手段は、巡回ループ更新手段により作成された今回の巡回ループに基づいて作成された今回の巡回ルート、及び、巡回ループ更新手段により作成された前回の巡回ループに基づいて作成された前回の巡回ルートのうち、どちらの巡回ルートを残すかを判定する判定手段を備え、巡回情報は、各移動対象領域毎に設定される自己の移動対象領域内の巡回パターンの情報と次に進む移動対象領域の情報とで構成された組み合わせ情報であることを特徴とする。
また、判定手段は、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも小さい場合には、今回の巡回ルートを残し、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも大きい場合には、所定の条件が成立した場合に、今回の巡回ルートを残し、所定の条件が成立しない場合には、前回の巡回ルートを残すことを特徴とする。
また、所定の条件は、条件式、R≦exp(-ΔC/T)であることを特徴とする。但し、ΔC=|今回の巡回ルートの移動コスト-前回の巡回ルートの移動コスト|、T=温度、R=乱数。
また、巡回ループ作成手段は、巡回ループの移動対象領域間のルートを変更する移動対象領域間ルート改変処理手段を備え、移動対象領域間ルート改変処理手段は、巡回ループの各移動対象領域のうちから異なる任意の第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】初期巡回ループ作成処理を示すフローチャート。
【
図35】初期温度設定処理、巡回ルートコスト計算処理、及び改変受入可否判定処理を示すフローチャート。
【
図36】エリア間ルートの改変処理、及び、巡回パターンの改変処理を示すフローチャート。
【
図44】初期巡回情報配列及び初期巡回ループを示す図。
【発明を実施するための形態】
【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】
実施形態
本発明の実施形態に係る巡回ルート作成装置は、複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを作成する巡回ルート作成装置であり、当該巡回ルート作成装置は、複数の移動対象領域の位置情報を認識して当該複数の移動対象領域を移動体に巡回させる巡回ルートを、焼きなまし法(「SA(Simulated Annealing)」)と呼ばれる手法のアルゴリズムを利用して作成する巡回ルート作成装置とした。
【0056】
尚、本発明において、複数の移動対象領域は、各自独立した複数の移動対象領域、あるいは、上述したような複数の分割領域等であり、以下、「移動対象領域」を「エリア」と呼称して説明する。
【0057】
実施形態に係る巡回ルート作成装置は、各エリアを一巡する巡回ループを作成する巡回ループ作成手段と、作成された巡回ループの経路を移動体で移動させる場合の移動コストを算出する移動コスト算出手段と、作成された巡回ループを形成するエリア間ルートのうち最も移動コストの大きいエリア間ルートを削除して、削除したエリア間ルートのルート終端が繋がれていたエリアを巡回ルートのスタート領域とし、かつ、削除したエリア間ルートのルート始端が繋がれていたエリアを巡回ルートのゴール領域とした各エリアを一巡する巡回ルートを作成する巡回ルート作成手段とを備える。
移動コスト算出手段は、巡回ループ作成手段により作成された巡回ループを移動体で移動させる場合の移動コストや、巡回ループ作成手段により作成された巡回ループにおいて前後のエリア間を繋ぐエリア間ルートを移動体で移動させる場合の移動コストや、巡回ルート作成手段により作成された巡回ルートを移動体で移動させる場合の移動コストを算出する。即ち、移動コスト算出手段は、巡回ループ、巡回ループの前後のエリア間を繋ぐエリア間ルート、移動コストが最も大きいエリア間ルートの移動コストを巡回ループの移動コストから除いた巡回ループ等の、巡回ループの経路の移動コストを算出する手段である。尚、移動コストは、上述した前提装置で説明した、直進距離の合計、旋回角度の合計、旋回回数を考慮した移動コストである。
巡回ループ作成手段は、エリア毎に後述する巡回情報を設定することにより巡回ループを作成するにあたって、巡回情報に基づいて最初の巡回ループを作成する最初の巡回ループ作成手段と、最初の巡回ループの巡回情報を変更した巡回ループを作成する巡回ループ更新手段とを備える。即ち、巡回ループ作成手段は、エリア毎に巡回情報を設定することにより巡回ループを作成する手段であって、エリア毎に巡回情報を設定することにより巡回ループを作成するとともに、作成した巡回ループの巡回情報を変更した巡回ループを作成する処理を繰り返す構成とした。
巡回ルート作成手段は、巡回ループ更新手段により作成された今回の巡回ループに基づいて作成した今回の巡回ルート、及び、巡回ループ更新手段により作成された前回の巡回ループに基づいて作成された前回の巡回ルートのうち、どちらの巡回ルートを残すかを判定する判定手段を備える。
当該判定手段は、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも小さい場合には、今回の巡回ルートを残し、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも大きい場合には、所定の条件が成立した場合に、今回の巡回ルートを残し、所定の条件が成立しない場合には、前回の巡回ルートを残す処理を実行する構成とした。そして、最終的に残った巡回ルートが、SA処理により求められた巡回ルートとなる。
【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】
巡回情報は、例えば
図45に示すような、各エリア毎に設定される自己のエリア内の巡回パターンの情報と次に進むエリアの情報とで構成された組み合わせ情報である。
図45に示した例では、エリア1の巡回情報は、「2-M」であり、この「M」がエリア1(自己)のエリア内の巡回パターンの情報であり、「2」が次に進むエリアの情報である。つまり、当該エリア1の巡回情報によって、エリア1内の巡回パターンは、Mパターン(第7パターン)が設定され、エリア1の次に進むエリアが2であるので、エリア1の巡回パターンであるMパターンの終点(出口)とエリア2の巡回パターンであるZパターンの始点(入口)とを結ぶルートがエリア間ルートとして設定されることになる。
【0061】
つまり、巡回ループは、巡回情報に基づいて作成され、巡回ループのエリア間ルートのうち最も移動コストの大きいエリア間ルートが削除されて巡回ルートが作成され、判定手段が当該巡回ルートを残すか否かを判定する。
【0062】
実施形態に係る巡回ルート作成装置による巡回ルート作成処理、即ち、SAを利用した巡回ルート作成処理(以下、SA処理という)の流れの概略を
図33に示す。
即ち、SA処理では、初期巡回ループ作成処理(ステップS301)、初期温度設定処理(ステップS302)、巡回ルートコスト計算処理(ステップS303)、改変受入可否判定処理(ステップS304)、改変処理(ステップS305,ステップS306,ステップS307,ステップS308,ステップS309)を実行する。
つまり、SA処理においては、上述した各処理(初期巡回ループ作成処理、初期温度設定処理、巡回ルートコスト計算処理、改変受入可否判定処理、改変処理)の手順を示す処理プログラムと、当該処理プログラムによる情報処理を実現するコンピュータとにより、これら各処理が実行される。
即ち、上述した最初の巡回ループ作成手段が初期巡回ループ作成処理及び初期温度設定処理を実行し、巡回ループ更新手段が改変処理を実行し、移動コスト算出手段が巡回ルートコスト計算処理を実行し、判定手段が改変受入可否判定処理を実行する。
【0063】
SA処理の流れを
図33のフローチャートに基づいて簡単に説明すると、以下のようになる。
まず、初期巡回ループ作成処理(ステップS301)により初期巡回ループ(最初の巡回ループ)が作成される。また、初期温度設定処理(ステップS302)に初期温度(例えば1500℃)が設定される。尚、最初のステップS303においては、初期巡回ループに基づいて作成された初期巡回ルートの移動コストが算出されて記録手段に記録される。その後、ステップS304~ステップS306の処理が行われずに、ステップS307の処理が行われて、初期巡回ループが更新された巡回ループが作成される。
そして、当該更新された巡回ループに基づいて巡回ルートが作成され、当該巡回ルートの移動コストが巡回ルートコスト計算処理(ステップS303)にて算出されて記録手段に記録される。
以後、ステップS304,ステップS305,ステップS306,ステップS307,ステップS303、又は、ステップS304,ステップS305,ステップS306,ステップS308,ステップS309,ステップS303の処理が行われる。
即ち、巡回ループ作成手段及び巡回ルート作成手段により、順次、巡回ループが更新されて、巡回ルートが更新され、巡回ルートが更新される毎に、当該巡回ルートの移動コストが算出されて記録手段に記録され、改変受入可否判定処理により、今回の巡回ルート、及び、前回の巡回ルートのうち、どちらの巡回ルートを残すかが判定される。
尚、上述した判定手段により実行される改変受入可否判定処理は、移動コスト算出手段により算出された今回及び前回の巡回ルートの移動コストを解として比較することによって、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも小さい場合には、今回の巡回ルートを記録として残し、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも大きい場合には、所定の条件式、例えば、R≦exp(-ΔC/T)が成立した場合に、今回の巡回ルートを記録として残し、R≦exp(-ΔC/T)が成立しない場合には、前回の巡回ルートを記録として残す処理である。
但し、ΔC=|今回の巡回ルートの移動コスト-前回の巡回ルートの移動コスト|、T=温度、R=乱数である。
当該改変受入可否判定処理(ステップS304)の終了後、ステップS305に進んで、温度判定処理が行われる。即ち、温度Tが0℃か否かが判定される。温度が0℃でなければ、前回の改変はエリア間ルートの入れ替えだったか否かが判定される(ステップS306)。
前回の改変がエリア間ルートの入れ替えではなかった場合(ステップS306でNo)には、無作為に選ばれた2本のエリア間ルートを入れ替える改変処理(ステップS307)が行なわれる。
前回の改変がエリア間ルートの入れ替えだった場合(ステップS306でYes)には、温度を低下させた(ステップS308)の後、無作為に選ばれたエリア内の巡回パターンを無作為に変更する改変処理(ステップS309)が行われる。
以上の処理を、ステップS305において温度が0℃であると判定されるまで繰り返して、最終的に、記録手段に記録されている最も移動コストの小さい巡回ルート(即ち、最適巡回情報配列Gbest[1~amax][1~2]に基づく巡回ルート)が、SAによって探索された巡回ルートとして決定される。
以下、初期巡回ループ作成処理、初期温度設定処理、巡回ルートコスト計算処理、改変受入可否判定処理、改変処理の内容を詳細に説明する。
【0064】
まず、コンピュータが、初期巡回ループ作成処理プログラムの手順に従って、
図34のフローチャートに示すような、初期巡回ループ作成処理(phase1)を行う。
まず、エリア番号管理変数aの初期化処理とエリア個数情報amaxの取得処理を行う(ステップS311)。つまり、エリア番号管理変数aを1に設定するとともに、エリア個数情報amaxをエリアの個数に設定する(例えば、上述した前提技術の場合(
図12の複数の分割領域の場合)、個数情報amaxは「14」に設定され、後述する
図44(b)の場合、エリア個数情報amaxは「6」に設定される)。
そして、巡回情報配列G[1~amax][1~2]を初期化して、空にする(ステップS312)。
次に、G[a][1]をa+1に設定して(ステップS313)、G[a][2]にZパターンを設定し(ステップS314)、aをa+1に設定した(ステップS315)後、aの値がamaxと等しくなったか否かを判定する(ステップS316)。
そして、ステップS316でNoの場合は、ステップS313に戻る。
ステップS326でYesの場合は、ステップS318に進んで、G[amax][1]を「1」に設定し、ステップS319に進んで、G[amax][2]を「Z」に設定する。つまり、最後のエリアから次に進むエリアを1に設定し(ステップS318)、さらに最後のエリアの巡回パターンとしてZパターンを設定する(ステップS319)。
【0065】
尚、巡回情報配列G[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]というアドレスに記録された情報群、即ち、
図44(a)、
図45に示すような巡回情報の組み合わせのことであり、当該巡回情報配列により、巡回ループが形成される。
例えば、エリアの個数が6個の場合、phase1で設定された巡回情報配列Gに基づく巡回情報配列は、
図44(a)に示すような初期巡回情報配列になる。
つまり、
図44(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」が設定される。
当該初期巡回情報配列に基づいて作成される初期巡回ループは、
図44(b)に示すような初期巡回ループになる。
尚、
図44(b)において、pは巡回パターン、rはエリア間ルートである。
【0066】
次に、コンピュータが、初期温度設定処理プログラム、巡回ルートコスト計算処理プログラム、及び、改変受入可否判定処理プログラムの手順に従って、
図35のフローチャートに示すような、初期温度設定処理、巡回ルートコスト計算処理、及び、改変受入可否判定処理(phase2)を行う。
まず、初期化作業を行う(ステップS320,ステップS321)。
即ち、ステップS320において、比較用コスト変数C2を「0」、最適コスト保存変数Cbestを「0」に設定し、初期温度設定処理として初期温度Tを「1500℃」に設定する。
また、巡回情報コピー配列の初期化、即ち、Gcopy[1~amax][1~2]を[0,0,0,・・・]にする。また、最適巡回情報配列の初期化、即ち、Gbest[1~amax][1~2]を[0,0,0,・・・]にする。また、走行開始エリア番号記録変数の初期化、即ち、Sを0にする。
次に、ステップS321において、コスト変数C1を「0」、エリア番号管理変数aを「1」、エリア一周探索済みフラグfを「0」、最大エリア間移動コスト保存変数Cmaxを「0」に設定する。
次に、エリア一周探索済みフラグが立っている(f=1)か否かを判定する(ステップS322)。
エリア一周探索済みフラグが立っていなければ(ステップS322でNo)、ステップS323に進んで、a番目のエリアでのG[a][2]パターン時の移動コストをデータベースよりダウンロードして、コスト変数C1に加算する。尚、各エリアでの各巡回パターン(8種類の巡回パターン)時の移動コストは事前に計算されて、データベースに保存されている。その後、ステップS324に進んで、巡回情報配列G[a][1]が1番目のエリアを指示しているか否かを判定する。ここで、次に進むエリアを示す巡回情報配列G[a][1]が「1」(つまり、処理を開始したエリア番号)ということは、探索領域を一周したということになるので、ステップS324でYesの場合は、ステップS325に進んで、エリア一周探索済みフラグを立てる(f=1)。
次に、ステップS326に進んで、a番目のエリア(現在のエリア)から1番目のエリアへ障害物に接触せずに直線で移動できるか否かを判定する。
また、ステップS324でNoの場合は、ステップS327に進んで、a番目のエリア(現在のエリア)からG[a][1]番目のエリア(次に進むエリア)へ障害物に接触せずに直線で移動できるか否かを判定する。
ステップS327でYesの場合は、a番目のエリアのゴール地点からG[a][1]番目のエリアのスタート地点へ直線で移動した場合の移動コストCtravelを計算した(ステップS329)後、ステップS330に進んで、Ctravel>Cmax(最大エリア間移動コスト保存変数)か否かを判定する。
また、ステップS326でYesの場合は、ステップS329に進んで、移動コストCtravelを計算した後、ステップS330に進む。
また、ステップS326でNoの場合、ステップS327でNoの場合、即ち、直線移動できない場合は、ステップS328に進んで、a番目のエリアのゴール地点からG[a][1]番目のエリアのスタート地点への経路(エリア間ルート)を、経路探索アルゴリズム(例えば上述したA*アルゴリズム等)を用いて探索し、その探索した経路(エリア間ルート)の移動コストCtravelを計算した後、ステップS330に進む。
ステップS330でNoの場合、そのまま、a番目のエリアのゴール地点からG[a][1]番目のエリアのスタート地点への移動コストCtravelをコスト変数C1に加算する(ステップS332)。
ステップS330でYesの場合、つまり、CtravelがCmaxよりも大きい場合、当該Ctravelを新しいCmaxに設定し(ステップS331)、その後、ステップS332に進んで、今回の移動コストCtravelをコスト変数C1に加算する。
ステップS332の後は、ステップS333に進んで、aをG[a][1]のエリア番号(次に進むエリアの番号)に設定した後に、ステップS322に戻る。
ステップS322において、エリア一周探索済みフラグが立っていると判定されたならば(ステップS322でYes)、巡回ループが作成されたことが確認されたことになり、この場合、ステップS334に進んで、C1-CmaxをコストC1に設定する。つまり、各エリア間の移動コストの内もっとも高いもの除外したコストをコストC1とする。即ち、現在の巡回情報配列(巡回ループ)に基づいて作成した巡回ルートの移動コストの総和C1が求まる。
以上のように、巡回ルートコスト計算処理が行われ、以後、改変受入処理に移行する。
つまり、ステップS322において、巡回ループが作成されたか否かが判定され、巡回ループが作成されている場合には、ステップS334において、巡回ループのエリア間ルートのうち最も移動コストの大きいエリア間ルートが削除されて巡回ルートが作成されることになる。
尚、ステップS334での右側の「C1」は巡回ループの移動コストであり、ステップS334での左側の「C1」は巡回ルートの移動コストとなる。
即ち、SAの
図34の処理においては、最初に、
図44に示すような、1つの巡回情報配列(巡回ループの情報)を決め、後述するGAの
図48の処理においては、最初に、
図44に示すような、複数(例えば20個)の巡回情報配列(巡回ループの情報)を決めているだけで、これらの処理ではまだ巡回ルートの情報が求まっていない。
そして、SAにおいては、
図35の処理にて、逐次、巡回ルートの情報(巡回ルート)が求まる。つまり、
図35の処理にて求まる情報である、最適巡回情報配列Gbest[1~amax][1~2]、最大エリア間移動コストCmax、走行開始エリア番号Sによって、巡回ルートが決まり、当該巡回ルートを画面上の地図に表示させることが可能となる。また、当該巡回ルートのコストCbestも画面上に表示させることが可能となる。
そして、
図35のステップS343にて温度Tが0℃になり、ステップS344にて、SAにより求まった最終の巡回ルートの情報、即ち、最適巡回情報配列Gbest[1~amax][1~2]に記録されているルート情報と、このルート情報を基に移動したときのエリア間ルートの軌跡情報と、Sに記録されている走行開始エリア番号をファイルに保存する。このファイルに保存された内容が、SAにより求まった最終の巡回ルートであり、この巡回ルートの情報と巡回ルートの移動コストCbestとが表示画面D上に表示されることにより、使用者は、SAにより求まった最終の巡回ルートを確認できる。
【0067】
改変受入可否判定処理では、まず、最適コスト保存変数Cbestが初期化状態か否か、もしくはC1<Cbestか否かを判定する(ステップS335)。
ステップS335でYesの場合は、現状において今回のコストC1が最小のコストであるということなので、ステップS336に進んで、今回のコストC1をCbestに設定するとともに、今回の巡回情報配列G[1~amax][1~2]に基づいて作成された巡回ルートを最適コスト保存変数Cbest[1~amax][1~2]に設定する。その後、ステップS337に進んで、比較用コスト変数C2が初期化状態「0」でなく、かつ、C1>C2か否かを判定する。
ステップS335でNoの場合は、現状において初期化状態ではない現状のCbestが最小のコストであるということなので、ステップS337に進む。
ステップS337は、改変を受け入れるか否かの第1判定ステップである。ステップS337において、初期巡回ルートの判定時は、比較用コスト変数C2が初期化状態であるから、ステップS340に進んで、改変を受け入れて、比較用コスト変数C2のコストをコストC1のコストに設定する。
初期巡回ルートの判定時以外において、ステップS337でYesの場合は、今回のコストC1が、比較用コスト変数C2(即ち、前回改変時のコストC1)よりも大きいということなので、今回のコストC1を受け入れた場合の改変は改悪となるが、当該改悪であっても所定の条件を満たす場合は受け入れる処理(ステップS338,339,340)を行う。
即ち、ステップS337でYesの場合は、ステップS338に進んで、乱数Rを生成するとともに、コスト差ΔC、即ち、C1-C2を計算する。そして、ステップS339に進んで、R≦exp(-ΔC/T)か否かを判定する。
つまり、ステップS339は、改悪の場合に、この改悪を改変として受け入れるか否かを判定する第2判定ステップである。
即ち、ステップS339でYesの場合は、ステップS340に進んで当該改悪を改変として受け入れるが、ステップS339でNoの場合は、ステップS341に進んで当該改悪を改変として受け入れずに、前回の巡回情報コピー配列Gcopy[1~amax][1~2]を巡回情報配列G[1~amax][1~2]として設定する。
ステップS339においては、焼きなまし法の温度Tが高温であるほど、あるいは、ΔCが小さい程(改悪度合いが小さい程)、右辺exp(-ΔC/T)の値が大きくなり、ステップS339でNoになる確率が高まるので、改悪を改変として受け入れる確率が高まる。
ステップS337でNoの場合は、C1≦C2であり、改変は改良なので、ステップS340に進んで、当該改変を受け入れる。
ステップS340の後は、ステップS342に進んで、現在の状態をコピーする。即ち、今回の巡回情報配列G[1~amax][1~2]を巡回情報コピー配列Gcopy[1~amax][1~2]にコピーする。
つまり、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも大きい場合には、R≦exp(-ΔC/T)が成立した場合に、今回の巡回ルートを記録として残し(ステップS342)、R≦exp(-ΔC/T)が成立しない場合には、前回の巡回ルートを記録として残すようにしている(ステップS341)。
その後、ステップS343に進んで、温度T=0か否かを判定し、温度T=0でなければ、ステップS345に進んで、直近(前回)の改変は、エリア間ルート、巡回パターンのうち、どちらに対して行われたかを判定する。
ステップS345の判定において、直近の改変が、エリア間ルートに対して行われたと判定された場合、ステップS346に進んで、温度Tを例えば1℃低下させる処理、即ち、温度TをT-1に設定(即ち、温度を1℃下げる)した後、巡回パターンの改変処理(phase3-2)に進む。
ステップS345の判定において、直近の改変が、巡回パターンに対して行われたと判定された場合、又は、初回の処理であると判定された場合は、エリア間ルートの改変処理(phase3-1)に進む。
以上のように、改変受入可否判定処理が行われ、以後、改変処理(phase3(phase3-1,phase3-2))に移行する。
【0068】
尚、ステップS343で温度T=0であると判定された場合は、ステップS344に進んで、Cbestを記録した巡回ルートの情報、即ち、Gbestに記録されているルート情報と、この情報を基に移動したときのエリア間ルートの軌跡情報と、Sに記録されている走行開始エリア番号とをファイルに保存する。つまり、Cbestを持つ巡回ルートが最終結果、即ち、当該SAによる処理で求められた最適な巡回ルートとして決定される。
即ち、温度Tが0になった場合に、最終的に残っているCbestを持つ巡回ルートが、当該SAにて求められた巡回ルートとして決定される。
【0069】
次に、改変受入可否判定処理に用いたSA(焼きなまし法)について概説する。
例えば、
図43(a)に示すようなグラフの最大値を求めたいとする。まず解の候補をランダムに一か所選ぶ。次に解の候補の近傍をランダムに探索する。この場合、横軸の右方向を探索すれば解が改善する。よって、
図43(b)に示すように、解の候補が右に移動することは許容される。一方、左方向を探索すると解が改悪される。よって、左方向に移動することは原則としては許容されない。しかしながら、この場合、解は、
図43(a)に示す局所解にとどまり、最適解にたどり着けないこととなる。そこで改悪される場合でも一定の確率でその結果を受け入れることとする手法が焼きなまし法である。
改悪された解を受け入れる確率はアルゴリズム上で設定された温度Tの高さによって決定される。即ち、温度Tが高温であれば高確率で改悪が許容され、逆に低温時では改悪が許容されにくくなる(
図43(c)参照)。つまり、高温時であれば局所解に留まることなく大域的に解を探索できる可能性が高くなる。温度と改悪が許容される確率の関係は、上述した計算式、exp(-ΔC/T)で決められることが多い。温度は初期状態においては高く設定され、探索が進むごとに徐々に下げられる。初期温度をどの程度にするか、また、どの様なペースで温度を下げるのかについては、問題に応じて決められる。このように、温度という概念を導入して局所解に陥らないようにした手法がSAである。
【0070】
次に、コンピュータが改変処理プログラムの手順に従って、
図36のフローチャートに示すような、改変処理(phase3)を行う。
まず、
図36(a)のフローチャートに示す、エリア間ルートの改変処理(phase3-1)について説明する。
上述したステップS345の判定において、直近の改変が、巡回パターンに対して行われたと判定された場合は、ステップS342での巡回情報配列G[1~amax][1~2]を引き継ぐ(ステップS350)。
次に、エリア番号1~amaxの中から値を無作為に1つ選んで、P1に代入する(ステップS351)とともに、エリア番号1~amaxの中から値を無作為に1つ選んで、P2に代入する(ステップS352)。
その後、ステップS353に進んで、P1とP2とが同じか否か、G[P2][1]とP1とが同じか否か、G[P1][1]とP2とが同じか否かを判定する。
ここで、G[P2][1]、G[P1][1]について説明する。ステップS350において、例えば
図45に示す巡回情報配列を引き継いだとする。この場合、当該巡回情報配列に基づいて、
図37(a)に示すような巡回ループが作成される。そして、ステップS351において、P1としてエリア番号2が選択されたとする。
この場合、P1を選択したことにより決まる次のエリア番号G[P1][1]が5となり、エリア番号2の巡回パターンは、「Z」となる。
つまり、P1,P2は、入れ替え処理が行われるエリア番号が入る変数、G[P1][1],G[P2][1]はP1番目又はP2番目のエリアから次に向かうエリアの番号が入っている変数(配列)、G[P1][2],G[P2][2]はP1番目又はP2番目のエリアの巡回パターンが入っている変数(配列)である。また、Ptmpは入れ替え処理の最後に使われる値を保持しておく変数、mは処理ループを脱出するためのフラグ兼エリア番号の一時保持変数である。
そして、ステップS353でYesの場合は、無作為に選んだエリア番号が同じだったり、無作為に選んだエリア番号とそのエリア番号から次に向かうエリア番号とが同じあるので、ステップS352に戻って、P2を選び直す。
ステップS353でNoの場合は、ステップS354に進んで、PtmpをG[P2][1]に設定する。
次に、ステップS355に進んで、G[1~amax][1]=P2となるようなエリア番号aを探索し、このようなエリア番号aを発見できたか否かを判定する。つまり、巡回情報において、次に進むエリアとしてP2のエリア番号が設定されているエリアがまだ残っているか否かを判定する。
ステップS355でNoの場合は、mを-1に設定する(ステップS356)。
ステップS355でYesの場合は、mをaに設定する(ステップS357)。つまり、P2に代入されているエリアを次の移動先としている別のエリアが存在していれば、その別のエリアの番号aをmに代入する。
ステップS356の後、又は、ステップS357の後は、ステップS358に進んで、G[P1][1]をP2に設定する。
そして、ステップS359に進んで、直前のステップS358の処理を行ったのは初めてか(1回目か)否かを判定する(ステップS359)。
ステップS359でYesの場合、即ち、S358の処理を行うのが初めてである場合、ステップS361に進んで、m=-1か否かを判定する。
ステップS359でNoの場合、即ち、S358の処理を行うのが初めてではない場合、G[P2][1]に設定されている巡回パターンを逆転させ(ステップS360)、その後、ステップS361に進む。
ステップS361でNoの場合、ステップS362に進んで、P1をP2に設定するとともに、P2をmに設定した後、ステップS355に戻る。
ステップS361でYesの場合、ステップS363に進んで、G[P2][1]をPtmpに設定した後、ステップS364に進んで、G[P2][2]に設定されている巡回パターンを逆転させ、その後、phase2のステップS380に進む。
【0071】
次に、
図36(b)のフローチャートに示す、巡回パターンの改変処理(phase3-2)について説明する。
ステップS345の判定において、温度Tが0ではないと判定された場合は、ステップS342での巡回情報配列G[1~amax][1~2]を引き継ぐ(ステップS370)。
次に、エリア番号1~amaxの中から値を無作為に1つ選んで、Pに代入する(ステップS371)とともに、G[P][2]に既存の巡回パターン以外の巡回パターンの何れかを無作為に代入し(ステップS370)、その後、phase2のステップS380に進む。つまり、既にG[P][2]に設定されている巡回パターンと同じ巡回パターンが無作為に選択された場合は、異なる巡回パターンが出るまで無作為に選び直される。
【0072】
換言すれば、巡回ループ作成手段は、巡回ループのエリア内の巡回パターンを変更する巡回パターン改変処理を実行する巡回パターン改変処理手段を備え、当該巡回パターン改変処理手段は、巡回ループの各エリアから無作為に1つのエリアを選んで、当該エリアの巡回情報である巡回パターンの情報を変更する手段である。
【0073】
そして、エリア間ルートの改変処理後、又は、巡回パターンの改変処理後、即ち、ステップS364の後、又は、ステップS372の後は、phase2のステップS380に進む。
phase2のステップS380では、巡回情報配列G[1~amax][1~2]をphase3から引き継ぐ。その後、ステップS321に進む。
【0074】
次に、
図36(a)に示したエリア間ルートの改変処理(phase3-1)について、
図37~
図42に基づいてより具体的に説明する。
例えば、
図45に示した巡回情報配列に基づいて
図37(a)に示すような巡回ルートが前回の巡回ルートとして作成されて、引き継がれたとする(ステップS350)。
そして、ステップS351で、入れ替え処理が行われるエリア番号として「2」が選択されてP1に代入されたとする。この場合、
図37(a)に示すように、変数の状態は、G[P1][1](エリア2から次に進むエリア)は「5」、G[P1][2](エリア2内の巡回パターン)は「Z」である(
図45参照)。
次に、ステップS352で、入れ替え処理が行われるエリア番号として「3」が選択されてP2に代入されたとする。この場合、
図37(b)に示すように、変数の状態は、G[P2][1](エリア3から次に進むエリア)は「6」、G[P2][2](エリア3内の巡回パターン)は「S」である(
図45参照)。
次に、ステップS354で、Ptmpに、P2であるエリア3の行先エリアG[P2][1]として6を設定する。つまり、Ptmpを「6」にする(
図37(c)参照)。
そして、ステップS355で、変数P2が示すエリアを移動先としているエリアが存在しているか検索する。存在していたらそのエリア番号をmに入れる(ステップS357)。この場合、変数P2が示すエリア3を移動先としているエリアはエリア4が存在する(
図45参照)ので、mを「4」にする(
図38(a)参照)。
次に、ステップS358で、P1「エリア2」の行先エリアG[P1][1]をP2にする。この場合、
図38(b)に示すように、G[P1][1]が「3」に設定される。この場合、P1が「2」、G[P1][1]が「3」なので、エリア2とエリア5とを繋ぐエリア間ルートが解除され、その代わりに、エリア2の終点とエリア3の始点とがエリア間ルートで繋がれる(
図38(b)参照)。
次に、ステップS359に進み、ステップS358の処理は初めてなので、ステップS361に進む。この場合、m=4であり、-1ではないので、ステップS362に進む(
図38(c)参照)。
ステップS362では、P1をP2に設定するとともに、P2をmに設定する。この場合、
図39(a)に示すように、P1に「3」が設定され、P2に「4」が設定される。
その後、ステップS355に戻って、変数P2が示すエリアを移動先としているエリアが存在しているか検索する。存在していたらそのエリア番号をmに入れる(ステップS357)。この場合、変数P2が示すエリア4を移動先としているエリアはエリア5が存在する(
図45参照)ので、mを「5」にする(
図39(b)参照)。
そして、ステップS358に進み、P1「エリア2」の行先エリアG[P1][1]をP2にする。この場合、
図39(c)に示すように、G[P1][1]が「4」に設定される。この場合、P1が「3」、G[P1][1]が「4」なので、エリア3とエリア5とを繋ぐエリア間ルートが解除され、その代わりに、エリア3の終点とエリア4の始点とがエリア間ルートで繋がれる(
図39(c)参照)。
その後、ステップS359に進み、ステップS358の処理は初めてではないので、ステップS360に進む。この場合、P1であるエリア3の巡回パターンを反転する。つまり、
図40(a)に示すように、エリア3の巡回パターンが、「S」パターン(
図39(c)参照)から「S’」パターンに変換される(
図40(a)参照)。この場合、P1が「3」、G[P1][1]が「4」なので、巡回パターンが変更したエリア3の終点とエリア4の始点とがエリア間ルートで繋ぎ直される。また、P2が「4」、G[P2][1]が「3」なので、エリア4の終点と巡回パターンが変更したエリア3の始点とがエリア間ルートで繋ぎ直される。また、巡回パターンが変更したエリア3の始点とエリア2の終点とがエリア間ルートで繋ぎ直される。
その後、ステップS361に進む。この場合、m=5であり、ステップS362に進む。
ステップS362では、P1をP2に設定するとともに、P2をmに設定する。この場合、
図40(b)に示すように、P1に「4」が設定され、P2に「5」が設定される。
その後、ステップS355に戻って、変数P2が示すエリアを移動先としているエリアが存在しているか検索する。存在していたらそのエリア番号をmに入れる(ステップS357)。この場合、
図40(c)に示すように、変数P2が示すエリア5を移動先としているエリアは存在しない(
図38(b)において、エリア2とエリア2の行先であったエリア5とのエリア間ルートは既に解除されている)ので、ステップS356に進んで、mが-1に設定される。
そして、ステップS358に進んで、P1「エリア4」の行先エリアG[P1][1]をP2にする。この場合、
図41(a)に示すように、G[P1][1]が「5」に設定される。この場合、P1が「4」、G[P1][1]が「5」なので、エリア4とエリア3とを繋ぐエリア間ルートが解除され、その代わりに、エリア4の終点とエリア5の始点とがエリア間ルートで繋がれる(
図41(a)参照)。
その後、ステップS359に進み、ステップS358の処理は初めてではないので、ステップS360に進む。この場合、P1であるエリア4の巡回パターンを反転する。つまり、
図41(b)に示すように、エリア4の巡回パターンが「M」パターン(
図41(a)参照)から「M’」パターンに変換される(
図41(b)参照)。この場合、P1が「4」、G[P1][1]が「5」なので、巡回パターンが変更したエリア4の終点とエリア5の始点とがエリア間ルートで繋ぎ直される。また、P2が「5」、G[P2][1]が「4」なので、エリア5の終点と巡回パターンが変更したエリア4の始点とがエリア間ルートで繋ぎ直される。また、エリア3の終点とエリア4の始点とがエリア間ルートで繋ぎ直される。
その後、ステップS361に進む。この場合、m=-1であり、ステップS363に進む。
ステップS363では、G[P2][1]をPtmpに設定する。この場合、
図41(c)に示すように、G[P2][1]が6に設定され、P2=5なので、エリア5の行先がエリア6に変更されて、エリア5の終点とエリア6の始点とがエリア間ルートで繋がれる。
そして、最後に、ステップS364に進み、ステップS364では、G[P2][2]の巡回パターンを逆転させる。この場合、
図42に示すように、G[P2][2](=エリア5の巡回パターン)が「Z」パターン(
図41(c)参照)から「Z’」パターンに変換される。この場合、P1が「4」、G[P1][1]が「5」なので、エリア4の終点と巡回パターンが変更したエリア5の始点とがエリア間ルートで繋がれる。また、P2が「5」、G[P2][1]が「6」なので、巡回パターンが変更したエリア5の終点とエリア6の始点とがエリア間ルートで繋がれる。
以上により、
図42に示すような、全エリアをループする巡回ループが作成される。
その後、phase2のステップS380に進み、ステップS334で最も移動コストが高いエリア間ルートを削除した巡回ルートが作成されることになる。
【0075】
改変処理(phase3)の内容を、
図46に基づいて要約すると以下のようになる。
図46(a)に示すように、1回目にランダムに選ばれたエリア(P1に設定されたエリア)が2、2回目にランダムに選ばれたエリア(P2に設定されたエリア)が3であったとする。この場合、入れ替え対象となるエリア間ルートは、それぞれのエリアから次のエリアに向かっているエリア間ルートになる。即ち、エリア2からエリア5に向かうエリア間ルート、及び、エリア3からエリア6に向かうエリア間ルートとなる。
そして、
図46(b)に示すように、1回目に選ばれたエリア2の行先を2回目に選んばれたエリア3に変更する。つまり、エリア2の行先をエリア5からエリア3に変更する。これにより、エリア2とエリア3とがエリア間ルートで繋がれて、エリア2とエリア5とを繋いでいたエリア間ルートが消滅する。
次に、
図46(c)に示すように、1回目に選んだエリア2の元々の行先であるエリア5から2回目に選んだエリア3へと至る道中のエリア5,4,3の巡回パターン及びエリア間ルートを反転させる。このとき、一つのエリアの行先エリアは1つしか指定できないために、2回目に選ばれたエリア3から次のエリア6へと向かう元々のエリア間ルートは消滅する。
最後に、
図46(d)に示すように、1回目に選んだエリア2の元々の行先のエリア5から2回目に選んだエリア3の元々の行先エリア6へ向かうルートを設定して処理が終了する。
【0076】
即ち、エリア間ルート改変処理(phase3-1)の内容を要約すると、1回目に選ばれたエリア(P1に設定されたエリア)から次のエリアへ向かうエリア間ルート、及び、2回目に選ばれたエリア(P2に設定されたエリア)から次のエリアへ向かうエリア間ルートを、入れ替え対象のエリア間ルートとする処理ステップと、1回目に選ばれたエリアの行先を2回目に選ばれたエリアに変更するとともに、1回目に選ばれたエリアと当該エリアの元々の行先であったエリアとを繋いでいたエリア間ルートを消滅させる処理ステップと、1回目に選んだエリアの元々の行先であるエリアから2回目に選んだエリアへと至る道中のエリアの巡回パターン及びエリア間ルートを反転させるとともに、2回目に選ばれたエリアと当該エリアの元々の行先であったエリアとを繋いでいたエリア間ルートを消滅させる処理ステップと、1回目に選んだエリアの元々の行先のエリアから2回目に選んだエリアの元々の行先のエリアへと向かうルートを設定する処理ステップとを備えた処理である。
換言すれば、巡回ループ作成手段は、巡回ループのエリア間ルートを変更するエリア間ルート改変処理(phase3-1)を実行するエリア間ルート改変処理手段を備え、当該エリア間ルート改変処理手段は、巡回ループの各エリアのうちから異なる任意の第1のエリアP1と第2のエリアP2とを任意に選択する第1ステップ(ステップS351,ステップS352)と、第2のエリアP2の巡回情報として設定されている次に進むエリアの情報を保留情報Ptmpとして記録しておく第2ステップ(ステップS354)と、第2のエリアP2の巡回情報として設定されている次に進むエリアの情報を巡回情報として持っているエリアを探索して当該エリアの有無を判定する第3ステップ(ステップS355)と、第1のエリアP1の巡回情報に設定する次に進むエリアの情報として、第2のエリアP2を設定する第4ステップ(ステップS358)と、当該第4ステップの処理が初めてではない(1回目ではない)場合に、第2のエリアP2の巡回情報に設定されている巡回パターンを反転させる第5ステップ(ステップS360)と、第3ステップでの判定結果が有(m=a)であった場合(ステップS361でNo)、第4ステップの後、又は、第5ステップの後において、第1のエリアP1を第2のエリアP2に変更するとともに、第2のエリアを第3ステップで探索されたエリアに変更した後に、第3ステップの処理に戻る第6ステップ(ステップS362)と、第3ステップでの判定結果が無(m=-1)であった場合(ステップS361でYes)、第4ステップの後、又は、第5ステップの後において、保留情報Ptmpを第2のエリアP2の巡回情報としての次に進むエリアとして設定するとともに、第2のエリアP2の巡回情報に設定されている巡回パターンを反転させる第7ステップ(ステップS363,ステップS364)とを実行する構成としたものである。
【0077】
以上説明したように、実施形態に係る巡回ルート作成装置によれば、巡回情報を用いて、巡回ルートを更新するようにしたので、複数のエリアを移動体に巡回させるための効率的な巡回ルートを作成できるようになった。
また、巡回ループに対して、エリア間ルート改変処理手段による改変処理を行うことにより、改変(更新)される巡回ループに多様性を持たせることができるようになり、効率的な巡回ルートを作成できるようになった。
また、巡回ループに対して、巡回パターン改変処理手段による改変処理を行うことにより、改変(更新)される巡回ループに多様性を持たせることができるようになり、効率的な巡回ルートを作成できるようになった。
また、巡回ループに対して、エリア間ルート改変処理手段による改変処理と巡回パターン改変処理手段による改変処理とを交互に行うようにしたので、改変(更新)される巡回ループにより多様性を持たせることができるようになり、より効率的な巡回ルートを作成できるようになった。
【0078】
また、初期温度Tの設定や温度低下量の設定を変更することにより、巡回ルートを得るまでに要する時間を短縮したい、あるいは、より効率的な巡回ルートを得たい等の要望に合わせた巡回ルート作成処理を実現可能な巡回ルート作成装置を提供できる。
【0079】
また、実施形態においては、巡回ループ更新手段により作成された今回の巡回ループに基づいて作成された今回の巡回ルート、及び、巡回ループ更新手段により作成された前回の巡回ループに基づいて作成された前回の巡回ルートのうち、どちらの巡回ルートを残すかを判定する判定手段として、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも小さい場合には、今回の巡回ルートを残し、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも大きい場合には、所定の条件である、R≦exp(-ΔC/T)が成立した場合に、今回の巡回ルートを残し、所定の条件が成立しない場合には、前回の巡回ルートを残す判定手段を備えた構成を例示した。
しかしながら、判定手段としては、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも小さい場合には、今回の巡回ルートを残し、今回の巡回ルートの移動コストが前回の巡回ルートの移動コストよりも大きい場合には、前回の巡回ルートを残す判定手段であってもよい。
【0080】
また、実施形態では、エリア内の巡回パターンとして、8種類の巡回パターンを例示したが、巡回パターンは、例えば、第1パターン及び第2パターンのみ、あるいは、第3パターン及び第4パターンのみ、第5パターン及び第6パターンのみ、第7パターン及び第8パターンのみを、使用するようにしてもよい。
【0081】
また、実施形態では、エリア(移動対象領域)として、建物内の床面を移動させる例を示したが、エリアは、建物外の道路や空き地等の面であってもよい。
また、障害物Bは、柱以外の障害物、例えば間仕切り壁、固定設備、重量物等であってもかまわない。
また、エリアの位置を示すエリアのXY座標情報や障害物の位置を示すXY座標情報は、角のXY座標情報でなく、エリアの位置や障害物の位置を確認できるXY座標情報であればよい。
【0082】
また、複数のエリア(移動対象領域)は、
図12に示したように、各々隣接した複数のエリアであってもよいし、
図37等に示したように、各々離間した複数のエリアであってもよい。
【0083】
実施形態に係る巡回ルート作成装置によれば、例えば撮像手段(カメラ)を搭載して床面を撮影する移動体1を用いて床面検査を行う場合において、複数のエリアを移動体1に巡回させるための効率的な巡回ルートを提供できるようになるため、効率的な床面検査を行うことが可能となる。
尚、床面検査以外の目的で複数のエリアを移動体1に巡回させる場合であっても、複数のエリアを移動体1に巡回させるための効率的な巡回ルートを提供できるようになる。
【0084】
また、上記では、移動体の移動制御システムにおいて、移動体の実際の移動情報を取得して移動体に送信する移動情報取得手段として、自動追尾機能を備えたTS(トータルステーション)を用いた例を示したが、移動情報取得手段としては、TS以外の手段、例えば、GPS、レーザ測位システム等の移動体自己位置認識システムを用いてもよい。
【符号の説明】
【0085】
1 移動体。