以下、本発明の好ましい実施形態について、添付図面を参照して説明する。図1(a)は、無人搬送車両1の側面図であり、図1(b)は、無人搬送車両1の底面図であり、図1(c)は、無人搬送車両1の走行装置5の拡大斜視図である。尚、本実施形態では、図1(a),(b)において、図面に向かった左方向を無人搬送車両1の前方とし、図面に向かった右方向を無人搬送車両1の後方とする。また、図1(a),(b)では、無人搬送車両1の前後方向を矢印Yにより図示し、左右方向を矢印Xにより図示している。
無人搬送車両1は、無人搬送車両1の運行制御を行う上位プロコン(非図示)から通知されてくる行先指令に基づいて、走行経路R(図2(a)参照)上を自動運転により無人で走行し、更に、その走行経路R上に設置されている複数のステーションCのうち、指令されたステーションCにおいて積載される積載物を、指令されたステーションCまで搬送するものである。
図1(a),(b)に示すように、無人搬送車両1は、積載物が積載される荷台2と、荷台2を支持するシャーシ3と、シャーシ3の下部に設置された走行装置5a〜5lと、磁気ガイド検出センサ79a〜79dと、磁気マーク検出センサ80a〜80dと、IDタグ検出センサ81と、制御装置70とを主に有して構成されている。
走行装置5a〜5lは、図1(b)に示すように、シャーシ3の下部において、無人搬送車両1の前後方向に6列、各列の左右方向に2個の計12個設けられている。尚、前後方向に6列設けられた走行装置5a〜5lを列番号で示す場合、無人搬送車両1の前面に最も近い列(5aおよび5b)を1列目(最前列)と記載し、それ以降は、無人搬送車両1の後方に向かって順番に、2列目、・・・、6列目(最終列)と記載する。
各走行装置5a〜5lは、1本の車軸6aと、車軸6aの両端に連結された2つの車輪6bとをそれぞれ有し、各車軸6aは、車輪6bと共に前転または後転、また、シャーシ3に対して旋回するように構成されている。
これらの各走行装置5a〜5lには、車軸6aに回転駆動力を付与して車輪6bを回転させる回転駆動装置76a〜76l(図3参照)と、車軸6aを旋回させて車軸6aに操舵角を付与する操舵駆動装置77a〜77l(図3参照)とが、それぞれ個別に接続されている。
本実施形態では、無人搬送車両1の前後方向(矢印Y方向)と、車軸6aに対する垂線とがなす角度を、その車軸6aの操舵角としている。具体的には、無人搬送車両1の前後方向(矢印Y方向)に対して車軸6aが垂直な場合に、その車軸6aの操舵角が0度となり、その状態から、車軸6aが時計回りに旋回すると、操舵角がプラス方向に増え、車軸6aが反時計回りに旋回すると、操舵角がマイナスに方向に増える(図6,図7参照)。
回転駆動装置76a〜76lは、車軸6aに回転駆動力を付与する回転モータ76a1〜76l1(図3参照)を有し、操舵駆動装置77a〜77lは、車軸6aを旋回させる回転モータ77a1〜77l1(図3参照)を有している。本実施形態では、制御装置70からの指令によって、走行装置5a〜5lごとに、車軸6aの前転後転や旋回が制御される。
また、各走行装置5a〜5lには、車輪6bの走行速度を検出する走行速度センサ78a〜78l(図3参照)がそれぞれ設けられており、車輪6b走行速度は、各走行装置5a〜5lごとに、それぞれ個別に制御装置70へ出力される(図3参照)。
また、図1(b),(c)に示すように、各走行装置5a〜5lのうち、走行装置5a,5b,5k,5lには、車軸6aの中央部分から無人搬送車両1の前面側に向かって、車軸6aに対して垂直に、磁気ガイド検出センサ79a,79b,79c,79dが設置されている。この磁気ガイド検出センサ79a〜79dは、設置されている走行装置5a,5b,5k,5lの車軸6aが旋回すると、その車軸6aと同様に旋回する。尚、磁気ガイド検出センサ79a〜79dの機能などについては、図2を参照しつつ後述する。
また、図1(b)に示すように、磁気マーク検出センサ80a〜80dは、無人搬送車両1の前方および後方の底面であって、その左右方向の両端にそれぞれ1つずつ、計4個設けられている。また、IDタグ検出センサ81は、無人搬送車両1の前方の底面であって、左右方向の中央に1つ設けられている。尚、磁気マーク検出センサ80a〜80dおよびIDタグ検出センサ81の機能などについても、図2を参照しつつ後述する。
制御装置70は、各種センサ78a〜78l,79a〜79d,80a〜80d,81の状態を検出すると共に、上位プロコン(非図示)から通知されてくる行先指令に基づいて、回転駆動装置76a〜76l(図3参照)や、操舵駆動装置77a〜77lなどを制御して、無人搬送車両1を自動運転させる装置である。
本実施形態では、無人搬送車両1の運転モードとして、自動モードと、手動モードとの2つのモードが設けられており、制御装置70の電源が投入されると、通常は自動モードに設定される。制御装置70は、無人搬送車両1の運転モードが自動モードの場合、上位プロコンから通知されてくる行先指令に基づいて、無人搬送車両1を自動運転させる。一方、手動モードの場合、手動ペンダント(所謂、手動操作リモコン)による指令に基づいて、無人搬送車両1を走行させる。
次に、図2(a),(b)を参照して、無人搬送車両1の走行経路Rについて説明する。図2(a)は、無人搬送車両1の走行経路R全体を模式的に示す平面図であり、図2(b)は、走行経路Rにおける分岐点周辺(図1(a)の領域IIb)の拡大図である。
図2(a)に示すように、無人搬送車両1の走行経路R全体は、8の字状に形成されており、無人搬送車両1を走行させる路面などに走行経路Rとして敷設された帯状の磁気ガイドGと、その磁気ガイドG上に所定間隔で設けられたステーションCとにより構成されている。
上述した磁気ガイド検出センサ79a〜79dは、磁気ガイドGを検出するセンサ素子を28個備えた検出部を有しており、検出部のどの領域で磁気ガイドGが検出されているのかなどの検出結果を制御装置70(図3参照)に出力する。
この28個のセンサ素子は、車軸6aに対して平行となるように一列に配置されており、その一列の長さは、磁気ガイドGの横幅よりも十分広く設けられている。例えば、28個のセンサ素子と、磁気ガイドG全体とが垂直に交差していれば、一列に並ぶ28個のセンサ素子の中の数個のセンサにより磁気ガイドGが検出される。
制御装置70は、運転モードとして右倣いモードが設定されている場合、各磁気ガイド検出センサ79b,79dから出力されている検出結果を取得する一方、運転モードとして左倣いモードが設定されている場合、各磁気ガイド検出センサ79a,79cから出力されている検出結果を取得する。
そして、取得した検出結果に基づいて、無人搬送車両1と磁気ガイドGとの位置ずれを算出し、その位置ずれを補正する(減少させる)ように、即ち、無人搬送車両1が磁気ガイドG上を走行するように進行方向などを制御する。より具体的には、制御装置70は、検出結果を取得した磁気ガイド検出センサ79a〜79dの検出部の中央に、磁気ガイドGが収まるように、無人搬送車両1の進行方向を制御する。
ステーションCは、無人搬送車両1に対して積載物の積み降ろしが行われる位置や、無人搬送車両1が別の無人搬送車両1の通過を待つ位置や、無人搬送車両1が走行経路R上にある自動シャッタや自動扉の開放を待つ位置などである。
図2(a)に示すように、各ステーションCには、それぞれ個別に名称「C***」(尚、「***」は、3桁の数字)が付されている。以後、ステーションCを個別に特定する場合には、ステーションC名をそのまま記載する。例えば、「C201」という名称のステーションCを示す場合には、「C201」と記載する。
また、図2(a)では、「C201」や「C220」や「C251」に、それぞれ無人搬送車両1が配備されている状態を示している。本実施形態では、各無人搬送車両1の配車など、各無人搬送車両1の運行制御については上位プロコン(非図示)により管理される。
それぞれの無人搬送車両1は、定期的(例えば、数秒毎に)に上位プロコンに対して、走行中であるか待機中であるかや、走行中であれば走行位置や、待機中であれば待機位置などを通知する。上位プロコンは、無人搬送車両1同士が走行経路R上で出会って立ち往生したり、無人搬送車両1が別の無人搬送車両1に追突しないように、各無人搬送車両1に対して行先指令を通知する。
また、図2(b)に示すように、走行経路R上の各ステーションCには、磁気ガイドGと同様に、矩形板状の磁気マークMと、コイン状のIDタグITとが配設されている。また、走行経路Rにおける分岐点にも、同様に磁気マークMが配設されている。
磁気マークMは、走行経路R上における各ステーションCや、分岐点などに配置されるものであり、無人搬送車両1の停止位置や、右折位置や、左折位置などの基準位置を、制御装置70が確認するためのものである。上述した磁気マーク検出センサ80a〜80dは、磁気マークMを検出しているか否かを制御装置70(図3参照)に出力するセンサであり、制御装置70は、磁気マークMが検出された場合に、無人搬送車両1が何れかのステーションCに到着した、または、走行経路Rにおける分岐点に差し掛かったと判別する。
IDタグITは、走行経路R上の各ステーションCをそれぞれ個別に識別するための識別情報(例えば、ステーションCの名称)が記憶されたものである。IDタグ検出センサ81は、IDタグITとの距離が接近している間(例えば、数10cm以内)、そのIDタグITに記憶されている識別情報を非接触(例えば、電磁誘導方式など)で読み取って、制御装置70へ出力するセンサである。
制御装置70は、磁気マーク検出センサ80a〜80dにより磁気マークが検出されていると共に、IDタグ検出センサ81によりIDタグITの識別情報が検出されていれば、その検出された識別情報に対応するステーションCに、無人搬送車両1が到着したと判別する。
次に、図3を参照して、無人搬送車両1の電気的構成について説明する。制御装置70は、無人搬送車両1に搭載されている装置であり、無人搬送車両1が有する各種装置や、無人搬送車両1の走行状態などを制御するものである。制御装置70は、CPU71、フラッシュメモリ72、及び、RAM73を備え、これらがバスライン74を介して入出力ポート75にそれぞれ接続されている。
入出力ポート75には、上述した回転駆動装置76a〜76lと、操舵駆動装置77a〜77lと、走行速度検出センサ78a〜78lと、磁気ガイド検出センサ79a〜79dと、磁気マーク検出センサ80a〜80dと、IDタグ検出センサ81とに加えて、無線通信装置82とが主に接続されている。
CPU71は、バスライン74により接続された各部を制御する演算装置である。フラッシュメモリ72は、CPU71により実行されるプログラムや固定値データ等を格納した書き換え可能な不揮発性のメモリである。尚、後述する図8のフローチャートに示す自動運転処理、図9のフローチャートに示す動作コマンド設定処理、図10のフローチャートに示す動作コマンド生成処理、及び、図13のフローチャートに示す操舵角自動設定処理を実行する各プログラムは、このフラッシュメモリ72に格納されている。
また、フラッシュメモリ72には、動作情報リンクテーブル72aと、動作コマンドテーブル72bと、操舵角設定テーブル72cとが設けられている。ここで、図4を参照して、動作情報リンクテーブル72aおよび動作コマンドテーブル72bについて説明する。
図4(a)は、動作情報リンクテーブル72aの内容の一例を示す模式図であり、図4(b)は、動作コマンドテーブル72bの内容の一例を示す模式図であり、図4(c)は、動作コマンドの種別の一例を示す模式図である。
動作情報リンクテーブル72aは、上位プロコンから通知された行先指令に対応する動作コマンド列を制御装置70が生成する場合に、後述する動作コマンドテーブル72bと共に制御装置70により参照されるテーブルである。
行先指令は、出発地点となるステーションCから到着地点となるステーションCまでの各ステーションCを走行順に並べたデータ(以後、「ステーションC列」と称す)で構成されており、出発地点となるステーションCが「C201」であり、到着地点となるステーションCが「C203」の場合には、「C201→C202→C203」という行先指令が、上位プロコンから無人搬送車両1へ通知される。
また、動作コマンドは、無人搬送車両1の走行制御を行うために制御装置70が実行する命令であり、無人搬送車両1の制御内容に応じて複数種類設けられている(図4(c)参照)。制御装置70は、これらの動作コマンドを組み合わせて、上位プロコンより通知された行先指令に対応する動作コマンド列を生成し、その後、その生成した動作コマンド列の各動作コマンドを1つずつ順番に実行して、出発地点となるステーションCから到着地点となるステーションCまで無人搬送車両1を走行させる。尚、行先指令から動作コマンド列を生成する方法については後述する。
動作情報リンクテーブル72aは、図4(a)に示すように、走行経路R上で隣設する3つのステーションCの組み合わせと、その組み合わせに対応する動作情報データ番号列とに加え、走行経路R上で隣設する2つのステーションCの組み合わせと、その組み合わせに対応する動作情報データ番号列とにより構成されている。
ここで、隣設する3つのステーションCの組み合わせは、無人搬送車両1が直近に通過する予定のステーションC(以後、「前回位置」と称す)と、無人搬送車両1が存在する予定のステーションC(以後、「現在位置」と称す)と、無人搬送車両1が次に通過する予定のステーションC(以後、「次回位置」と称す)とにより構成されている。
以後、説明を簡単にするために、隣設する3つのステーションCの組み合わせを記載する場合には、「前回位置,現在位置,次回位置」という順序で各ステーションCを記載する。例えば、前回位置が「C201」、現在位置が「C202」、次回位置が「C203」であれば、「C201,C202,C203」と記載する。尚、この組み合わせは、無人搬送車両1がC201からC202までの走行を終え、引き続き、C202からC203へ向かって走行することを意味する。
ところで、本実施形態では、隣設する3つのステーションCの組み合わせを構成する場合に、前回位置や次回位置が存在しないため、その組み合わせを構成できないことがある。即ち、無人搬送車両1が現在位置で指令待ちの状態(以後、「待機中」と称す)から、新たに走行開始する場合には、前回位置が存在しない。また、無人搬送車両1が自動運転を行っている状態(以後、「自動運転中」と称す)であるものの、現在位置で停車し、それ以後は待機中となる場合には、次回位置が存在しない。
よって、このような場合には、走行経路R上で隣接する2つのステーションCの組み合わせしか構成できない。そこで、本実施形態では、「前回位置」や「次回位置」が存在せず、2つのステーションCの組み合わせしか構成できない場合には、「前回位置」や「次回位置」に、「該当なし」という意味で「0」を記載する。
例えば、「0,C201,C202」というステーションCの組み合わせは、C201で待機中であった無人搬送車両1が、C201から走行開始してC202へ向かうことを意味する。また、例えば、「C201,C202,0」というステーションCの組み合わせは、無人搬送車両1がC201からC202までの走行を終えて、C202で停車し、それ以後は待機中になることを意味する。
動作情報データ番号列は、動作情報データ番号が1以上連なって構成されている。尚、詳細については後述するが、各動作情報データ番号には、後述する動作コマンドテーブル72b(図4(b)参照)において、複数の動作コマンドで構成される動作コマンド列がそれぞれ設定されている。
上述したように、動作情報データ番号列は、隣設する3つのステーションCの組み合わせに応じて設定されており、例えば、図4(a)に示すように、「0,C201,C202」というステーションCの組み合わせには、「11,22,208,99,112,31」という動作情報データ番号列が対応づけられている。尚、この番号列に対応する動作コマンド列が制御装置70により実行されると、C201で待機中であった無人搬送車両1が、C201からC202まで走行する。
また、例えば、「C203,C204,C205」というステーションCの組み合わせには、「67,212,99,114,31」という動作情報データ番号列が対応づけられている。尚、この番号列に対応する動作コマンド列が制御装置70により実行されると、C203からC204まで走行してきた無人搬送車両1が、引き続き、C204からC205まで走行する。以下、その他のステーションCの組み合わせについても同様な説明となるので、その説明は省略する。
本実施形態では、走行経路R全体と、その走行経路R上に配置するステーションCとが決定された段階で、その走行経路Rに応じた動作情報リンクテーブル72aが、無人搬送車両1の開発元(提供元)などより事前に作成される。より具体的には、動作情報リンクテーブル72aを作成するために、走行経路R上に配置されるステーションCの中から、隣設する3つのステーションCの組み合わせが全て求められて、各組み合わせごとに、その組み合わせに対応する動作情報データ番号列を設定するという作業が行われる。同様に、走行経路R上に配置されるステーションCの中から、隣設する2つのステーションCの組み合わせが全て求められて、各組み合わせごとに、その組み合わせに対応する動作情報データ番号列を設定するという作業が行われる。
これに対して、従来の無人搬送車両の場合にも同様に、動作情報リンクテーブルが作成されていたが、後述するように、ステーションCの組み合わせを総当たりで求めていたため、そのサイズは本実施形態よりも大きいものとなっていた。即ち、従来の無人搬送車両用の動作情報リンクテーブルを作成する場合には、まず、走行経路R上に配置されるステーションCのうち、1つのステーションCを現在位置とし、その現在位置を除く残りのステーションCの1つを次回位置とする2つのステーションCの組み合わせが求められる。加えて、現在位置はそのまま変えずに、その現在位置と、先に組み合わせた1つのステーションを除く残りの各ステーションCをそれぞれ次回位置とする2つのステーションCの組み合わせについても、全て求められる。
そして、以下同様に、走行経路R上に配置される各ステーションCをそれぞれ現在位置とする場合についても、現在位置と、次回位置との2つのステーションCの組み合わせが全て求められる。その後、各組み合わせごとに、その組み合わせに対応する動作情報データ番号列を設定するという作業が行われる。
このように、従来の無人搬送車両用の動作情報リンクテーブルでは、ステーションCの組み合わせを、総当たりで求めていたため、動作情報リンクテーブルのサイズが大きくなっていた。また、ステーションCの組み合わせが多いため、その組み合わせに対応する動作情報データ番号列の設定が煩雑であり、入力ミスを招き易かった。また、走行経路R上のステーションC数を増減する場合には、動作情報リンクテーブルを全体的に修正しなければならないので、修正作業が煩雑であった。
これに対して、本実施形態では、動作情報リンクテーブル72aを事前に作成する場合に、走行経路R上に配置されるステーションCの中から、隣設する3つのステーションCの組み合わせと、隣設する2つのステーションCの組み合わせとについて、その組み合わせを全て求めて、その各組み合わせに対応する動作情報データ番号列を設定している。よって、求める組み合わせの数が少ないため、従来の無人搬送車両用の動作情報リンクテーブルよりも、そのサイズを小さくできる。また、走行経路R上のステーションC数を増減する場合には、動作情報リンクテーブル72aのうち、増減させるステーションCを含む3つのステーションCの組み合わせと、増減させるステーションCを含む2つのステーションCの組み合わせとについてのみ修正を行い、その各組み合わせに対応する動作情報データ番号列を設定し直せば良いので、修正作業が容易である。
また、上述したように、本実施形態では、「前回位置,現在位置,次回位置」というステーションCの組み合わせから、無人搬送車両1を「現在位置」から「次回位置」まで走行させるための動作コマンド列を取得するように構成している。
よって、「前回位置」から「次回位置」までの走行経路Rが直線であるか、カーブしているか、又は、屈折しているかなどの走行条件に応じて、「現在位置」から「次回位置」までの無人搬送車両1の走行状態を適切に設定できる。
即ち、「前回位置」から「次回位置」までの走行経路Rが直線の場合、無人搬送車両1は走行速度を落とさずに「前回位置」から「次回位置」まで走行できる。このような場合、本実施形態では、「前回位置」から「現在位置」まで走行してきた無人搬送車両1の走行速度を維持して、引き続き、無人搬送車両1を「現在位置」から「次回位置」まで走行させるように動作コマンド列を設定している。これにより、「前回位置」から「次回位置」までの走行速度の変化を抑制できるので、無人搬送車両1をスムーズに走行させられる。
また、「前回位置」から「現在位置」までの走行経路Rがカーブ、又は、屈折していれば、無人搬送車両1は走行速度を落としつつ、「前回位置」から「現在位置」まで走行してくる。その後、「現在位置」から「次回位置」までの走行経路Rが直線になるのであれば、本実施形態では、無人搬送車両1の走行速度を上昇させつつ、無人搬送車両1を「現在位置」から「次回位置」まで走行させるように動作コマンド列を設定している。
一方、「現在位置」から「次回位置」までの走行経路Rがカーブ、又は、屈折しているのであれば、そのカーブや屈折に応じて、無人搬送車両1の走行速度を維持したり、更に、走行速度を落として、無人搬送車両1を「現在位置」から「次回位置」まで走行させるように動作コマンド列を設定している。これにより、「前回位置」から「次回位置」までの走行経路Rの形状に応じて、無人搬送車両1を適切な走行速度で走行させられる。
次に、図4(b)を参照して、動作コマンドテーブル72bについて説明する。動作コマンドテーブル72bは、上位プロコンから通知された行先指令に対応する動作コマンド列を制御装置70が生成する場合に、上述した動作情報リンクテーブル72aと共に制御装置70により参照されるテーブルである。
この動作コマンドテーブル72bは、図4(b)に示すように、動作情報データ番号と、その動作情報データ番号に対応する動作コマンド列とにより構成されている。例えば、動作情報データ番号「1」には、1番目の動作コマンドとして「9101H−0000H」が対応づけられており、2番目の動作コマンドとして「0101H−1001H」が対応づけられている。尚、その他の動作情報データ番号についても同様な説明となるので、その説明は省略する。
各動作コマンドは、2ワード(本実施形態の1ワードは2バイト)単位で構成されており、1ワード目の上位バイトには、コマンドの種別を示すコマンドコードが設定される。また、1ワード目の下位バイトと、2ワード目全体とには、コマンドのパラメータを示すデータが設定される。例えば、動作コマンド「9101H−0000H」であれば、「91H」がコマンドコードとなり、「01H−0000H」がパラメータを示すデータとなる。
次に、図4(c)を参照して、動作コマンドの種別の一例について説明する。図4(c)に示すように、本実施形態では、無人搬送車両1の制御内容に応じて、動作コマンドが個別に設けられており、各動作コマンドごとに、コマンドコードが個別に設定されている。
例えば、進行方向設定を実行する動作コマンドには、コマンドコードとして「01H」が設定されており、走行速度設定を実行する動作コマンドには、コマンドコードとして「12H」が設定されている。尚、その他の動作コマンドについても同様な説明となるので、その説明は省略する。
ここで、図3の説明に戻る。操舵角設定テーブル72cは、12個の各走行装置5a〜5lに対して設定すべき操舵角を決定するためのテーブルであり、無人搬送車両1の自動運転中に、定期的(例えば、5ms毎)に制御装置70により参照される。尚、この操舵角設定テーブル72cは、無人搬送車両1の開発元(提供元)などより事前に作成されるものである。
ここで、図5を参照して、操舵角設定テーブル72cについて説明する。図5(a)は、操舵角設定テーブル72cの内容の一例を示す模式図であり、図5(b)は、操舵角設定テーブル72cの各マス目ごとに設定される複数の定数の一例を示す模式図である。
図5(a)に示すように、操舵角設定テーブル72cは、前側操舵角θfおよび後側操舵角θbの組み合わせと、その組み合わせに基づいて予め算出された複数の定数とにより構成されている。
前側操舵角θfおよび後側操舵角θbは、制御装置70において用いられる基準値(基準操舵角)であり、検出結果を取得した磁気ガイド検出センサ79a〜79dの検出部の中央に磁気ガイドGが収まるように、各走行装置5a〜5lにおける各車軸6aの操舵角を制御するために、制御装置70が用いる値である。
上述したように、制御装置70では、運転モードとして右倣いモードが設定されている場合、各磁気ガイド検出センサ79b,79dから出力されている検出結果が取得される。すると、制御装置70では、磁気ガイド検出センサ79bの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させる場合の走行装置5bの操舵角が、前側操舵角θfとして算出される。また、磁気ガイド検出センサ79dの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させる場合の走行装置5lの操舵角が、後側操舵角θbとして算出される。
尚、ここで算出される前側操舵角θfおよび後側操舵角θbは、あくまでも、制御装置70が操舵角設定テーブル72cを参照するための基準操舵角なので、走行装置5bおよび走行装置5lに対して設定される操舵角と一致するとは限らない。
一方、制御装置70では、運転モードとして左倣いモードが設定されている場合、各磁気ガイド検出センサ79a,79cから出力されている検出結果が取得される。すると、制御装置70では、磁気ガイド検出センサ79aの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させる場合の走行装置5aの操舵角が、前側操舵角θfとして算出される。また、磁気ガイド検出センサ79cの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させる場合の走行装置5kの操舵角が、後側操舵角θbとして算出される。
尚、ここで算出される前側操舵角θfおよび後側操舵角θbについても、走行装置5aおよび走行装置5kに対して設定される操舵角と一致するとは限らない。また、前側操舵角θfおよび後側操舵角θbの算出方法は、磁気ガイド検出センサ79a〜79d毎に変わるものではなく、共通であり、前側操舵角θfおよび後側操舵角θbの値は、単に、検出結果に応じて決まる。
操舵角設定テーブル72cは、前側操舵角θfの範囲を0〜89度とし、後側操舵角θbの範囲を−89〜89度とし、更に、前側操舵角θfおよび後側操舵角θbを1度単位で漏れなく組み合わせたものである。尚、図5(a)に示すテーブル72cでは、各マス目に対応する複数の定数について、その記載を省略している。
上述したように、車軸6aの操舵角は、プラスの角度だけではなく、マイナスの角度も有るため、前側操舵角θfの範囲も、後側操舵角θbと同様に、0度を中心として、プラスおよびマイナスの範囲(−89度〜89度の範囲)に角度を設定しておく必要がある。しかしながら、本実施形態では、前側操舵角θfの範囲を0度〜89度としている。これは、操舵角設定テーブル72cの大きさを小さくするためであり、その詳細については後述する。
操舵角設定テーブル72cを構成する一のマス目(即ち、前側操舵角θfおよび後側操舵角θbの一の組み合わせ)に対応する複数の定数は、図5(b)に示すように、12個の走行装置5a〜5lに対して設定すべき操舵角θ1〜θ12と、12個の走行装置5a〜5lに対して設定すべき各走行速度V1〜V12を算出するための走行速度比率Va1〜Va12とにより構成されている。
ここで、操舵角θ1は、無人搬送車両1の左側最前列の走行装置5aに設けられている車軸6aの操舵角を示し、操舵角θ2は、無人搬送車両1の右側最前列の走行装置5bに設けられている車軸6aの操舵角を示す。以下同様に、操舵角θ3〜θ12のそれぞれは、走行装置5c〜5lに設けられている各車軸6aの操舵角をそれぞれ示す。
また、走行速度比率Va1は、無人搬送車両1の左側最前列の走行装置5aに設けられている車軸6aの走行速度V1を算出するための走行速度比率を示し、走行速度比率Va2は、無人搬送車両1の右側最前列の走行装置5bに設けられている車輪6bの走行速度V2を算出するための走行速度比率を示している。
以下同様に、走行速度比率Va3〜Va12のそれぞれは、走行装置5c〜5lの各車輪6bの走行速度V3〜V12を算出するための走行速度比率をそれぞれ示す。尚、これらの走行速度比率Va1〜Va12は、無人搬送車両1が目標とすべき走行速度である基準走行速度Vを基準(即ち、「1」)とした場合の比率である。
この基準走行速度Vは、走行経路R上の隣接する2つのステーションC単位で予め定められている。言い換えれば、走行経路Rを各ステーションC毎に区切った場合の各区間毎に予め定められている。
上述したように、本実施形態では、隣接する2つのステーションCの組み合わせ、および、隣設する3つのステーションCの組み合わせに応じて、動作情報データ番号列が設定されており、基準走行速度Vは、この動作情報データ番号列を構成する一部の番号により指定される。基準走行速度Vを指定するための動作コマンドが制御装置70により実行されると、指定された基準走行速度Vで無人搬送車両1が走行するように、走行装置5a〜5lに設けられている各車輪6bの走行速度が制御される。
尚、走行装置5a〜5lに対して設定すべき各車輪6bの走行速度V1〜V12は、基準走行速度Vに対して、走行速度比率Va1〜Va12を乗算することで算出できる。例えば、走行装置5aに対して設定すべき、走行装置5aの車輪6bの走行速度V1は、基準走行速度Vに、走行速度比率Va1を乗算して算出する。
ここで、図6および図7を参照して、各操舵角θ1〜θ12、および、各走行速度比率Va1〜Va12の算出方法について説明する。図6および図7は、操舵角設定テーブルの各マス目ごとに設定される各定数の算出方法の一例を説明するための説明図である。
図6では、無人搬送車両1の前後方向を矢印Yにより図示し、左右方向を矢印Xで図示し、無人搬送車両1の旋回中心を点Oとして図示している。また、図7では、図6における各走行装置5a〜5lをそれぞれ個別に図示している。また、図6に示すように、無人搬送車両1の最前列に設けられている走行装置5a,5bの車軸6aと、無人搬送車両1の最終列に設けられている走行装置5k,5lの車軸6aとの距離を第1ホイールベースB1とする。
また、無人搬送車両1の2列目に設けられている走行装置5c,5dの車軸6aと、無人搬送車両1の5列目に設けられている走行装置5i,5jの車軸6aとの距離を第2ホイールベースB2とし、無人搬送車両1の3列目に設けられている走行装置5e,5fの車軸6aと、無人搬送車両1の4列目に設けられている走行装置5g,5hの車軸6aとの距離を第3ホイールベースB3とする。
また、無人搬送車両1の右側に設けられている走行装置5b,5d,5f,5h,5j,5lの車軸6aと、無人搬送車両1の左側に設けられている走行装置5a,5c,5e,5g,5i,5kの車軸6aとの距離を、トレッドTとする。尚、ホイールベースB1〜B3、及び、トレッドTは、無人搬送車両1の設計時に定められる固有値である。
ここで、無人搬送車両1の左右方向(図中の矢印X方向)の距離であって、無人搬送車両1の右側に設けられている走行装置5b,5d,5f,5h,5j,5lの車軸6aと、旋回中心Oとの距離を距離Aとした場合に、前側操舵角θfおよび後側操舵角θbが一意に決まれば、その距離Aは、
A=B1÷(Tan(θf)+Tan(θb))
により算出できる。
そして、この距離Aが決まれば、以下の計算式により各操舵角θ1〜θ12を算出できる。
θ1=Tan−1((Tan(θf)×A)÷(A+T))
θ2=θf
θ3=Tan−1(((Tan(θf)×A)−((B1−B2)÷2))÷(A+T))
θ4=Tan−1(((Tan(θf)×A)−((B1−B2)÷2))÷A)
θ5=Tan−1(((Tan(θf)×A)−((B1−B3)÷2))÷(A+T))
θ6=Tan−1(((Tan(θf)×A)−((B1−B3)÷2))÷A)
θ7=Tan−1(((Tan(θb)×A)−((B1−B3)÷2))÷(A+T))
θ8=Tan−1(((Tan(θb)×A)−((B1−B3)÷2))÷A)
θ9=Tan−1(((Tan(θb)×A)−((B1−B2)÷2))÷(A+T))
θ10=Tan−1(((Tan(θb)×A)−((B1−B2)÷2))÷A)
θ11=Tan−1((Tan(θb)×A)÷(A+T))
θ12=θb
また、図6に示すように、旋回中心Oから、無人搬送車両1の左側最前列に設けられている走行装置5aの車軸6aまでの直線距離を旋回半径R1とし、旋回中心Oから、無人搬送車両1の右側最前列に設けられている走行装置5bの車軸6aまでの直線距離をR2とする。以下同様に、旋回中心Oから、各走行装置5c〜5lの車軸6aまでの直線距離を、それぞれ旋回半径R3〜R12とする。
これらの各旋回半径R1〜R12は、各操舵角θ1〜θ12が決まれば、以下の計算式により算出できる。
R1=(A+T)÷Cos(θ1)
R2=A÷Cos(θ2)
R3=(A+T)÷Cos(θ3)
R4=A÷Cos(θ4)
R5=(A+T)÷Cos(θ5)
R6=A÷Cos(θ6)
R7=(A+T)÷Cos(θ7)
R8=A÷Cos(θ8)
R9=(A+T)÷Cos(θ9)
R10=A÷Cos(θ10)
R11=(A+T)÷Cos(θ11)
R12=A÷Cos(θ12)
そして、各旋回半径R1〜R12が決まれば、その各旋回半径R1〜R12の中から、最も値の大きい最大旋回半径Rmaxを求めることができ、その結果、以下の計算式により各走行速度比率Va1〜Va12を算出できる。
Va1=R1÷Rmax
Va2=R2÷Rmax
Va3=R3÷Rmax
Va4=R4÷Rmax
Va5=R5÷Rmax
Va6=R6÷Rmax
Va7=R7÷Rmax
Va8=R8÷Rmax
Va9=R9÷Rmax
Va10=R10÷Rmax
Va11=R11÷Rmax
Va12=R12÷Rmax
上述したように、本実施形態では、前側操舵角θfの範囲を0〜89度とし、後側操舵角θbの範囲を−89〜89度とし、更に、前側操舵角θfおよび後側操舵角θbを1度単位で漏れなく組み合わせたテーブル72cを、事前に作成している。このテーブル72cを作成する場合には、上述した計算式を用いることで、テーブル72cの各マス目ごとに、各操舵角θ1〜θ12、及び、各走行速度比率Va1〜Va12を予め算出できる。
制御装置70は、磁気ガイド検出センサ79a〜79dの検出結果に基づいて、前側操舵角θfおよび後側操舵角θbを算出した場合に、前側操舵角θfがプラスの角度であれば、そのまま、その算出した前側操舵角θfおよび後側操舵角θbに対応する各操舵角θ1〜θ12、及び、各走行速度比率Va1〜Va12を、操舵角設定テーブル72cの中から取得する。
一方、前側操舵角θfがマイナスの角度であれば、一旦、前側操舵角θfおよび後側操舵角θbにそれぞれ−1を乗じて、前側操舵角θfの符号をプラスにする。そして、−1乗じた前側操舵角θfおよび後側操舵角θbに対応する各操舵角θ1〜θ12、及び、各走行速度比率Va1〜Va12を、操舵角設定テーブル72cの中から取得する。そして、その取得した各操舵角θ1〜θ12については、それぞれ−1を乗じ、その結果得られた各操舵角θ1〜θ12を、無人搬送車両1における走行装置5a〜5lの各列単位で、左右入れ替える。
即ち、−1を乗じて得られた操舵角θ2(操舵角の入れ替え前のθ2)は、各列における操舵角の入れ替えによって、走行装置5aの操舵角θ1となる。同様に、左右入れ替え前の操舵角θ1は、各列における操舵角の入れ替えによって、走行装置5bの操舵角θ2となる。その他の操舵角θ3〜θ12についても同様に、走行装置5c〜5lの各列単位で、左右入れ替える。
また、各走行速度比率Va1〜Va12については、単に、走行装置5a〜5lの各列単位で、左右入れ替える。即ち、左右入れ替え前の走行速度比率Va2は、各列における走行速度比率の入れ替えによって、走行装置5aの走行速度比率Va1となる。同様に、左右入れ替え前の走行速度比率Va1は、走行速度比率の入れ替えによって、走行装置5bの走行速度比率Va2となる。その他の走行速度比率Va3〜Va12についても同様に、走行装置5c〜5lの各列単位で、左右入れ替える。
本実施形態では、無人搬送車両1の前後方向(矢印Y方向)に対し、車軸6aが垂直な状態を0度としているので、絶対値が同一で、符号だけ異なる操舵角については、無人搬送車両1の前後方向(矢印Y方向)を基準として、車軸6aが左右対称に回転しているだけである。即ち、単に、符号が反転しているだけの違いしかない。
よって、仮に、前側操舵角θfの範囲を−89〜0度とし、後側操舵角θbの範囲を−89〜89度とする操舵角設定テーブルを設けたとしても、そのテーブルは、単に、前側操舵角θfの範囲を0〜89度とし、後側操舵角θbの範囲を−89〜89度としている操舵角設定テーブル72cにおいて、前側操舵角θfおよび各操舵角θ1〜θ12の符号を反転させただけのものとなる。従って、冗長なテーブルを設けることになってしまう。
そこで、本実施形態では、前側操舵角θfの範囲を0〜89度とし、後側操舵角θbの範囲を−89〜89度とした操舵角設定テーブル72cだけを設けておき、磁気ガイド検出センサ79a〜79dの検出結果に基づいて算出された前側操舵角θfがマイナスの角度の場合は、一旦、前側操舵角θfおよび後側操舵角θbにそれぞれ−1を乗じて、前側操舵角θfの符号をプラスにして操舵角設定テーブル72cを用い、最後に、取得した操舵角θ1〜θ12に対してそれぞれ−1を乗じている。このように、本実施形態では、操舵角設定テーブル72cの大きさを小さくしているので、記憶領域の消費を抑制できる。
ここで、図3の説明に戻る。RAM73は、CPU71が制御プログラムの実行時に各種のワークデータやフラグ等を書き換え可能に記憶するためのメモリである。RAM73には、動作コマンドバッファメモリ73aと、コマンド実行ポインタ73bと、指令バッファメモリ73cと、新規コマンドポインタ73dと、上書開始ポインタ73eと、基準操舵角メモリ73fと、基準走行速度メモリ73gとが設けられている。
動作コマンドバッファメモリ73aは、上位プロコンから通知された行先指令に対応する動作コマンド列を記憶するためのメモリである。無人搬送車両1の待機中に上位プロコンから行先指令が通知され、その行先指令が制御装置70により受信された場合、動作コマンドバッファメモリ73aはクリアされる。その後、制御装置70では、受信した行先指令に基づいて、出発地点となるステーションCから到着地点となるステーションCまでの走行経路R上を無人搬送車両1に走行させるための動作コマンド列が生成されて、それらが動作コマンドバッファメモリ73aの先頭から実行順に記憶される。
本実施形態では、無人搬送車両1が既に自動運転中であっても、その無人搬送車両1に対して上位プロコンから、再度、行先指令が通知される場合がある。例えば、出発地点となるステーションCから、目的地点となるステーションCまで無人搬送車両1を走行させたいが、その走行経路R上に別の無人搬送車両1が存在していて通行できない場合である。
ここで、その一例を具体的に説明する。例えば、ステーション「C201」(図2(a)参照)で待機している無人搬送車両1を、ステーション「C203」まで走行させる予定であるが、ステーション「C203」には、現在、別の無人搬送車両1が存在しているとする。この場合、上位プロコンは、1回目の行先指令として、ステーション「C201」からステーション「C202」まで無人搬送車両1を走行させるための行先指令を、待機中の無人搬送車両1に対して通知する。
そして、ステーション「C203」に存在していた別の無人搬送車両1が移動し、ステーション「C203」へ進入可能になったら、上位プロコンは、2回目の行先指令として、ステーション「C202」からステーション「C203」まで無人搬送車両1を走行させるための行先指令を、無人搬送車両1に対して通知する。このように、上位プロコンは、目的地点となるステーションCまで無人搬送車両1を走行させたいが、その走行経路R上に別の無人搬送車両1が存在しており、途中で無人搬送車両1を進行させることができなくなる場合、進行可能なステーションCまで無人搬送車両1を走行させるための行先指令を、無人搬送車両1に対して通知する。そして、先に進行できるようになる度に、進行可能になったステーションCまで無人搬送車両1を走行させるための行先指令を、無人搬送車両1に対して通知する。
また、本実施形態では、到着地点となるステーションCが途中で変更される場合にも、上位プロコンから、再度、行先指令が通知される。例えば、待機中の無人搬送車両1に対して、上位プロコンから1回目の行先指令が通知され、その行先指令に従って無人搬送車両1が走行開始した後に、到着地点となるステーションCが上位プロコンにおいて変更されたとする。このような場合、上位プロコンは、その変更された到着地点となるステーションCまで無人搬送車両1を走行させるための行先指令を、無人搬送車両1に対して通知する。
尚、本実施形態では、上位プロコンから無人搬送車両1に対して行先指令が通知される度に、出発地点となるステーションCから到着地点となるステーションCまでの走行経路R上に並ぶステーションCが、3つ単位で通知される場合の一例を以下で説明する。即ち、出発地点となるステーションCから到着地点となるステーションCまでの走行経路R上に並ぶステーションCが、4以上であれば、上位プロコンから複数回に渡って行先指令が通知される場合の一例を以下で説明する。
具体的には、まず、出発地点から到着地点までの走行経路R上に並ぶ各ステーションCのうち、出発地点から到着地点に向かって連続して並ぶ3つのステーションCが、1回目の行先指令として、上位プロコンから無人搬送車両1に対して通知される。
次に、直近に通知された3つのステーションCのうち、最後のステーションCを先頭とし、そこから到着地点に向かって連続して並ぶ3つのステーションCが、次の行先指令として無人搬送車両1に通知される。尚、次の行先指令の通知タイミングは、遅くとも、直近の行先指令の示す到着地点に、無人搬送車両1が停車する前に通知される。
以後同様に、到着地点のステーションCが行先指令の最後に現れるまで、行先指令が繰り返し無人搬送車両1に通知される。
例えば、出発地点となるステーションCが「C201」であり、到着地点となるステーションCが「C204」であって、出発地点から到着地点までの走行経路R上に4つのステーションCが並んでいる場合には、まず始めに「C201→C202→C203」という行先指令が、上位プロコンから無人搬送車両1へ通知される。次に、「C203→C204」という行先指令が、上位プロコンから無人搬送車両1へ通知される。
無人搬送車両1の自動運転中に上位プロコンから次の行先指令が通知され、その行先指令が制御装置70により受信された場合、制御装置70では、その次の行先指令に対応する動作コマンド列が生成されて、それらが動作コマンドバッファメモリ73aに追加される。これにより、制御装置70では、メモリ73aに既に記憶されている動作コマンド列に加えて、新たに追加された動作コマンド列も実行される。その結果、制御装置70は、次の行先指令により示される到着地点まで無人搬送車両1を走行させることができる。
つまり、無人搬送車両1が到着地点となるステーションCに到着し、停車する前であれば、到着地点を変更できるので、無人搬送車両1の走行経路Rや行先を自由に変更できる。従って、無人搬送車両1が走行する走行経路Rの混雑状況などの外的要因に合わせて、無人搬送車両1を効率よく運行させることができる。
コマンド実行ポインタ73bは、動作コマンドバッファメモリ73aに記憶されている動作コマンド列の中で、制御装置70が次に実行すべき一の動作コマンドの記憶位置を示すものである。無人搬送車両1の待機中に、上位プロコンから通知される行先指令が制御装置70により受信された場合、コマンド実行ポインタ73bは、動作コマンドバッファメモリ73aに記憶されている先頭の動作コマンドの記憶位置を示すように初期化される(図9のS14参照)。
制御装置70は、無人搬送車両1を走行させる場合、動作コマンドバッファメモリ73aの中から、コマンド実行ポインタ73bにより示される一の動作コマンドを取得して、その動作コマンドを実行する。そして、実行された動作コマンドが終了した場合、次に実行すべき一の動作コマンドの記憶位置がコマンド実行ポインタ73bにより示されるように、コマンド実行ポインタ73bを更新する。制御装置70は、動作コマンドバッファメモリ73aの中に実行すべき動作コマンドが他にも残っている間(即ち、動作コマンドを全て実行するまで)、コマンド実行ポインタ73bにより示される動作コマンドの取得と、コマンド実行ポインタ73bの更新とを繰り返す。
指令バッファメモリ73cは、上位プロコンから通知された行先指令が記憶されるメモリである。無人搬送車両1の待機中に、上位プロコンから通知される行先指令が制御装置70により受信された場合、指令バッファメモリ73cはクリアされ、更に、その受信された行先指令が、指令バッファメモリ73cの先頭から順番に記憶される。
例えば、無人搬送車両1の待機中に、「C201→C202→C203」という行先指令が制御装置70により受信された場合には、指令バッファメモリ73cの先頭から「C201→C202→C203」というステーションC列が順番に記憶される(図11(a)参照)。
一方、詳細については後述するが、無人搬送車両1の自動運転中に上位プロコンから次の行先指令が通知されて、その行先指令が制御装置70により受信された場合、制御装置70では、今回受信された行先指令が、指令バッファメモリ73cに追加される。
尚、この場合は、既に記憶されている行先指令の中の最後のステーションCと、今回受信した行先指令の先頭のステーションCとが同一となるため、今回受信した行先指令を、指令バッファメモリ73cに記憶されている行先指令の中の最後のステーションCの位置から順番に上書きしている(図12(a)参照)。
例えば、指令バッファメモリ73cに「C201→C202→C203」という行先指令が既に記憶されており、その内容に従って無人搬送車両1が自動運転を行っている場合に、「C203→C204」という行先指令が制御装置70により受信されると、その行先指令が、指令バッファメモリ73cにおいて「C203」が記憶されている位置から上書きされる。その結果、最終的には、指令バッファメモリ73cに「C201→C202→C203→C204」というステーションC列が記憶される。
新規コマンドポインタ73dは、行先指令に対応する動作コマンド列が制御装置70において新たに生成された後、その新たな動作コマンド列を動作コマンドバッファメモリ73aに記憶する場合に、その記憶位置を示すものである。
無人搬送車両1の待機中に、上位プロコンから通知される行先指令が制御装置70により受信された場合、新規コマンドポインタ73dは、動作コマンドバッファメモリ73aの先頭を示すように初期化される(図9のS14参照)。
そして、動作コマンドバッファメモリ73aのうち、新規コマンドポインタ73dにより示される位置に動作コマンド列が記憶されると、新規コマンドポインタ73dは、次の動作コマンド列を書き込む位置を示すように設定される(図10のS37参照)。
上書開始ポインタ73eは、無人搬送車両1の自動運転中に上位プロコンから次の行先指令が通知されて、その行先指令が制御装置70により受信され、その次の行先指令に対応する動作コマンド列を動作コマンドバッファメモリ73aに追加して記憶する場合に、その追加位置を示すものである。
基準操舵角メモリ73fは、基準操舵角である前側操舵角θfおよび後側操舵角θbを記憶するためのメモリであり、前側操舵角θfを記憶するための前側操舵角メモリ73f1と、後側操舵角θbを記憶するための後側操舵角メモリ73f2とを有している。
制御装置70において、磁気ガイド検出センサ79a,79bの検出結果に基づいて、前側操舵角θfが算出されると、その算出された前側操舵角θfが、前側操舵角メモリ73f1に記憶される。また、磁気ガイド検出センサ79c,79dの検出結果に基づいて、後側操舵角θbが算出されると、その算出された後側操舵角θbが、後側操舵角メモリ73f2に記憶される。
前側操舵角メモリ73f1の値と、後側操舵角メモリ73f2の値とは、定期的(例えば、5ms毎)にCPU71により更新される。そして、12個の走行装置5a〜5lに対して設定すべき操舵角θ1〜θ12や走行速度V1〜V12を算出する場合などに、CPU71により用いられる。
基準走行速度メモリ73gは、無人搬送車両1が目標とすべき走行速度である基準走行速度Vを記憶するためのメモリである。上述したように、基準走行速度Vは、走行経路Rを各ステーションC毎に区切った場合の各区間毎に予め定められている。基準走行速度メモリ73gの値は、無人搬送車両1がステーションCを通過する度に、CPU71により更新される。そして、12個の走行装置5a〜5lに対して設定すべき走行速度V1〜V12を算出する場合などに、CPU71により用いられる。
無線通信装置82は、上位プロコンとの間で、無線通信によるデータ通信を行うための既知の回路であり、行先指令や、走行中であるか待機中であるかや、走行中であれば走行位置や、待機中であれば待機位置などのデータ通信が行われる。
次に、図8を参照して、制御装置70で実行される自動運転処理について説明する。図8は、自動運転処理を示すフローチャートである。この処理は、無人搬送車両1を自動運転させるための処理であり、無人搬送車両1の運転モードが自動モードに設定されている間、繰り返し実行される。尚、この処理が実行開始される場合、無人搬送車両1は初期状態として待機中になるものとする。
まず、CPU71は、RAM73のコマンド実行ポインタ73bと、新規コマンドポインタ73dとを比較し、それぞれの示す記憶位置が異なっているかを判別する(S1)。S1の判別が否定される場合は(S1:No)、実行すべき動作コマンドがない場合なので待機する。一方、S1の判別が肯定される場合は(S1:Yes)、実行すべき動作コマンドがある場合なので、コマンド実行ポインタ73bにより示される一の動作コマンドを、動作コマンドバッファメモリ73aから取得する(S2)。
次に、CPU71は、S2の処理で取得した一の動作コマンドを実行する(S3)。本実施形態では、動作コマンドが実行された場合、その動作コマンドに対応する制御(図4(c)参照)が制御装置70により実行されて、無人搬送車両1の走行状態が制御される。
次に、CPU71は、S3の処理で実行した動作コマンドに対応する処理が、制御装置70において終了したかを判定する(S4)。S4の判別が否定される場合(S4:No)、実行中の処理が終了するまで待機する。一方、S4の判別が肯定される場合(S4:Yes)、CPU71は、次に取得すべき一の動作コマンドをコマンド実行ポインタ73bが示すように、コマンド実行ポインタ73bを設定(更新)する(S5)。
次に、CPU71は、動作コマンドバッファメモリ73aに記憶されている動作コマンドを全て取得したかを判別し(S6)、S6の判別が肯定される場合は(S6:Yes)、動作コマンドバッファメモリ73aに記憶されている動作コマンドを全て実行した場合であり、その結果、無人搬送車両1が出発地点から到着地点までの走行経路R上を走行し終えて、待機中となった場合である。よって、この場合は、S1の処理へ戻る。
一方、S6の判別が否定される場合は(S6:No)、動作コマンドバッファメモリ73aの中に、まだ取得していない動作コマンドが残っている場合なので、S2の処理に戻る。S2の処理に戻った後は、動作コマンドバッファメモリ73aに記憶されている動作コマンドが全て実行されるまで、S2〜S6の処理が繰り返し実行される。その結果、出発地点から到着地点までの走行経路R上を走行するための動作コマンドが1つずつ順番に制御装置70により実行されて、最終的に無人搬送車両1が到着地点まで走行し、停車して待機中となる。
次に、図9を参照して、制御装置70で実行される動作コマンド設定処理について説明する。図9は、動作コマンド設定処理を示すフローチャートである。この処理は、上位プロコンから行先指令が通知された場合に、その行先指令に従って無人搬送車両1が走行するように各種設定を行うための処理であり、無人搬送車両1の運転モードが自動モードに設定されている間、繰り返し実行される。
まず、CPU71は、上位プロコンから通知される行先指令を受信したかを判別する(S11)。S11の判別が否定される場合は(S11:No)、行先指令を受信するまで待機する。一方、S11の判別が肯定される場合(S11:Yes)、CPU71は、無人搬送車両1が自動運転中であるかを判別する(S12)。
S12の判別が否定される場合(S12:No)、CPU71は、RAM73の動作コマンドバッファメモリ73aをクリアし(S13)、コマンド実行ポインタ73bおよび新規コマンドポインタ73dが共に、動作コマンドバッファメモリ73aの先頭を示すように設定する(S14)。
次に、CPU71は、RAM73の指令バッファメモリ73cをクリアして(S15)、今回受信した行先指令(即ち、ステーションC列)を指令バッファメモリ73cに記憶する(S16)。そして、CPU71は、変数iを0に設定し(S17)、動作コマンド生成処理を実行する(S18)。
ここで、図10〜図12を参照して、制御装置70で実行される動作コマンド生成処理について説明する。図10は、動作コマンド生成処理を示すフローチャートであり、図11および図12は、動作コマンド設定処理の流れを説明するための説明図である。
この動作コマンド生成処理は、指令バッファメモリ73cに記憶されている行先指令に対応する動作コマンド列を生成し、その生成した動作コマンド列を動作コマンドバッファメモリ73aに書き込むための処理である。尚、上述したように、行先指令は、出発地点となるステーションCから到着地点となるステーションCまでの各ステーションCを走行順に並べたステーションC列で構成されている。
まず、CPU71は、指令バッファメモリ73cに記憶されているステーションC列のうち、(i−1)番目、i番目、及び(i+1)番目の各ステーションCを取得する(S31)。尚、指令バッファメモリ73cでは、先頭に記憶されているステーションCを0番目とし、それ以降は、1番目、2番目、・・・、という順序で、各ステーションCが順番に記憶されているものとする。
次に、CPU71は、変数iが0であるかを判別し(S32)、S32の判別が肯定される場合には(S32:Yes)、前回位置が「該当なし(即ち、「0」)」、現在位置が「i番目のステーションC」、次回位置が「(i+1)番目のステーションC」というステーションCの組み合わせを生成する(S33)。
そして、CPU71は、S33の処理で生成した組み合わせに対応する動作情報データ番号列を、動作情報リンクテーブル72aから取得し(S34)、その取得した動作情報データ番号列の先頭の番号から各番号の並び順に、その番号に対応する動作コマンド列を、動作コマンドテーブル72bから取得する(S35)。
次に、CPU71は、S35の処理で取得した各動作コマンド列を、新規コマンドポインタ73dの示す位置を開始位置として、動作コマンドバッファメモリ73aに書き込み(S36)、新規コマンドポインタ73dが次の動作コマンド列を書き込む位置を示すように、新規コマンドポインタ73dを設定(更新)する(S37)。
尚、上述したように、無人搬送車両1の待機中に行先指令を受信した場合には、動作コマンド設定処理(図9参照)において、S17の処理が実行されて変数iが0に設定され、その後、この動作コマンド生成処理が実行される。
この場合に、例えば、図11(a)に示すように、指令バッファメモリ73cに「C201→C202→C203」というステーションC列が記憶されているとする。ここで、S31の処理が実行されると、0番目のステーションCとして「C201」が取得され、1番目のステーションCとして「C202」が取得される。尚、−1番目のステーションC、即ち、(i−1)番目のステーションCは存在しないので取得されない。
次に、S32の処理が実行されると、S32:Yesへ分岐し、S33の処理が実行される。すると、「0,C201,C202」というステーションCの組み合わせが生成される。
そして、上述したように、動作情報リンクテーブル72a(図4(a)参照)では、「0,C201,C202」というステーションCの組み合わせに対して、「11,22,…,31」という動作情報データ番号列が対応づけられている。よって、次に、S34の処理が実行されると、その「11,22,…,31」という動作情報データ番号列が取得される。
次に、S35の処理が実行されて、その動作情報データ番号列に対応する各動作コマンド列が、上述した動作コマンドテーブル72b(図4(b)参照)から取得される。例えば、動作情報データ番号列が「11,22,…、31」であれば、まず始めに、「11」に対応する3つの動作コマンドが取得され、次に、「22」に対応する4つの動作コマンドが取得され、以下同様に、各動作情報データ番号に対応する動作コマンドが取得され、最後に「31」に対応する2つの動作コマンドが取得される。
その後、S36の処理が実行されると、S35の処理で取得された各コマンド列が、図11(b)に示すように、動作コマンドバッファメモリ73aに記憶される。更に、S37の処理が実行されると、新規コマンドポインタ73dが次の書き込み位置を示すように更新される。
S37の処理が終了したら、次に、CPU71は、i番目のステーションCが、指令バッファメモリ73cに記憶されているステーションC列のうち、最後のステーションCであるかを判別する(S38)。例えば、図11(a)に示すように、指令バッファメモリ73cに3つのステーションCが記憶されている場合には、変数iが2の場合に、最後のステーションCであると判別される。
S38の判別が肯定される場合は(S38:Yes)、指令バッファメモリ73cに記憶されているステーションC列(行先指令)に対応する全ての動作コマンド列を動作コマンドバッファメモリ73aに記憶した場合である。よって、この場合、CPU71は、本処理を終了して、動作コマンド設定処理(図9参照)へ戻る。
一方、S38の判別が否定される場合は(S38:No)、変数iに1を加算して(S39)、S31の処理に戻り、S31〜S38の各処理を繰り返して、残りの動作コマンド列を動作コマンドバッファメモリ73aに記憶していく。
S32の判別が否定される場合(S32:No)、CPU71は、i番目のステーションCが、指令バッファメモリ73cに記憶されているステーションC列のうち、最後のステーションCであるかを判別する(S40)。
S40の判別が否定される場合は(S40:No)、CPU71は、前回位置が「(i−1)番目のステーションC」、現在位置が「i番目のステーションC」、次回位置が「(i+1)番目のステーションC」というステーションCの組み合わせを生成し(S41)、S34の処理へ移行する。
例えば、図11(a)に示すように、指令バッファメモリ73cに「C201→C202→C203」というステーションC列が記憶されていて、変数iの値が1である場合に、S31の処理が実行されると、その後、S32:YesおよびS40:Noへ分岐して、S41の処理が実行される。
その結果、「C201,C202,C203」というステーションCの組み合わせが生成され、次に、S34〜S37の処理が実行される。S34〜S37の処理では、上述したように、まず、「C201,C202,C203」というステーションCの組み合わせに対応する動作コマンド列が生成される。そして、その生成された動作コマンド列が、図11(c)に示すように、動作コマンドバッファメモリ73aのうち、新規コマンドポインタ73dの示す位置に書き込まれる。
これにより、動作コマンドバッファメモリ73aには、既に書き込まれている動作コマンド列に続けて、新たに生成された動作コマンド列が追加される。その後、新規コマンドポインタ73dは次の書き込み位置を示すように更新される。
一方、S40の判別が肯定される場合は(S40:Yes)、CPU71は、前回位置が「(i−1)番目のステーションC」、現在位置が「i番目のステーションC」、次回位置が「該当なし(即ち、「0」)」というステーションCの組み合わせを生成する(S42)。
そして、動作コマンドバッファメモリ73a内の新規コマンドポインタ73dが現在示している位置を、上書開始ポインタ73eが示すように、上書開始ポインタ73eを設定して(S43)、S34の処理へ移行する。
例えば、図11(a)に示すように、指令バッファメモリ73cに「C201→C202→C203」というステーションC列が記憶されている場合には、i=2のステーションCが、最後のステーションCとなる。
よって、この場合に変数iの値が2になって、S31の処理が実行されると、1番目のステーションCとして「C202」が取得され、2番目のステーションCとして「C203」が取得される。尚、3番目のステーションC、即ち、(i+1)番目のステーションCは存在しないので取得されない。
その後、S32:YesおよびS40:Yesへ分岐して、S42の処理およびS43の処理が実行される。その結果、「C202,C203,0」というステーションCの組み合わせが生成され、更に、新規コマンドポインタ73dが現在示している位置を、上書開始ポインタ73eが示すように設定される。
その後、S34〜S37の処理が実行されると、まず、「C202,C203,0」というステーションCの組み合わせに対応する動作コマンド列が生成される。そして、その生成された動作コマンド列が、図11(d)に示すように、動作コマンドバッファメモリ73aのうち、新規コマンドポインタ73dの示す位置に書き込まれる。
その結果、動作コマンドバッファメモリ73aには、既に書き込まれている動作コマンド列に続けて、新たに生成された動作コマンド列が追加される。尚、その後、新規コマンドポインタ73dは次の書き込み位置を示すように更新される。
上述したように、本実施形態では、i番目のステーションCが、指令バッファメモリ73c内の最後のステーションCと判別された場合(S40:Yesの場合)、次回位置が「該当なし」というステーションCの組み合わせが生成される。すると、制御装置70では、無人搬送車両1を最後のステーションCで停車させて待機させるための動作コマンド列が生成されて、動作コマンドバッファメモリ73aに記憶される。
しかしながら、無人搬送車両1の自動運転中に、次の行先指令を受信した場合には、到着地点となるステーションCが変更されるため、動作コマンドバッファメモリ73aに記憶されている動作コマンド列のうち、無人搬送車両1を停車させるための動作コマンド列は不要となる。
そこで、本実施形態では、動作コマンドバッファメモリ73aに記憶されている動作コマンド列のうち、次の行先指令を受信した場合に不要となる動作コマンド列、即ち、無人搬送車両1を停車させるための動作コマンド列が記憶されている先頭の位置を、上書開始ポインタ73eに記憶させている。そして、次に行先指令を受信した場合には、その次の行先指令に対応する動作コマンド列を、動作コマンドバッファメモリ73aのうち、上書開始ポインタ73eにより示される位置と同一の位置から、上書き開始するように構成している。
これにより、上位プロコンから複数回に分けて行先指令が通知される場合でも、最後に通知された行先指令についてのみ、無人搬送車両1を停車させるための動作コマンド列が動作コマンドバッファメモリ73aに残る。よって、無人搬送車両1が最終的な到着地点となるステーションCへ到着するまでに、無人搬送車両1が停車および発進を繰り返すことを抑制できるので、無人搬送車両1にスムーズに走行させられる。
以上の図10に示す動作コマンド生成処理によれば、出発地点となるステーションCから到着地点となるステーションCまでの走行経路Rを無人搬送車両1に走行させる動作コマンド列を、隣設する3つのステーションCの組み合わせと、隣設する2つのステーションCの組み合わせとから取得できる。よって、無人搬送車両1を走行させるための動作コマンド列を、単純な処理で取得できるので、制御装置70に掛かる負担を軽減できる。
ここで、図9の説明に戻る。動作コマンド生成処理(S18)が終了した後は、S11の処理へ戻る。S12の判別が肯定される場合は(S12:Yes)、無人搬送車両1が自動運転中に、新たに行先指令を受信した場合である。この場合、CPU71は、新たに受信した行先指令における先頭のステーションCが、指令バッファメモリ73cに記憶されているステーションC列において何番目であるかを算出する(S19)。
次に、CPU71は、S19の処理で算出した番号を変数iに設定し(S20)、i番目のステーションCが記憶されている位置を開始位置として、新たに受信した行先指令(即ち、ステーションC列)を指令バッファメモリ73cに書き込む(S21)。これにより、新たに受信された行先指令が、指令バッファメモリ73cのうち、その行先指令の先頭と同一のステーションCが記憶されている位置から上書きされる。
そして、CPU71は、上書開始ポインタ73eが現在示している位置を新規コマンドポインタ73dが示すように設定し(S22)、上述した動作コマンド生成処理(S18)を実行する。
ここで、動作コマンド生成処理が実行されると、今回受信した行先指令に対応する動作コマンド列が生成され、それらが動作コマンドバッファメモリ73aに追加される。そして、動作コマンド生成処理(S18)が終了した後は、S11の処理に戻る。
例えば、無人搬送車両1が自動運転中であって、指令バッファメモリ73cに「C201→C202→C203」というステーションC列が記憶されている場合(図11(a)参照)に、「C203→C204」という新たな行先指令を受信したとする。この場合、新たな行先指令の先頭である「C203」は、指令バッファメモリ73c内において2番目に位置するため、S12:Yesへ分岐して、S19の処理では2番目と算出され、その結果、S20の処理では変数iに2が設定される。
そして、S21の処理が実行されると、指令バッファメモリ73c内のうち、新たに受信した行先指令の先頭と同一である「C203」が記憶されている位置から、新たに受信した行先指令「C203→C204」が上書きされる。その結果、図12(a)に示すように、指令バッファメモリ73cには、「C201→C202→C203→C204」というステーションC列が記憶される。
次に、S22の処理が実行されると、図12(a)に示すように、上書開始ポインタ73eに記憶させている位置を新規コマンドポインタ73dが示すように設定される。その結果、動作コマンド生成処理(S18)が実行されて、新たに受信した行先指令に対応する動作コマンド列が生成された場合に、その生成されたコマンド列が、動作コマンドバッファメモリ73aのうち、無人搬送車両1を停車させるための動作コマンド列が記憶されている位置から上書きされ追加される。
より具体的には、動作コマンド生成処理(S18)が実行されると、最初、変数iは2に設定された状態で、S31,S32,S40の各処理が順番に実行される。そして、S32:NoおよびS40:Noへ分岐して、S41の処理が実行される。その結果、「C202,C203,C204」というステーションCの組み合わせが生成される。
その後、S34〜S37の処理が実行されると、まず、「C202,C203,C204」というステーションCの組み合わせに対応する動作コマンド列が生成される。そして、その生成された動作コマンド列が、図12(b)に示すように、動作コマンドバッファメモリ73aのうち、新規コマンドポインタ73dの示す位置(即ち、図12(a)における上書開始ポインタ73eの示す位置)から上書きされる。
次に、S38の処理が実行されるが、図12(a)に示す例では、i=3番目のステーションCが、最後のステーションCとなるので、S38:Noへ分岐する。そして、S39の処理が実行されて、変数iに1が加算され、S31の処理に戻る。
そして、次は、変数iが3に設定された状態で、S31,S32,S40の各処理が順番に実行され、S32:NoおよびS40:Yesへ分岐して、S42およびS43の各処理が実行される。その後、S34〜S37の処理が実行されると、まず、「C203,C204,0」というステーションCの組み合わせに対応する動作コマンド列が生成される。そして、その生成された動作コマンド列が、図12(c)に示すように、動作コマンドバッファメモリ73aのうち、新規コマンドポインタ73dの示す位置に書き込まれる。
その結果、動作コマンドバッファメモリ73aには、既に書き込まれている動作コマンド列に続けて、新たに生成された動作コマンド列が追加される。尚、その後、新規コマンドポインタ73dは次の書き込み位置を示すように更新される。加えて、S43の処理も実行されるため、動作コマンドバッファメモリ73aのうち、次の行先指令を受信した場合に不要となる動作コマンド列の先頭の位置が、上書開始ポインタ73eにより記憶される。
以上の図9に示す動作コマンド設定処理によれば、上位プロコンから行先指令が通知された場合に、その行先指令に従って無人搬送車両1が走行するように各種設定を行うことができる。
尚、上述したように、本実施形態では、上位プロコンから無人搬送車両1に対して行先指令が通知される度に、出発地点となるステーションCから到着地点となるステーションCまでの走行経路R上に並ぶステーションCが、3つ単位で通知される場合の一例を説明している。しかしながら、1回の行先指令の通知において、出発地点となるステーションCから到着地点となるステーションCまでの走行経路R上に並ぶステーションCが全て(又は、4以上)通知される場合でも、当然、本発明を適用できる。
上述した図9に示す動作コマンド処理、及び、図10に示す動作コマンド生成処理によれば、1回の行先指令により、3以上のステーションCが通知される場合でも、その通知された行先指令に対応する動作コマンド列を生成できる。ここで、1回の行先指令により、3以上のステーションCが通知された場合に、動作コマンド生成処理により実行される処理について説明する。まず、無人搬送車両1の待機中に、1回の行先指令により、3以上のステーションCが通知された場合について説明する。
例えば、無人搬送車両1の待機中に、「C201→C202→C203→C204→C205」という行先指令が制御装置70により受信され、その結果、指令バッファメモリ73cの先頭から「C201→C202→C203→C204→C205」というステーションC列が順番に記憶されたとする(図9のS11〜S16参照)。すると、変数iが0に設定され(図9のS17参照)、その後、動作コマンド生成処理(図9のS18)が実行される。
ここで、動作コマンド生成処理が実行されると、i=0なので、「0→C201→C202」というステーションCの組み合わせが生成され、その生成された組み合わせに対応する動作コマンド列が生成される。そして、その生成された動作コマンド列が、動作コマンドバッファメモリ73aのうち、新規コマンドポインタ73dの示す位置に書き込まれ、その後、新規コマンドポインタ73dが、次の書き込み位置を示すように更新される。
以下同様に、i=1の場合には、「C201→C202→C203」というステーションCの組み合わせが、i=2の場合には、「C202→C203→C204」というステーションCの組み合わせが、i=3の場合には、「C203→C204→C205」というステーションCの組み合わせが、i=4の場合には、「C204→C205→0」というステーションCの組み合わせが、それぞれ生成される。
そして、生成されたステーションCの組み合わせ毎に、そのステーションCに対応する動作コマンド列が生成され、その生成された動作コマンド列が、動作コマンドバッファメモリ73aのうち、新規コマンドポインタ73dの示す位置に書き込まれる。更に、生成された動作コマンド列が動作コマンドバッファメモリ73aに書き込まれると、その度に、新規コマンドポインタ73dが、次の書き込み位置を示すように更新される。その結果、動作コマンドバッファメモリ73aには、「C201→C202→C203→C204→C205」という行先指令に対応する動作コマンド列が記憶される。
次に、無人搬送車両1が自動運転中に、上位プロコンから新たな行先指令が通知され、その新たな行先指令において、3以上のステーションCが通知された場合について説明する。
例えば、無人搬送車両1が自動運転中であって、指令バッファメモリ73cに「C201→C202→C203→C204→C205」というステーションC列が記憶されている場合に、「C205→C206→C207→C208→C209」という新たな行先指令を受信したとする。この場合、新たな行先指令の先頭である「C205」は、指令バッファメモリ73c内において4番目に位置するため、変数iに4が設定される(図9のS19,S20参照)。
そして、指令バッファメモリ73cの内のうち、新たに受信した行先指令の先頭と同一である「C205」が記憶されている位置から、新たに受信した行先指令「C205→C206→C207→C208→C209」が上書きされる(図9のS21参照)。その結果、指令バッファメモリ73cには、「C201→C202→C203→C204→C205→C206→C207→C208→C209」というステーションC列が記憶される。
その後、上書開始ポインタ73eに記憶させている位置を新規コマンドポインタ73dが示すように設定されると(図9のS22参照)、動作コマンド生成処理(図9のS18)が実行される。
ここで、動作コマンド生成処理が実行されると、i=4なので、「C204→C205→C206」というステーションCの組み合わせが生成され、その生成された組み合わせに対応する動作コマンド列が生成される。そして、その生成された動作コマンド列が、動作コマンドバッファメモリ73aのうち、新規コマンドポインタ73dの示す位置に書き込まれる。その結果、生成された動作コマンド列が、動作コマンドバッファメモリ73aのうち、ステーションC205で無人搬送車両1を停車させるための動作コマンド列が記憶されている位置から上書きされ追加される。その後、新規コマンドポインタ73dが、次の書き込み位置を示すように更新される。
そして、i=5の場合には、「C205→C206→C207」というステーションCの組み合わせが、i=6の場合には、「C206→C207→C208」というステーションCの組み合わせが、i=7の場合には、「C207→C208→C209」というステーションCの組み合わせが、i=8の場合には、「C208→C209→0」というステーションCの組み合わせが、それぞれ生成される。
そして、生成されたステーションCの組み合わせ毎に、そのステーションCに対応する動作コマンド列が生成され、その生成された動作コマンド列が、動作コマンドバッファメモリ73aのうち、新規コマンドポインタ73dの示す位置に書き込まれる。更に、生成された動作コマンド列が動作コマンドバッファメモリ73aに書き込まれると、その度に、新規コマンドポインタ73dが、次の書き込み位置を示すように更新される。
その結果、動作コマンドバッファメモリ73aには、「C205→C206→C207→C208→C208」という行先指令に対応する動作コマンド列が追加される。より具体的には、動作コマンドバッファメモリ73aには、ステーションC205で無人搬送車両1を停車させずにそのまま通過させ、その後、ステーションC208で無人搬送車両1を停車させる動作コマンド列が追加される。
以上説明したように、上述した図9に示す動作コマンド処理、及び、図10に示す動作コマンド生成処理によれば、1回の行先指令により、3以上のステーションCが通知される場合でも、無人搬送車両1を走行させるための動作コマンド列を生成できる。
次に、図13を参照して、制御装置70で実行される操舵角自動設定処理について説明する。図13は、操舵角自動設定処理を示すフローチャートである。この処理は、無人搬送車両1が磁気ガイドG上を走行するように、各走行装置5a〜5lに設けられている車軸6aの操舵角θ1〜θ12、および、車輪6bの走行速度V1〜V12を設定するための処理であり、無人搬送車両1の運転モードが自動モードに設定されている間、繰り返し実行される。
まず、CPU71は、無人搬送車両1が走行中であるかを判別する(S51)。S51の判別が否定される場合は(S51:No)、無人搬送車両1が走行中になるまで待機する。一方、S51の判別が肯定される場合(S51:Yes)、CPU71は、RAM73の基準走行速度メモリ73gから基準走行速度Vを取得して(S52)、現在設定されている運転モードの種別が、何であるかを判別する(S53)。
S53の判別の結果、右倣いモードと判別された場合(S53:右倣いモード)、CPU71は、無人搬送車両1の右側最前列および右側最終列の各走行装置5b,5lに設けられた各磁気ガイド検出センサ79b,79dから、磁気ガイドGの検出結果を取得する(S54)。
次に、CPU71は、右側最前列および右側最終列の各走行装置5b,5lごとに、磁気ガイド検出センサ79b,79dと、磁気ガイドGとの偏差(横ずれ)を、S54の処理で取得した検出結果に基づいて算出する(S55)。そして、S58の処理へ移行する。
一方、S53の判別の結果、左倣いモードと判別された場合(S53:左倣いモード)、CPU71は、無人搬送車両1の左側最前列および左側最終列の各走行装置5a,5kに設けられた各磁気ガイド検出センサ79a,79cから、磁気ガイドGの検出結果を取得する(S56)。
次に、CPU71は、左側最前列および左側最終列の各走行装置5a,5kごとに、磁気ガイド検出センサ79a,79cと、磁気ガイドGとの偏差(横ずれ)を、S56の処理で取得した検出結果に基づいて算出する(S57)。そして、S58の処理へ移行する。
S58の処理では、CPU71は、S55またはS57の処理で算出された偏差を減少させる2つの基準操舵角(前側操舵角θf、及び、後側操舵角θb)を算出する(S58)。尚、S55の処理が実行された場合であれば、磁気ガイド検出センサ79bの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させる場合の走行装置5bの操舵角を、前側操舵角θfとして算出する。また、磁気ガイド検出センサ79dの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させる場合の走行装置5lの操舵角を、後側操舵角θbとして算出する。
一方、S57の処理が実行された場合であれば、磁気ガイド検出センサ79aの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させる場合の走行装置5aの操舵角を、前側操舵角θfとして算出する。また、磁気ガイド検出センサ79cの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させる場合の走行装置5kの操舵角を、後側操舵角θbとして算出する。
S58の処理において前側操舵角θfおよび後側操舵角θbが算出されると、前側操舵角θfが前側操舵角メモリ73f1に記憶され、後側操舵角θbが後側操舵角メモリ73f2に記憶される。
尚、上述したように、ここで算出される前側操舵角θfおよび後側操舵角θbは、あくまでも、制御装置70が操舵角設定テーブル72cを参照するための基準操舵角なので、走行装置5a,5b,5k,5lに対して設定される操舵角と一致するとは限らない。
次に、CPU71は、S58の処理で算出した2つの基準操舵角(前側操舵角θf、及び、後側操舵角θb)を用いて、各走行装置5a〜5lに対応する操舵角θ1〜θ12、および、走行速度比率Va1〜Va12を、操舵角設定テーブル72cから取得する(S59)。
尚、S58の処理で算出した前側操舵角θfがプラスの角度であれば、そのまま、その算出した前側操舵角θfおよび後側操舵角θbに対応する各操舵角θ1〜θ12、及び、各走行速度比率Va1〜Va12を、操舵角設定テーブル72cの中から取得する。
一方、前側操舵角θfがマイナスの角度であれば、一旦、前側操舵角θfおよび後側操舵角θbにそれぞれ−1を乗じて、前側操舵角θfの符号をプラスにする。そして、−1乗じた前側操舵角θfおよび後側操舵角θbに対応する各操舵角θ1〜θ12、及び、各走行速度比率Va1〜Va12を、操舵角設定テーブル72cの中から取得する。そして、その取得した各操舵角θ1〜θ12については、それぞれ−1を乗じ、その結果得られた値を、無人搬送車両1における走行装置5a〜5lの各列単位で、左右入れ替える。そして、その結果得られた値を、最終的な各操舵角θ1〜θ12とする。また、各走行速度比率Va1〜Va12については、単に、走行装置5a〜5lの各列単位で、左右入れ替える。そして、その結果得られた値を、最終的な走行速度比率Va1〜Va12とする。
そして、CPU71は、S52の処理で取得した基準走行速度Vと、S59の処理で取得した走行速度比率Va1〜Va12とから、各走行装置5a〜5lの走行速度V1〜V12を算出する(S60)。
次に、CPU71は、各走行装置5a〜5lについて、S59の処理で取得した操舵角θ1〜θ12を設定すると共に、S60の処理で算出した走行速度V1〜V12を設定する(S61)。より具体的には、各走行装置5a〜5lの各車軸6aの操舵角θ1〜θ12を、S59の処理で取得した操舵角θ1〜θ12に設定すると共に、各走行装置5a〜5lの各車輪6bの走行速度が、S60の処理で算出した走行速度V1〜V12となるように、各車軸6aの回転速度を設定する。
以上の図13に示す操舵角自動設定処理によれば、各走行装置5a〜5lの車軸6aに対して操舵角θ1〜θ12を設定する場合に、各車軸6aごとに計算式を用いて各操舵角θ1〜θ12を算出する必要がないため、CPU71に掛かる負担を少なくできる。よって、各操舵角θ1〜θ12の設定を短い周期で実行することができるので、走行経路R上を無人搬送車両1に円滑に走行させられる。
例えば、本実施形態に対して、各操舵角θ1〜θ12を算出するための計算式を、各車軸6aごとに予め用意しておき、各走行装置5a〜5lの車軸6aの操舵角θ1〜θ12を設定(補正)する場合に、それらの計算式を用いて各操舵角θ1〜θ12を個別に算出するように構成しておくことも考えられる。
しかしながら、走行経路R上を無人搬送車両1に円滑に走行させるためには、各車軸6aの操舵角θ1〜θ12を、より短い周期で設定(補正)する必要があるので、計算式を用いて各操舵角θ1〜θ12を個別に算出するように構成すると、その設定(補正)を短い周期で実行できないおそれがある。
即ち、小型車両のように、無人搬送車両1に設けられている走行装置5の数が少ない場合は、計算式を用いて各操舵角θを算出するように構成していても、算出する操舵角θの数が少ないため、演算量も少なく、演算時間も短い。よって、CPU71に掛かる負担が少ない。しかしながら、本実施形態のように、走行装置5a〜5lの数が多い場合は、計算式により算出する操舵角θ1〜θ12の数が多いため、演算量が多くなり、演算時間も長くなる。よって、CPU71に大きな負担が掛かる。
従って、走行装置5a〜5lの数が多い場合に、仮に、各車軸6aの操舵角θ1〜θ12を設定(補正)する周期を短くすると、その周期内に演算を終了できず、制御遅れが発生するおそれがある。一方で、その周期を長くすると、制御遅れは発生しないものの、走行経路R上を無人搬送車両1に円滑に走行させられなくなる。尚、演算能力の高いCPUを搭載して、演算時間を短くすることも考えられるが、コストが高くなるため、現実的ではない。また、演算能力の高いCPUは、演算時以外には過剰性能となるため、その性能を無駄にしてしまう。
これに対して、本実施形態では、各走行装置5a〜5lに対して操舵角θ1〜θ12を設定する場合に、操舵角設定テーブル72cから、各操舵角θ1〜θ12を取得している。よって、計算式により各操舵角θ1〜θ12を算出する場合よりも、演算量を少なくできるので、CPU71に掛かる負担を少なくでき、CPU71の演算時間も短くできる。従って、本実施形態のように、走行装置5a〜5lの数が多い場合でも、CPU71に掛かる負担が大きくならず、演算時間も長くならない。故に、各操舵角θ1〜θ12の設定を短い周期で実行することができ、走行経路R上を無人搬送車両1に円滑に走行させられる。
また、走行装置5a〜5lの数が多い場合でも、CPU71に掛かる負担が大きくならないため、CPU71の演算能力が高くなくても、制御遅れを発生させずに、各操舵角θ1〜θ12の設定を短い周期で実行することができる。よって、CPU71に汎用のCPUを用いることができ、コストを抑制できる。このように、走行装置5a〜5lの数が多い場合、本発明は特に好適である。
また、本実施形態では、操舵角θ1〜θ12に加えて、走行速度比率Va1〜V12も、操舵角設定テーブル72において、それぞれ予め設定している。これにより、走行速度V1〜V12を算出する場合に、無人搬送車両1が目標とすべき走行速度である基準走行速度Vに対して、各走行速度比率Va1〜Va12を乗算するという簡単な演算だけで、各走行速度V1〜V12を算出できる。そのため、CPU71に掛かる負担が大きくならず、演算時間も長くならない。
よって、各走行速度V1〜V12を算出するための計算式を、各車軸6aごとに予め用意しておき、各走行速度V1〜V12を設定する場合に、それらの計算式を用いて各走行速度V1〜V12を1つずつ算出するように構成したときと比較して、CPU71に掛かる負担を少なくできる。従って、各操舵角θ1〜θ12を設定する場合と同様に、走行装置5a〜5lの数が多い場合でも、各走行速度V1〜V12の設定を短い周期で実行することができ、走行経路R上を無人搬送車両1に円滑に走行させられる。また、CPU71に汎用のCPUを用いることができ、コストを抑制できる。故に、走行装置5a〜5lの数が多い場合、本発明は特に好適である。
尚、各走行装置5の数が、本実施形態より更に多い場合についても、本実施形態と同様に構成すれば、各走行装置5に対して操舵角θや走行速度Vを設定する場合に、本実施形態と同様に、CPU71に掛かる負担を少なくでき、CPU71の演算時間も短くできる。よって、各車軸6aの操舵角θや、各車輪6bの走行速度Vの設定を短い周期で実行することができ、走行経路R上を無人搬送車両1に円滑に走行させられる。また、CPU71に汎用のCPUを用いることができ、コストを抑制できる。
また、上述した操舵角自動設定処理によれば、無人搬送車両1の運転モードが右倣いモードの場合、磁気ガイド検出センサ79b,79dの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1の進行方向が制御される。その結果、右側最前列および右側最終列の走行装置5b,5lに設けられている各車軸6aは、常に、走行経路R上に存在するように制御される。尚、無人搬送車両1の運転モードが左倣いモードの場合についても同様に、左側最前列および左側最終列の走行装置5a,5kに設けられている各車軸6aが、常に、走行経路R上に存在するように制御される。
よって、走行経路Rがカーブ、又は、屈折している場合に、無人搬送車両1がそこを通過したとしても、無人搬送車両1の前面周辺および後面周辺は共に走行経路R上に存在することとなり、無人搬送車両1の前面および後面のうち、進行方向と反対側の面が走行経路R上から外れて、その進行方向と反対側の面が、左右に振れることを防止できる。従って、走行経路Rの周辺を通行する歩行者などに対する安全性を高められる。
また、本実施形態では、前側操舵角θf、及び、後側操舵角θbの2つの基準操舵角を基準にして、操舵角設定テーブル72cを構成している。尚、基準操舵角を3つ以上設けて、無人搬送車両1の各車軸6aの操舵角θ1〜θ12を設定し、操舵角設定テーブル72cを構成しても良い。
尚、上記実施形態に記載の「動作コマンドバッファメモリ73aに記憶される動作コマンド列」が、特許請求の範囲に記載の「走行データ」に対応する。また、上記実施形態に記載の「走行経路R上で隣設する3つのステーションCの組み合わせに対応する動作コマンド列」が、特許請求の範囲に記載の「通過データ」に対応する。また、上記実施形態に記載の「走行経路R上で隣設する2つのステーションCの組み合わせに対応する動作コマンド列」が、特許請求の範囲に記載の「出発データ」や「到着データ」に対応する。
以上、実施形態に基づき本発明を説明したが、本発明は上記実施形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変更が可能であることは容易に推察できるものである。
例えば、上記実施形態で挙げた具体的数値は一例であり、他の数値を採用することは当然可能である。
また、上記実施形態では、磁気ガイド検出センサ79a〜79dの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させる場合の走行装置5a,5bの操舵角を前側操舵角θfとし、走行装置5k,5lの操舵角を後側操舵角θbしている。しかしながら、磁気ガイド検出センサ79a〜79dの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させることが可能であれば、どの走行装置5a〜5lの操舵角を、前側操舵角θfや、後側操舵角θbとしても良い。
また、上記実施形態では、磁気ガイド検出センサ79a〜79dを、走行装置5a,5b,5k、5lに設置しているが、磁気ガイドGを検出可能な場所であれば、無人搬送車両1のどこに設置しても良い。尚、この場合も、磁気ガイド検出センサ79a〜79dの検出部の中央に磁気ガイドGが収まるように、無人搬送車両1を走行させることが可能であれば、どの走行装置5a〜5lの操舵角を、前側操舵角θfや、後側操舵角θbとしても良い。
また、上記実施形態の操舵角設定テーブル72cは、磁気ガイド検出センサ79a〜79dの検出結果に基づいて算出される前側操舵角θfおよび後側操舵角θbに対して、操舵角θ1〜θ12と、走行速度比率Va1〜Va12とを対応付けたテーブルであるが、磁気ガイド検出センサ79a〜79dの検出結果に対して、操舵角θ1〜θ12と、走行速度比率Va1〜Va12とを対応付けたテーブルとしても良い。これにより、制御装置70において操舵角設定テーブル72cを用いる場合に、磁気ガイド検出センサ79a〜79dの検出結果そのものを用いて、操舵角θ1〜θ12と、走行速度比率Va1〜Va12を取得できるので、前側操舵角θfおよび後側操舵角θbを算出する手間を省ける。よって、制御装置70に掛かる負担を軽減できる。
また、上記実施形態では、前側操舵角θfおよび後側操舵角θbの2つの操舵角θf,θbを基準として、操舵角設定テーブル72cを作成しているが、前側操舵角θfおよび後側操舵角θbの一方と、無人搬送車両1の旋回半径Rとを基準として、操舵角設定テーブル72cを作成しても良い。尚、この場合には、旋回半径Rの範囲(例えば、5〜20m)を予め定めておき、所定ピッチ(例えば、0.2m単位)ごとに、旋回半径Rを設定して、操舵角θf,θbの一方と、旋回半径Rとを漏れなく組み合わせたテーブル72cを作成する。
また、上記実施形態の操舵角設定テーブル72cでは、前側操舵角θfおよび後側操舵角θbごとに、基準走行速度Vに対する走行速度比率Va1〜Va12を記憶しているが、走行速度比率Va1〜Va12に替えて、基準走行速度Vに対応する走行速度V1〜V12を記憶しておくように構成しても良い。
また、上記実施形態では、上位プロコンから無人搬送車両1に対して、1回の行先指令により、ステーションCが3つ単位で通知されるように構成されているが、1回の行先指令により、任意の数のステーションCが通知される場合でも、行先指令毎に、通知されるステーションCの数が変わる場合でも、当然、本発明を適用できる。
また、上記実施形態では、自動運転処理(図8参照)、動作コマンド設定処理(図9参照)、及び、操舵角自動設定処理(図13参照)を繰り返し実行するように構成しているが、各処理を定期的(例えば、5ms毎)に実行するように構成しても良い。
また、上記実施形態では、本発明を無人搬送車両1に適用した形態について説明したが、有人無人に関わらず、行先指令に基づいて操舵を制御するように構成された搬送車両であれば本発明を適用できる。