以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。なお、以下で説明される各実施の形態および各変形例は、適宜選択的に組み合わされてもよい。
また、以下では、自律走行搬送ロボット(AMR:Autonomous Mobile Robot)に、ロボットアームが組み合わされた自走装置を例に挙げて説明する。ロボットアームは、たとえば、協働ロボットである。なお、自走装置は、自律走行搬送ロボットの代わりに、無人搬送車(AGV:Automated Guided Vehicle)にロボットアームが組み合わされていてもよい。
また、自走装置は、自走可能な走行体を備えていればよく、ロボットアームを備えていなくてもよい。すなわち、自走装置は、単に、自律走行搬送ロボットまたは無人搬送車であってもよい。
また、以下では、自走装置に牽引される被牽引体の例として、台車を例に挙げて説明する。ただし、被牽引体は、台車に限定されず、車輪が付いた移動可能な周辺機器(たとえば、バッテリ駆動するバリ取り用の機械)であってもよい。
[実施の形態1]
<A.走行システムの概略構成>
図1は、本実施の形態の走行システム1の側面図である。図2は、走行システム1の上面図である。
図1、図2および後出の図面には、前方、後方、右方、左方、上方および下方の6方向が適宜示されている。前方および後方は、自走装置100が直進走行する場合の進行方向であり、互いに反対方向である。右方は、自走装置100から前方を見た場合の右手方向である。左方は、自走装置100から前方を見た場合の左手方向であり、右方の反対方向である。上方は、自走装置100から見て空側であり、下方は、自走装置100が走行する床面側である。
なお、本実施の形態では、後述するトレイ66に対してロボットアーム11が位置する方向を前方といい、その反対方向を後方というが、いずれの方向を前方といい、いずれの方向を後方というかは、特に限定されない。
図1および図2に示されるように、走行システム1は、自走装置100と、被牽引体としての台車200とを備える。自走装置100と、台車200とは、連結部45で連結されている。台車200は、自走装置100により牽引される。台車200は、典型的には、たとえば、材料ストッカ、製品ストッカ、測定器ストッカ、または、チャックストッカである。
自走装置100は、図示しないサーバと双方向通信をする。当該通信は、たとえば、無線LAN(Local Area Network)により実現される。あるいは、上記の通信は、移動体用の無線システムにより実現される。移動体用の無線システムとして、たとえば、第4世代通信システム(4G)、第5世代通信システム(5G)を用いることができる。
図1に示されるように、自走装置100は、走行体61と、ロボットアーム11と、カメラ35と、連結部45bとを有する。走行体61は、モータを用いた車輪駆動により走行可能(自走可能)に構成されている。ロボットアーム11は、走行体61に搭載されている。ロボットアーム11の先端部には、エンドエフェクタ40が装着されている。エンドエフェクタ40は、ロボットアーム11の先端に着脱可能に取り付けられ、対象物に対して作業を行なう。本例では、ロボットアーム11には、エンドエフェクタ40として、把持ハンドが接続される。自走装置100は、エンドエフェクタ40により、搬送対象物を把持可能に構成されている。
走行体61は、走行本体部62と、カバー部63とを有する。カバー部63は、走行本体部62上に設けられている。カバー部63は、走行本体部62上に内部空間を形成するカバー体からなり、その内部には、ロボットアーム11の駆動用モータ、自走装置100の動力源として設けられるバッテリ、または、自走装置100を制御するための各種制御部品などが収容されている。なお、走行本体部62の構造については、後に詳しく説明する。
カバー部63は、頂面65を有する。頂面65上には、搬送対象物を載置するためのトレイ66が設けられている。ロボットアーム11は、頂面65に接続されている。ロボットアーム11は、頂面65から上方に向けて延出している。走行体61に対するロボットアーム11の接続位置は、トレイ66と前後方向に並んでいる。
ロボットアーム11は、基台部12と、アーム部13とを有する。基台部12は、走行体61に対して回転可能に接続されている。アーム部13は、基台部12に対して接続されている。アーム部13は、基台部12からアーム状に延びている。
ロボットアーム11は、プログラム制御型ロボットである。ロボットアーム11は、本例では、垂直多関節型ロボットである。詳しくは、本例では、ロボットアーム11は、6自由度(6つの可動部)を有する6軸ロボットである。なお、6軸が制御可能なロボットアーム11の代わりに、走行体61に6軸以外の多軸制御可能なロボットアームが搭載されてもよい。
台車200は、本体部205と、複数の車輪220とを備える。詳しくは、台車200は、右側前輪220Rfと、左側前輪220Lf(図3参照)と、右側後輪220Rbと、左側前輪(図示せず)とを備える。
台車200は、連結部45aをさらに備える。自走装置100と台車200とは、連結部45を構成する連結部45aと連結部45bとで、互いに連結される。
図2に示されるように、台車200の本体部205は、収容部210と、複数の側壁部251とを備える。複数の側壁部251により収容部210が形成されている。詳しくは、台車200は、前側の側壁部251Fと、後側の側壁部251Bと、右側の側壁部251Rと、左側の側壁部251Lとを備える。本例では、各側壁部251の頂部211は、平らな形状となっている。各側壁部251によって、台車200の大きな傾き等により台車200に積載された荷物(積載物)が落下してしまうことを防いでいる。
図1および図2に示されるように、カメラ35は、走行体61に設置されている。カメラ35は、自走装置100の後方を撮像可能に設置されている。詳しくは、カメラ35は、台車200を撮像可能な位置に設置されている。より詳しくは、カメラ35は、台車200の前側の側壁部251Fを撮像可能な位置に設置されている。
本例のように、自走装置100が台車200と連結されている場合には、カメラ35は、側壁部251Fの少なくとも一部を含む領域を撮像する。図2の状態では、カメラ35の光軸Jと、側壁部251Fとが略直交している。
カメラ35は、本例では、典型的には、デジタルカメラである。カメラ35は、少なくとも動画像を撮像可能である。なお、カメラ35の設置位置は、図示した位置に限定されるものではない。台車200に貼り付けられた後述する指標部300が撮像可能な位置であれば、特に限定されるものではない。
<B.自走装置の走行本体部>
図3は、走行本体部62を示す上面図である。
図3に示されるように、走行本体部62は、第1駆動輪71と、第1走行用モータ77と、第2駆動輪72と、第2走行用モータ78と、複数の従動輪51(51Rf,51Lf,51Rb,51Lb)とを有する。従動輪51は、オムニホイールからなる。従動輪51は、ホイール56と、複数のローラ60とを有する。
走行本体部62は、第1車軸73と、第2車軸74と、減速機75と、減速機76とを有する。第1走行用モータ77は、減速機75を介して第1駆動輪71に接続されている。第2走行用モータ78は、減速機76を介して第2駆動輪72に接続されている。
走行本体部62は、フレーム86と、第1支持アーム93と、第2支持アーム94と、第1支持軸91と、第2支持軸92と、第3支持アーム88と、第3支持軸87とをさらに有する。
走行本体部62は、第3車軸96と、第4車軸97と、第5車軸98と、第6車軸99とをさらに有する。従動輪51Rfは、第3車軸96を介して、第1支持アーム93に接続されている。従動輪51Lfは、第4車軸97を介して、第2支持アーム94に接続されている。従動輪51Rbは、第5車軸98を介して、第3支持アーム88に接続されている。従動輪51Lbは、第6車軸99を介して、第3支持アーム88に接続されている。本例では、連結部45bは、フレーム86に接続されている。
このような走行本体部62のハードウェア構成は公知であるため、ここでは、当該構成についての詳細な説明は繰り返さない。以下、走行本体部62による走行体61の移動方向について、説明する。
走行体61は、第1駆動輪71および第2駆動輪72に対して、互いに同じ回転が付与されることによって、前後方向に直進し、第1駆動輪71および第2駆動輪72に対して、互いに異なる回転が付与されることによって、左右方向に旋回動作する(差動2輪駆動方式)。第1駆動輪71、第2駆動輪72および従動輪51は、左右に操舵不可である。
より具体的には、走行体61は、第1駆動輪71および第2駆動輪72を、互いに等しい回転数で、かつ、正転させることによって、前方に直進する(前進)。走行体61は、第1駆動輪71および第2駆動輪72を、互いに等しい回転数で、かつ、反転させることによって、後方に直進する(後進)。
走行体61は、第2駆動輪72を正転させ、第1駆動輪71を第2駆動輪72よりも大きい回転数で正転させることによって、左方に旋回動作する(左旋回)。走行体61は、第1駆動輪71を正転させ、第2駆動輪72を第1駆動輪71よりも大きい回転数で正転させることによって、右方に旋回動作する(右旋回)。
走行体61は、第1駆動輪71を正転させ、第2駆動輪72を第1駆動輪71と同じ回転数で反転させることによって、回転動作する(左回転)。上面視における走行体61の回転中心は、理想的には、第1軸121および第2軸122の軸上であって、第1駆動輪71および第2駆動輪72の中心位置に対応している。
なお、第1駆動輪71を反転させ、第2駆動輪72を第1駆動輪71と同じ回転数で正転させた場合には、走行体61の回転動作の方向が上記の場合と逆転する(右回転)。本発明における「旋回動作」は、上記の右旋回、左旋回、および、回転(左回転、右回転)の動作を含む。
<C.動作制御に関する装置構成>
図4は、自走装置100の動作制御に関する装置構成を示す図である。
図4に示されるように、自走装置100は、制御装置501と、ROM(Read Only Memory)502と、RAM(Random Access Memory)503と、通信インターフェイス504と、レーザセンサ505と、モータ駆動装置506と、記憶装置510と、ロボットアーム11と、アンテナ31と、カメラ35とを有する。これらのコンポーネントは、バス509に接続されている。
制御装置501は、たとえば、少なくとも1つの集積回路によって構成されている。集積回路は、たとえば、少なくとも1つのCPU(Central Processing Unit)、少なくとも1つのGPU(Graphics Processing Unit)、少なくとも1つのASIC(Application Specific Integrated Circuit)、少なくとも1つのFPGA(Field Programmable Gate Array)、または、それらの組み合わせなどによって構成され得る。一例として、制御装置501は、PLC(Programmable Logic Controller)である。
制御装置501は、制御プログラム511またはオペレーティングシステムなどの各種プログラムを実行することによって、自走装置100の動作を制御する。制御装置501は、制御プログラム511の実行命令を受け付けたことに基づいて、記憶装置510またはROM502からRAM503に制御プログラム511を読み出す。RAM503は、ワーキングメモリとして機能し、制御プログラム511の実行に必要な各種データを一時的に格納する。
制御装置501は、走行体61の走行制御を行なう。制御装置501は、ロボットアーム11の動作を制御する。すなわち、制御装置501は、ロボットコントローラとしても機能する。なお、自走装置100は、走行体61の走行を制御する制御装置と、ロボットアーム11の動作を制御する制御装置とを、別体として備えてもよい。
通信インターフェイス504には、アンテナ31などが接続されている。自走装置100は、アンテナ31および通信インターフェイス504を介して、自走装置100および外部機器(たとえば、サーバ)の間の無線通信を実現する。
レーザセンサ505は、図1のカバー部63に収容されている。レーザセンサ505は、自ら回転しながらレーザ光を周囲に照射し、当該レーザ光の反射光を受光することによって、レーザセンサ505の周囲にある物体を検出する。レーザセンサ505は、レーザセンサ505からレーザ光の走査面内に存在する物体までの距離を、レーザセンサ505の回転軸周りの角度別に表わした2次元距離データDとして、制御装置501に出力する。レーザセンサ505の走査面は、水平面に対して傾いている。そのため、自走装置100は、移動することで周囲を3次元的にスキャンすることができる。
モータ駆動装置506は、制御装置501からのモータ駆動指令に従って、第1走行用モータ77および第2走行用モータ78の回転を制御する。モータ駆動指令は、たとえば、第1走行用モータ77および第2走行用モータ78の正転指令、第1走行用モータ77および第2走行用モータ78の逆転指令、ならびに、第1走行用モータ77および第2走行用モータ78の回転数(回転速度)を含む。
記憶装置510は、たとえば、ハードディスクまたはフラッシュメモリなどの記憶媒体である。記憶装置510は、自走装置100の動作制御するための制御プログラム511、走行エリアの3次元マップ512などを格納する。詳しくは、制御プログラム511は、走行体61の走行を制御するためのプログラムと、ロボットアーム11の動作を制御するプログラムとを含む。なお、制御プログラム511および3次元マップ512は、記憶装置510に限定されず、制御装置501の記憶領域(たとえば、キャッシュメモリなど)、ROM502、RAM503、または、外部機器(たとえば、サーバー)などに格納されてもよい。
また、制御プログラム511は、単体のプログラムとしてではなく、任意のプログラムの一部に組み込まれて提供されてもよい。この場合、制御プログラム511による走行体61の走行制御処理およびロボットアーム11の動作制御処理は、任意のプログラムと協働して実現される。
このような一部のモジュールを含まないプログラムであっても、本実施の形態に従う制御プログラム511の趣旨を逸脱するものではない。さらに、制御プログラム511によって提供される機能の一部または全部は、専用のハードウェアによって実現されてもよい。さらに、少なくとも1つのサーバが制御プログラム511の処理の一部を実行する所謂クラウドサービスのような形態で、自走装置100が構成されてもよい。
<D.台車の指標部>
図5は、図2のv-v線矢視断面図である。
図5に示されるように、指標部300は、台車200に付されている。指標部300は、台車200の側壁部251Fに付されている。指標部300は、上下方向において、台車200の車輪220よりも頂部211に付されている。指標部300は、検出精度の観点から、平らな面に付されることがこのましい。
たとえば、指標部300は、側壁部251Fに直に貼り付けられる。指標部300の裏面は、粘着シートで構成されてもよい。または、指標部300は、側壁部251Fに取り付けられた透明のケースに入れられていてもよい。
指標部300は、特定の図形である。指標部300は、本例では、マーカである。指標部300は、台車200の傾きを自走装置100が検出するために利用される。指標部300は、台車200の床面910(走行面)に対する傾きを検出するために利用される。詳しくは、指標部300は、本体部205の床面910に対する傾き(図8参照)を検出するために利用される。なお、傾きは、典型的には、傾斜角度で表される。
なお、本体部205だけではなく、自走装置100も同様に傾いたときには、指標部300によって、自走装置100に対する本体部205の傾きの度合いが検出されることになる。
指標部300として、たとえば、AR(Augmented Reality)マーカを用いることができる。本例では、ARマーカの一つであるAprilTagを図示している。なお、AprilTagは、3次元上の物体の位置および姿勢を検出するアプリケーション用の視覚的なマーカである。AprilTagは、工作機械でも用いられている。AprilTagは、符号化するデータが少なくなるように設計されているため、より高速に復号化できる。よって、リアルタイム性を必要とする走行システム1に適している。
本例では、AprilTagが台車200に付されているため、自走装置100に対する台車200の相対的位置および姿勢を、自走装置100が検出できる。
なお、指標部300は、ARマーカに限定されるものではない。後述するように、自走装置100は、少なくとも、カメラ35に対する指標部300の相対位置を検出できればよい。このため、指標部300は、自走装置100側のアプリケーションが認識できるものであればよい。指標部300は、アプリケーションが指標部300の位置を追従できるものであればよい。
<E.自走装置の機能的構成>
図6は、自走装置100の機能的構成を説明するための機能ブロック図である。
図6に示されるように、制御装置501は、機能構成の一例として、走行制御部550と、ロボット制御部560と、データ処理部555とを含む。
ロボット制御部560は、ロボットアーム11およびエンドエフェクタ40の動作を制御するための機能構成である。ロボット制御部560は、ロボットアーム11の6つの可動部(6軸)の動作を制御する。具体的には、ロボット制御部560は、ロボットアーム11のアクチュエータ(図示せず)の動作(回転角、回転速度等)を制御する。
さらに、ロボット制御部560は、エンドエフェクタ40の電動ハンドの動きを制御する。ロボット制御部560は、電動ハンドの把持動作を制御する。具体的には、ロボット制御部560は、エンドエフェクタ40内のアクチュエータ(図示せず)の動作を制御する。
走行制御部550は、自走装置100の走行を制御するための機能構成である。走行制御部550は、レーザセンサ505から入力される2次元距離データDと、3次元マップ512とを比較することにより、自走装置100の現在位置を特定する。制御装置501は、現在位置を特定することで、3次元マップ512上の予め定められた経路に沿って自走装置100を走行させる。なお、制御装置501は、3次元マップ512を生成することもできる。
さらに、走行制御部550は、自走装置100の駆動中にレーザセンサ505から順次取得される2次元距離データDに基づいて、自走装置100の周囲にある障害物を検知し、当該障害物との衝突を避けるように自走装置100の走行を制御する。当該障害物は、たとえば、人物や他の自走装置100などの移動体と、壁や棚などの静止体とを含む。
走行制御部550は、障害物が検知されていない間、3次元マップ512上の予め定められた経路を走行するように自走装置100の走行を制御する。一方で、走行制御部550は、障害物が検知された場合には、当該障害物との衝突を避けるように自走装置100の走行を制御する。
ある局面において、障害物までの距離が所定距離以上である場合には、走行制御部550は、当該障害物を避けるように自走装置100の走行を制御する。一方で、障害物までの距離が所定距離未満である場合には、走行制御部550は、自走装置100の走行を停止する。
次に、カメラ35を用いた、制御装置501による走行体61の制御について説明する。
自走装置100は、位置情報取得部570を備える。位置情報取得部570は、カメラ35と、制御装置501内のデータ処理部555とを含む。走行制御部550は、記憶部551を含む。記憶部551は、閾値Th1と、閾値Th2とを記憶している。本例では、閾値Th1は、角度の閾値である。閾値Th2は、距離(長さまたはピクセル数)に関する閾値である。なお、記憶部551は、記憶装置510の一部である。
図6に示されるように、位置情報取得部570は、カメラ35を含み、走行体61の走行時に、走行体61に対する指標部300の位置情報を取得する。詳しくは、カメラ35は、指標部300を連続的に撮像する。カメラ35は、撮像により得られた画像データを、データ処理部555に逐次送信する。
データ処理部555は、当該画像データに基づいて、3次元空間上の指標部300の位置および姿勢を算出する。詳しくは、データ処理部555は、指標部300の位置(指標部300の位置情報)を算出し、かつ、当該算出結果に基づき、指標部300の姿勢を算出する。本例では、姿勢として、指標部300の傾き(傾斜角度)が算出される。データ処理部555は、指標部300の位置情報および指標部300の傾きの情報を、走行制御部550に送る。なお、説明の便宜上、図5の状態における指標部300の傾きは、0°とする。
このように、位置情報取得部570は、カメラ35により撮像された指標部300の画像を取得することにより、指標部300の位置情報および傾きの情報を取得する。なお、データ処理部555は、全ての画像データにおける指標部300の位置および傾きを決定する必要は必ずしもない。データ処理部555は、所定の演算周期に従って、指標部300の位置および傾きを決定してもよい。
走行制御部550は、データ処理部555から指標部300の位置情報および傾きの情報を逐次取得する。走行制御部550は、指標部300の位置情報の変化に基づいて、走行体61の走行を制御する。より詳しくは、走行制御部550は、指標部300の位置情報の変化および当該変化に基づく指標部300の傾きに基づいて、走行体61の走行を制御する。
以下、指標部300の位置情報の変化に基づく制御例を2つ説明する。なお、自走装置100は、自律的に走行、あるいは指令された経路を走行するため、自走装置100は、前進、後進、左旋回、右旋回、左回転、右回転のいずれを行なっているかを把握している。
(1)直線走行時から曲線走行時に切り替った場合
走行体61の走行ルートが直線走行時から曲線走行時に切り替った際における、走行制御部550による走行体61の制御について説明する。
指標部300の位置情報は、走行体61の直線走行時に取得される位置情報P1と、走行体61の曲線走行時に取得される位置情報P2とを含む。走行制御部550は、走行体61の曲線走行時、位置情報P1を基準とする位置情報P2の変化量(以下、「変化量ΔP12」と称する)が予め定められた閾値Th1を超えた場合に、走行体61の走行を制御する。具体的には、本例では、変化量ΔP12は、指標部300の傾き(傾斜角度)である。
走行制御部550は、変化量ΔP12が閾値Th1を越えると、走行体61の走行を停止させる。これに限定されず、走行制御部550は、上記変化量が閾値Th1を越えると、走行体61を減速させ、走行を続けさせてもよい。あるいは、走行制御部550は、上記変化量が閾値Th1を越えると、走行体61の曲線走行における曲率を減少させてもよい。走行制御部550が、いずれの制御を行なうかは、自走装置100において予め設定されている。当該設定は、ユーザ操作に基づき行なうことができる。
また、走行制御部550は、走行体61の走行速度および/または曲線の曲率に応じて、3つの制御のうちから、適宜、制御方法を選択してもよい。また、走行制御部550は、走行体61の減速と、走行体61の曲線走行における曲率の減少とを同時におこなってもよい。
たとえば、走行速度が予め定められた速度よりも早いときには、走行制御部550は、走行体61を減速させる。曲率が予め定められた値よりも大きい場合には、走行制御部550は、走行体61の曲線走行における曲率を減少させればよい。走行速度が予め定められた速度よりも早く、かつ曲率が予め定められた値よりも大きい場合には、走行制御部550は、走行体61を減速と、走行体61の曲線走行における曲率を減少とを同時に行なってもよい。
減速の制御は、予め定められた速度まで低下させる制御であってもよいし、所定の速度だけ走行速度を遅くする制御であってもよい。後者の制御の場合、走行制御部550は、変化量ΔP12が閾値Th1以下となるまで、所定の速度だけ走行速度を遅くする制御を繰り返す。
さらに、走行制御部550は、変化量ΔP12と閾値Th1との差に基づき、制御方法を選択してもよい。
(2)段差がある場合
走行体61が段差を越えた際における、走行制御部550による走行体61の制御について説明する。
指標部300の位置情報は、走行体61が床面910の段差を越える前に取得される位置情報P3と、走行体61が床面910の段差を越えた後に取得される位置情報P4とを含む。走行制御部550は、走行体61の走行時、位置情報P3を基準とする位置情報P4の変化量(以下、「変化量ΔP34」と称する)が閾値Th2を超えた場合に、走行体61の走行を制御する。具体的には、本例では、変化量ΔP34は、指標部300の位置の上下方向の位置の変化量である。
走行制御部550は、変化量ΔP34が閾値Th2を越えると、走行体61の走行を停止させる。これに限定されず、走行制御部550は、変化量ΔP34が閾値Th2を越えると、走行体61を減速させ、走行を続けさせてもよい。走行制御部550が、いずれの制御を行なうかは、自走装置100において予め設定されている。当該設定は、ユーザ操作に基づき行なうことができる。
たとえば、走行速度が予め定められた速度よりも早いときには、走行制御部550は、走行体61を停止させる。走行速度が予め定められた速度よりも遅いときには、走行制御部550は、走行体61を減速させて、走行を続けさせる。
また、走行制御部550は、変化量ΔP34と閾値Th2との差(すなわち、段差の大きさ)に基づき、制御方法を選択してもよい。たとえば、走行制御部550は、当該差が予め定められた値以上の場合には、走行体61の走行を停止させ、当該差が予め定められた値未満の場合には、走行体61を予め定められた速度まで減速させてもよい。
なお、走行体61を停止させた場合には、走行制御部550は、その後、走行体61を逆走(たとえば、後進)させる。たとえば、走行制御部550は、走行体61を停止させた後に所定の時間が経過したことを条件に、走行体61を後進させてもよい。
<F.カメラで取得される画像の例>
(1)直線走行時から曲線走行時に切り替った場合
図7は、自走装置100が左旋回し始めたときの走行システム1の上面図である。
図7に示されるように、自走装置100が旋回を開始すると、台車の側壁部251Fのうち、カメラ35によって撮像される被写体領域が変化する。カメラ35の光軸Jと側壁部251Fとが交差する位置が、図2の位置から大きく変化する。
図8は、図7のix−ix線矢視断面図である。
図8に示されるように、本例では、台車200は、左側前輪220Lfが床面910から離間し、台車200が角度θだけ傾いている。台車200は、自走装置100が左旋回することにより、矢印の方向に傾いている。これにともない、側壁部251Fに付された指標部300も角度θだけ傾いた状態となっている。
図9は、左旋回時を開始する直前と直後とに得られる画像データを説明するための模式図である。
図9に示されるように、状態(A)では、走行体61および台車200が直進しているため、指標部300の画像300Gは傾いていない。また、画像300Gは、撮像により得られた画像データ501Gにおいて基準位置に存在する。なお、本例では、説明の便宜上、基準位置が画像データ501Gの中心となる場合を例に挙げている。
状態(B)では、図7に示すように走行体61が左旋回を開始したため、台車200の状態が図8に示す状態となる。この場合、台車200の左側前輪220Lfが床面910から離間した状態で台車200が角度θ傾いているため、指標部300の画像300Gは、角度θだけ傾くことになる。
また、指標部300の画像300Gは、撮像により得られた画像データ502Gにおいて、デフルトの位置からずれる。本例の場合には、画像300Gが、X軸の正方向にx1、Y軸の正方向にy1だけずれている。
ところで、上述したように、走行制御部550は、走行体61の曲線走行時、位置情報P1を基準とする位置情報P2の変化量ΔP12が閾値Th1を超えた場合に、走行体61の走行を制御する。当該変化量ΔP12は、指標部300としてAprilTagを用いているため、上述したように、変化量ΔP12を画像300Gの傾き(傾斜角度)とすることができる。閾値Th1は、たとえば、3°とすることができる。
なお、指標部300として、傾斜角度を検知できない指標を用いる場合には、変化量ΔP12を、y1をx1で除したときの値(=y1/x1)としてもよい。
(2)段差がある場合
図10は、自走装置100が段差を乗り越えた直後の走行システム1の側面図である。
図10に示されるように、自走装置100が段差Wを乗り越えると、台車の側壁部251Fのうち、カメラ35によって撮像される被写体領域が変化する。カメラ35の光軸Jと側壁部251Fとが交差する位置が、図2の位置から上方に変化する。
図11は、自走装置100が段差Wを乗り越える前と、乗り越えた直後とに得られる画像データを説明するための模式図である。なお、本例では、段差Wを乗り越える前後において、自走装置100および台車200は、前進しているものとする。
図11に示されるように、状態(A)では、走行体61および台車200が直進しているため、指標部300の画像300Gは、撮像により得られた画像データ503Gにおいて、デフルトの位置に存在する。本例においても、当該基準位置が、画像データ503Gの中心となる場合を例に挙げている。
状態(B)では、図10に示すように自走装置100が段差Wを乗り越える一方で台車200は段差Wを乗り越えていないため、指標部300の画像300Gは、撮像により得られた画像データ504Gにおいて、デフルトの位置からずれることになる。具体的には、本例の場合には、画像300Gが、Y軸の負方向にy2だけずれている。
上述したように、走行制御部550は、走行体61の走行時、位置情報P3を基準とする位置情報P4の変化量ΔP34が閾値Th2を超えた場合に、走行体61の走行を制御する。本例では、変化量ΔP34は、Y座標の変化量とすることができる。
なお、図10の例では、段差Wによって、自走装置100の位置が上方に変化する場合を例に挙げて説明した。段差によって自走装置100の位置が下方に変化する場合には、指標部300の画像300Gは基準位置から上方向に変化することになる。
<G.制御構造および制御例>
図12は、自走装置100で実行される処理の流れを説明するためのフロー図である。
図12に示されるように、ステップS1において、自走装置100は走行を開始する。これにより、台車200が自走装置100に牽引される。ステップS2において、制御装置501による制御に基づき、カメラ35による指標部300の撮像が開始される。ステップS3において、制御装置501は、旋回を開始したか否かを判断する。
旋回を開始したと判断された場合(ステップS3においてYES)、制御装置501は、ステップS4において、指標部300の傾き(詳しくは、指標部300の画像300Gの傾き)が閾値Th1以上になったか否かを判断する。旋回を開始していないと判断された場合(ステップS3においてNO)、制御装置501は、ステップS7において、指標部300の位置(詳しくは、指標部300の画像300Gの位置)が基準位置から閾値Th2以上、上方向または下方向に変化したか否かを判断する。
ステップS4において肯定的な判断がなされた場合(ステップS4においてYES)、制御装置501は、ステップS5において、走行体61の走行を制御する。その後、制御装置501は、処理をステップS4に進める。ステップS4において否定的な判断がなされた場合(ステップS4においてNO)、制御装置501は、処理をステップS6に進める。
ステップS7において肯定的な判断がなされた場合(ステップS7においてYES)、制御装置501は、ステップS8において、走行体61の走行を制御する。その後、制御装置501は、処理をステップS6に進める。ステップS7において否定的な判断がなされた場合(ステップS7においてNO)、制御装置501は、処理をステップS6に進める。
ステップS6において、制御装置501は、自走装置100および台車200が、目的位置に到達したか否かを判断する。ステップS6において肯定的な判断がなされた場合(ステップS6においてYES)、制御装置501は、一連の処理を終了する。ステップS6において否定的な判断がなされた場合(ステップS6においてNO)、制御装置501は、処理をステップS3に戻す。
<H.小括>
走行システム1の構成の一部を小括すると、以下のとおりである。
(1)走行システム1は、自走可能な走行体61と、指標部300を有し、走行体61により牽引される台車200と、カメラ35を含み、走行体61の走行時に、走行体61に対する指標部300の位置情報を取得する位置情報取得部570と、位置情報取得部570において取得される指標部300の位置情報の変化に基づいて、走行体61の走行を制御する走行制御部550とを備える。
走行体61により台車200を牽引する場合、台車200の転倒を防ぐことが求められる。また、台車200の姿勢を正す手段として慣性計測装置を用いた姿勢制御が考えられるが、高コストになる。
これに対して、位置情報取得部570において取得される指標部300の位置情報の変化に基づいて、走行体61の走行を制御することによって、台車200の転倒を防ぐことができる。この場合に、位置情報取得部570にカメラが利用されるため、低コストを実現することができる。
また、走行体61により牽引する台車200の種類が様々であったり、台車200に積載する荷物の数および重量、荷物の積載位置が異なっていたりして、台車200の転倒が生じる走行体61の走行条件が都度変わる。このため、位置情報取得部570において取得される指標部300の位置情報の変化に基づいて、走行体61の走行を制御することによって、台車の転倒を精度良く防止することが可能となる。
(2)指標部300の位置情報は、走行体61の直線走行時に取得される位置情報P1と、走行体61の曲線走行時に取得される位置情報P2とを含む。走行制御部550は、走行体61の曲線走行時、位置情報P1を基準とする位置情報P2の変化量ΔP12が予め定められた閾値Th1を超えた場合に、走行体61の走行を制御する。このような構成によれば、走行体61の曲線走行時に台車が横転することを防止できる。
たとえば、走行制御部550は、走行体61の走行を、走行体61の停止、走行体61の減速、および、走行体61の曲線走行における曲率の減少のいずれかに制御する。これによれば、走行体61を停止させたり、減速させたり、曲線走行時における曲率を減少させたりすることによって、曲線走行時に台車200が横転することを防止できる。
(3)台車200は、頂部211と、車輪220とを含む。指標部300は、上下方向において、車輪220よりも頂部211寄りの位置に設けられる。このような構成によれば、走行体61の曲率走行時に、指標部300の挙動がより大きくなるため、制御装置501が、指標部300の位置情報の変化を認識しやすくなる。
(4)指標部300の位置情報は、走行体61が床面910の段差Wを越える前に取得される位置情報P3と、走行体61が床面910の段差Wを越えた後に取得される位置情報P4とを含む。走行制御部550は、走行体61の走行時、位置情報P3を基準とする位置情報P4の変化量ΔP34が予め定められた閾値Th2を超えた場合に、走行体61の走行を制御する。このような構成によれば、床面910に段差Wがあった場合に、台車が転倒すること防止できる。
たとえば、走行制御部550は、走行体61が停止するように、走行体61の走行を制御する。走行体61を停止させることによって、床面910に段差Wがあった場合に、台車200が横転することを防止できる。
(5)指標部300は、台車200に付された特定の図形(本例では、AprilTag)である。位置情報取得部570は、カメラ35により撮像された当該図形の画像を取得することにより、指標部300の位置情報を取得する。
<I.変形例>
(1)上記においては、指標部300を台車200の側壁部251Fに付けた場合を例に挙げて説明したが、これに限定されない。
図13は、台車200Aを示した図である。図13に示されるように、台車200Aは、板状部材290を備える。板状部材290は、頂部211から上方に突き出るように本体部205に設置されている。本例では、板状部材290は、下端部が側壁部251Fに取り付けられている。
板状部材290の上端部に、指標部300が付けられている。指標部300は、板状部材290のカメラ35側の表面に付けられている。このような構成によれば、台車200の場合に比べて、指標部300の位置を床面910から高い位置とすることができる。
台車200Aと台車200とが同じ角度だけ傾いた場合には、台車200Aの方が、指標部300の移動量が大きい。それゆえ、指標部300として傾斜角度を検知できない指標を用いる場合には、制御装置501は、台車200Aの傾きを、台車200のときよりも、精度よく検出することができる。
なお、この場合には、自走装置100のカメラ35の位置を、台車200のときよりも高い位置に設置する必要がある。また、板状部材290の代わりに、角ポールを用いてもよい。
(2)上記においては、カメラ35によって、走行体61に対する指標部300の位置情報を取得したが、これに限定されるものではない。カメラ35の代わりに、レーザセンサ36(図1等参照)を用いてもよい。
(3)上記においては、指標部300の傾き(傾斜角度)に関する閾値として、閾値Th1のみを用いた。しかしならが、これに限定されず、傾きに関する閾値として、複数の閾値を用いてもよい。たとえば、2つの閾値Th1_a,Th1_bを用いる場合(Th1_a>Th1_b)、走行制御部550は、変化量ΔP12がTh1_a以上となると走行体61の走行を停止させ、変化量ΔP12がTh1_b以上かつTh1_a未満の場合に走行体61を一定の速度まで減速させ、走行を継続してもよい。
[実施の形態2]
実施の形態1では、走行制御部550は、位置情報取得部570において取得される指標部300の位置情報の変化に基づいて、走行体61の走行を制御した。すなわち、実施の形態1では、走行システム1の実運用時の制御について説明した。
本実施の形態では、走行システム1を試走させて、台車200が走行条件を予め設定する。当該走行条件の設定に、指標部300の位置情報を利用する。走行条件は、本例では、台車200が転倒(たとえば、横転)しない条件である。
また、本実施の形態では、試走は、台車200に荷物を積載していない状態で行なうものとする。ただし、これに限定されず、台車200に都度同じ荷物を同じ数だけ同じ位置に載置する場合には、台車200に荷物を積載した状態で試走を行なうことが好ましい。
詳しくは、位置情報取得部570は、走行体61の試走時に、走行体61に対する指標部300の位置情報を取得する。走行制御部550は、位置情報取得部570において取得される指標部300の位置情報の変化に基づいて、走行体61の走行条件を設定し、かつ、走行体61の実運用時に当該走行条件を満たすように走行体61の走行を制御する。
走行体61の試走時には、走行速度と、走行経路となる曲線の曲率との各々を、様々に変化させる。また、試走時には、高さが異なる段差を、複数の走行速度で通過させる。このような試走により、台車200が転倒しない走行条件を見つけ出す。たとえば、台車200の傾斜角θが上記閾値Th1を越えないような、走行速度と曲線の曲率との組み合わせをもとめる。また、台車200が段差を乗り越えられる走行速度を、段差の大きさ毎に見つけ出す。
このような構成によれば、多くの状況下で、実運用時において指標部300の位置情報の変化を監視する必要がなくなる。たとえば、特に、上述したように、台車200に荷物を積載した状態で試走させたときには、監視が不要となる。
図14は、走行システム1を試走によって生成された走行条件を説明するための図である。走行条件は、自走装置100によって生成されてもよいし、図示しないサーバによって生成されてもよい。走行条件は、上述したように、指標部300の位置情報の変化に基づき、実運用前に生成される。なお、走行条件は、走行制御部550の記憶部551(図6)に格納される。
図14に示されるように、走行条件Pは、本例では、2つの走行条件P1,P2を含む。走行条件P1,P2は、台車200が転倒しない条件である。走行条件P1,P2は、台車200の種別、台車200に載置された部材の重さ等に基づき、個別に設定されることが好ましい。
走行条件P1は、自走装置100の走行速度と、曲線の曲率との関係を示している。曲線の曲率とは、走行システム1の走行時の軌跡がある局面において円弧である場合の当該円弧の曲率である。
走行条件P1は、本例では、関数により規定されている。グラフの領域は、当該関数によって、領域A1と領域B1とに区分される。領域A1は、曲率が関数の値(すなわち縦軸の曲率)以下の領域である。領域B1は、曲率が関数の値よりも大きい領域である。走行条件P1は、領域A1内の走行速度と曲率との組み合わせとして定義される。「走行条件P1を満たす」とは、走行速度と曲率とが領域A1内に収まっていることである。
走行条件P2は、自走装置100の走行速度と、段差の大きさとの関係を示している。段差の大きさは、上下方向における、床面の高さの差(cm)である。
走行条件P2は、走行条件P1と同様、関数により規定されている。グラフの領域は、当該関数によって、領域A2と領域B2とに区分される。領域A2は、曲率が関数の値(すなわち縦軸の曲率)以下の領域である。領域B2は、曲率が関数の値よりも大きい領域である。走行条件P2は、領域A2内の走行速度と曲率との組み合わせとして定義される。「走行条件P2を満たす」とは、走行速度と曲率とが領域A2内に収まっていることである。
このように、走行システム1の実運用時に走行条件Pを満たすように走行体61の走行を制御することにより、実運用時において、台車200が横転等することを防止できる。また、台車200から積載物が落下することも防止できる。
[実施の形態3]
実施の形態1の制御と、実施の形態2で設定した走行条件Pに基づく制御とを組み合わせてもよい。
実施の形態2で説明したように、走行システム1の試走により走行条件Pを予め設定しておく。実運用では、自走装置100は、走行条件Pを満たすように走行する。このような場合、大抵の場合には、台車200の横転等は起こらない。
しかしながら、台車200の種類が様々であったり、台車200に積載する荷物の数および重量、荷物の積載位置が異なっていたりしており、全てのケースにおいて走行条件Pを予め設定することは難しい場合もある。また、建物環境の変化、台車200の劣化、衝突回避等により、走行条件Pを必ずしも満たせない場合も生じうる。また、走行条件Pを設定する際に、試走で試すことができなかった走行状態もあり得る。
このような様々な場合を考慮し、制御装置501は、実運用においては、走行条件Pを満たすよう走行体61を制御する一方で、さらなる信頼性の確保の観点から、実施の形態1で説明した指標部300の位置情報の変化に基づく走行体61の走行制御を実行する。
詳しくは、位置情報取得部570は、走行体61の試走時に、走行体61に対する指標部300の位置情報をさらに取得する。試走は、台車200の荷物の積載状態を一定または当該荷物が積載されていない状態で行なわれる。走行制御部550は、試走時において位置情報取得部570によって取得される指標部300の位置情報の変化に基づいて走行体61の実運用時の走行条件Pを設定し、かつ、走行体61の実運用時において走行条件Pを満たすように走行体61の走行を制御する。
このような構成によれば、走行体61を試走させることによって、台車200の積載状態が特定の状態にあるときに、台車200が横転することのない走行条件Pを設定できる。実運用時において、走行制御部550は、走行条件Pを満たすように走行体の走行を制御し、かつ、位置情報取得部570において取得される指標部300の位置情報の変化に基づいて、走行体61の走行を制御することによって、走行条件Pを予め設定しない場合に比べて、台車200の姿勢をより安定して保つことができる。
具体的には、台車200の左右方向または前後方向の傾きによって台車200が転倒することをより一層防止することができる。また、台車200から荷物(積載物)が落下することも防止できる。
今回開示された実施の形態は例示であって、上記内容のみに制限されるものではない。本発明の範囲は特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。