【実施例1】
【0017】
本実施例のフォークリフト10について、図面を参照しながら説明する。
図1に示すように、フォークリフト10は、無人フォークリフトであり、車体30と、マスト24と、フォーク22と、リフトチェーン26と、レーザセンサ20と、制御装置70とを備えている。
【0018】
車体30は、その両側面のそれぞれに前輪28F及び後輪28Rを備えている。後輪28Rの一方は、図示しない駆動機構を介して駆動輪モータ90(
図3に図示)に接続されており、駆動輪モータ90によって回転駆動されるようになっている。また、駆動輪モータ90に接続された後輪28Rは、操舵装置94(
図3に図示)にも接続されており、操舵装置94によって車輪の向きが調整される。後輪28Rの他方は、キャスタ輪であり、車体30の走行に追従して回転及び操舵する。制御装置70が駆動輪モータ90及び操舵装置94を制御することより、車体30は路面を走行すると共に、車体30の進行方向を変えることができる。
【0019】
マスト24は、車体30の前面に取付けられている支柱であり、その軸線は上下方向に伸びている。フォーク22は、マスト24に上下方向に移動可能に取付けられている。また、フォーク22は、図示しないティルト機構によって、マスト24に対して揺動可能となっている。フォーク22は、一対のツメ22a,22bを有している。ツメ22a,22bは、車体30の左右方向に互いに離間した位置に配置されており、マスト24側から車体12の前方に向かって伸びている。リフトチェーン26は、マスト24に設置されており、フォーク22と係合している。リフトチェーン26がフォーク昇降装置48(
図3に図示)により駆動されると、それによってフォーク22が昇降される。フォーク22の上下方向の位置は、フォーク昇降装置48の駆動量によって特定可能となっている。
【0020】
レーザセンサ20は、フォーク22に取付けられ、フォーク22と一体となって上下方向に昇降する。レーザセンサ20が取付けられる位置は、ツメ22a、22bの間であって、フォーク22のバックレスト面より奥側(車体12側)に配置されている。レーザセンサ20は、ツメ22a、22bの下面よりも上方に配置されている。レーザセンサ20は、照射されるレーザ光が斜め下方に照射されるように、水平方向に対して俯角を付けてフォーク22に取付けられている。レーザセンサ20は、1方向(本実施例では水平方向)にレーザ光を走査する1次元走査型のレーザセンサである。レーザセンサ20は、レーザ光を照射するとともにその照射したレーザ光の反射光から周辺物体までの距離を計測する。フォーク22が昇降すると、レーザセンサ20も昇降するため、レーザセンサ20から照射されるレーザ光の高さ方向の位置も変化する。本実施例では、
図2に示すように、レーザセンサ20は、上下方向に昇降しながら、フォークリフト10の前方の所定の角度範囲の領域50(
図1参照)にレーザ光を照射する。これにより、レーザセンサ20から照射されるレーザ光は水平方向及び高さ方向(2次元)に走査され、フォークリフト10の前方の距離データ80が取得される。レーザセンサ20で取得される3次元距離データは、制御装置70(
図3に図示)に入力される。
【0021】
なお、レーザセンサ20としては、例えば、北陽電機製のUTM−30LXやSICK社製LMS100等を用いることができる。
【0022】
制御装置70は、CPU等を備えたマイクロプロセッサによって構成されている。制御装置70は、車体30に搭載されている。制御装置70は、上述したレーザセンサ20と、一方の後輪28Rを駆動する駆動輪モータ90と、一方の後輪28Rの操舵角を調整する操舵装置94と、フォーク22の昇降を行うフォーク昇降装置48等に接続されており、これらの動作を制御する。
【0023】
すなわち、制御装置70は、駆動輪モータ90及び操舵装置94を駆動することで、フォークリフト10の進行方向及び走行速度を制御する。すなわち、制御装置70は、駆動輪モータ90及び操舵装置94に制御指令値を出力することで、一方の後輪28Rを駆動する。これによって、フォークリフト10の進行方向、走行速度及び走行経路等が制御される。制御装置70は、一方の後輪28Rの、操舵装置94による操舵角と、駆動輪モータ90からの信号に基づく回転速度から、フォークリフト10の実際の位置及び速度を特定することができる。なお、制御装置70によるフォークリフト10の進行方向及び走行速度の制御については、従来公知の方法で行うことができるため、ここではその詳細な説明は省略する。
【0024】
また、制御装置70は、メモリに記憶されているプログラムを実行することで、レーザセンサ20によりパレット100を認識し、その認識したパレット100を荷取るための位置にフォークリフト10を移動させる処理を実行する。具体的には、荷取り対象となるパレット100の初期観測時においては、制御装置70は、まず、レーザセンサ20の高さ方向の位置を検出しながらレーザセンサ20を下降させると共に、レーザセンサ20により取得される距離データに基づいて、パレット100の前面の中央の高さを特定する処理を実行する。次に、制御装置70は、特定したパレット100の前面の中央の高さ付近を観測した距離データに基づいて、パレット100の位置及び方向を特定する。次いで、特定したパレット100の位置及び方向に基づいて車体が走行すべき軌道データを生成する処理を実行する。次いで、生成した軌道データと、パレット100の位置及び方向に基づいて駆動・操舵データを生成する処理を実行し、最後に、生成した駆動・操舵データに基づいて車体を駆動する処理を実行する。すなわち、制御装置70は、
図3に示すように、パレット認識部36、軌道・速度計画部38、駆動・操舵指令部40、駆動輪・操舵制御部42、センサ移動制御部44及びセンサ位置検出部46として機能する。制御装置70が上述した各部32〜46として機能することで、パレット100の位置、方向及び幅が特定され、特定されたパレット100の位置及び方向に基づいて車体30が荷取り位置まで移動する。各部32〜46の詳細については、以下で説明する制御装置70で行われる処理とともに説明する。
【0025】
次に、制御装置70によって、パレット100の荷取り位置までフォークリフト10を移動させる処理について説明する。まず、荷取り対象となるパレット100の距離データ80を取得し、その距離データからパレット100の高さ及び幅を認識する処理について説明する。距離データの取得は、荷取り対象となるパレット100の近傍にフォークリフト10が停止した状態で実行される。すなわち、
図4に示すように、制御装置70は、まず、車体30の前方にパレット100が位置するように、一方の後輪28Rを駆動して、パレット100に対してフォークリフト10を接近させる。すなわち、パレット100をレーザセンサ20によって観測するために、フォークリフト10をパレット前方の初期位置へ移動させる(S10)。例えば、工場内で荷物を運搬するフォークリフト10では、荷物(パレット100)が載置される位置は予め定められている。このため、フォークリフト10を停止させる初期位置は、パレット100が載置される位置から予め定められている。このため、制御装置70は、予め設定された初期位置まで、駆動輪モータ90及び操舵装置94を駆動してフォークリフト10を自動で移動させる。なお、フォークリフト10が運転者によって運転される場合は、運転者によってフォークリフト10が初期位置まで移動され、その後、フォークリフト10の運転者のスイッチ操作により距離データ生成処理が開始されてもよい。
【0026】
次に、制御装置70は、フォーク昇降装置48を駆動して、レーザセンサ20を、観測対象領域60(
図5に図示)の上限にレーザ光が照射されるように移動させる(S12)。観測対象領域60とは、パレット100が存在する可能性のある領域である。例えば、
図5に示すように、荷物130はパレット100上に載置され、パレット100は台座120上に載置される場合であれば、パレット100が存在する可能性のある領域(高さ、幅)は、台座120とパレット100の寸法によって決まる。ステップS12では、パレット100が存在する可能性のある領域の上限までレーザセンサ20を移動させ、パレット100が確実に検出されるようにする。
【0027】
次に、制御装置70は、フォーク昇降装置48を駆動して、フォーク22を下降させながら、レーザセンサ20でスキャンデータを取得する(S14)。すなわち、レーザセンサ20は、レーザ光を水平方向に走査しながら照射するとともにその照射したレーザ光の反射光を検出する。一方、フォーク昇降装置48がフォーク22を下降させるため、レーザセンサ20は下方向に移動する。このため、レーザセンサ20から照射されるレーザ光は、垂直方向にも走査される。したがって、ステップS14の処理によって、レーザセンサ20からのレーザ光は、水平方向及び垂直方向に走査され、その反射光を検出することで、観測対象領域60の観測点群を取得することができる。なお、上記のステップS12及びS14のフォークを昇降させる処理によって実現される制御装置70の機能が、
図3に示すセンサ移動制御部44に相当する。
【0028】
次に、制御装置70は、レーザセンサ20で取得した観測点群に対して、逐次的にステップS16の処理をする。具体的には、制御装置70は、まず、観測点群から直線が抽出できるか否かを判断する。
図5に示すように、パレット100の前面から反射される反射光による観測点群は同一平面上に位置する。このため、パレット100の前面から反射される反射光による観測点群は、直線を構成する。なお、直線の抽出には、例えば、RANSACのようなロバスト推定と呼ばれる公知のアルゴリズムを用いることができる。
【0029】
次に、制御装置70は、抽出された直線を構成する点群の長さが、パレット100の幅に概ね等しいか否かを判断する。ここで、パレット100の規格は既知であることが通常である。したがって、直線を構成する点群の長さと設定値(パレット100の規格から定められる値)を比較することによって、パレット100の前面の直線が抽出されているか否かを判断することができる。直線を構成する点群の長さW
pは、例えば、
図6に示すように、点群のx方向の最大値及び最小値p
xmax,p
xmin、y方向の最大値及び最小値p
ymax,p
yminを持つ観測点を用いることによって、下式により求めることができる。
【0030】
【数1】
【0031】
制御装置70は、式(1)により求められた長さをパレット100の幅(設定値)と照らし合わせることによって、パレット100の幅に等しいか否かを判断する。
【0032】
次に、制御装置70は、抽出された直線が3本の線分で構成されているか否かを判断する。詳細には、抽出された直線をユークリッド距離でクラスタリングする。すなわち、
図5,7に示すように、パレット100の前面には2つの開口部110(フォーク22のツメ22a,22bが挿し込まれる孔)が形成されている。このため、パレット100の前面から抽出される直線は、パレット100の前面の開口部110によって分断される。したがって、レーザセンサ20による計測高さが、パレット開口部110の範囲に存在するとき、抽出された直線は3本の線分でクラスタリングされる(すなわち、クラスタ数が3となる(
図7でYESと示された線分)。なお、クラスタリングには、例えば、k−means法やkd−tree法のような公知の方法を用いることができる。
【0033】
ここで、制御装置70は、フォーク昇降装置48を制御してフォーク22を昇降するため、フォーク22の上下方向の位置を知ることができる。レーザセンサ20は、フォーク22に取付けられているため、制御装置70(
図3に示すセンサ位置検出部46)は、レーザセンサ20の高さ方向の位置を知ることができる。このため、上述したステップS16の処理における条件を全て満たす場合(S16でYES)、制御装置70は、現在のレーザセンサ20の計測高さをパレット開口部110の開始高さ(h
A)と判断し、現在の計測高さを記録する(S18)。ステップS16において、少なくともいずれか一つの条件を満たさない場合(S16でNO)は、制御装置70はステップS14の処理へ戻る。
【0034】
次に、制御装置70は、再びフォーク昇降装置48を駆動して、フォーク22を下降させながら、レーザセンサ20でスキャンデータを取得する(S20)。次いで、制御装置70は、レーザセンサ20で取得した観測点群に対して、逐次的にステップS22の処理をする。ステップS22の処理については、ステップS16の処理と同様であるため、詳細な説明は省略する。ステップS22の処理において、少なくともいずれか一つの条件を満たさない場合(S22でNO)、制御装置70は、現在のレーザセンサ20の計測高さはパレット100の開口部110の終了高さ(h
B)であると判断し、現在の計測高さを記録する(S24)。ステップS22の処理において条件を全て満たす場合(S22でYES)、レーザ光が走査される位置はパレット100の開口部110の位置であるとし、制御装置70はステップS20の処理へ戻る。なお、上記のステップS16及びS22の処理のうち、レーザセンサ20の高さを認識する制御装置70の機能が、
図3に示すセンサ位置検出部46に相当する。
【0035】
次に、制御装置70は、上述したステップS16及びS22の処理を行うことによって得られたh
A及びh
Bから、下式(2)及び(3)により、パレット100の中心の高さh
P及びパレット開口部110の上下方向の幅H
P(パレット高さデータ62)を求める(S26)。なお、上記のステップS10〜S24の処理によって実現される制御装置70の機能が、
図3に示すパレット認識部36に相当する。
【0036】
【数2】
【0037】
次に、フォークリフト10を初期位置から荷取り位置まで移動させる際に、制御装置70によって実行される処理について説明する。フォークリフト10を初期位置から荷取り位置まで移動させる際、制御装置70は、
図8に示すパレット100の前面の中心位置を検出する処理と、
図10に示すフォークリフト10の走行制御処理を実行する。すなわち、制御装置70は、レーザセンサ20によってパレット100の前面の中心位置を検出しながら、その検出結果を用いて駆動輪モータ90及び操舵装置94を制御することで、フォークリフト10を荷取り位置まで移動させる。まず、制御装置70によるパレット100の前面の中心位置を検出する処理について説明する。
図8に示すように、まず、制御装置70は、車体30が初期位置から荷取り位置まで移動する間、レーザセンサ20で観測されるパレット高さデータ62に基づいて、レーザセンサ20のレーザ光が、常にパレット100の前面の高さの中央に照射されるように、フォーク昇降装置48により、フォーク22の高さを調整する(S30、
図9に示す状態)。
【0038】
【数3】
【0039】
図9に示すように、レーザセンサ20とパレット100との距離L及びパレット高H
pは、センサ位置検出部46及びパレット高さデータ62から算出することができる。また、レーザセンサ20に設けられた俯角φは既知である。したがって、レーザセンサ20とパレット100との距離L、パレット高H
p及び俯角φから、センサ高H
sを求め、上式(4)を満足するようにフォーク22の高さを制御する。これにより、車両の揺れや観測誤差が生じた場合でも、レーザ光がパレット100から外れることがなく、正確な追従制御ができる。
【0040】
次に、制御装置70は、センサ高H
sにおいて、レーザセンサ20で取得した観測対象領域60内に存在する観測点群から、パレット前面に相当する直線を抽出する(S32)。直線の抽出には、例えば、RANSACのような公知のアルゴリズムを用いることができる。
【0041】
次に、制御装置70は、抽出された直線に対し、ステップS34の処理を行う。具体的には、制御装置70は、まず、ステップS32で抽出された直線を構成する点群の長さが、パレット100の幅に概ね等しいか否かを判断する(S34)。直線を構成する点群の長さは、例えば、点群のx方向の最大値及び最小値、y方向の最大値及び最小値を持つ観測点を用いることによって、上述した式(1)により求めることができる。制御装置70は、式(1)により求められた長さをパレット100の幅(設定値)と照らし合わせることによって、パレット100の幅に等しいか否かを判断する。
【0042】
次に、制御装置70は、抽出された直線が3本の線分で構成されているか否かを判断する(S34)。具体的には、上述したステップS16における処理と同様であるため、ここではその詳細な説明は省略する。
【0043】
上述したステップS34の処理において、少なくともいずれか一つの条件を満たさない場合(S34でNO)、制御装置70は、ステップS30に戻り処理を繰り返す。
【0044】
上述したステップS34の処理において条件を全て満たす場合(S34でYES)、制御装置70は、レーザセンサ20により取得した観測点群のx方向の最大値及び最小値、y方向の最大値及び最小値を用いてパレット100前面のx方向及びy方向の中心位置P
c(C
px,C
py)を検出する(S36、
図6を参照)。パレット100の前面のx方向及びy方向の中心位置P
cの検出は、例えば、下式(5)及び(6)により求めることができる。
【0045】
【数4】
【0046】
次に、制御装置70は、パレット100の方向を決定する(S38)。パレット100の方向の決定は、例えば、パレット認識部36及びセンサ位置検出部46によって、抽出された直線の方向をパレット100の側面の法線ベクトル、当該直線に直交する方向をパレット100前面の法線ベクトルとすることで、パレットの方向を求めることができる。これによって、パレット100の位置及び方向を特定することができ、パレット100の位置及び方向を特定したパレット位置・方向データ84が得られる。なお、上記のステップS30〜S38の処理によって実現される制御装置70の機能が、
図3に示すパレット認識部36に相当する。
【0047】
次に、制御装置70によるフォークリフト10の走行制御処理を
図10を用いて説明する。
図10に示すように、制御装置70は、
図4に示す処理を実行することで取得したパレット位置・方向データ84に基づいて、パレット100の荷取り位置(最終目標位置及び最終目標方向)に車体30を移動するための軌道計画を作成し、作成した軌道計画に基づいて、現在位置(初期位置)から荷取り位置まで移動する間の各時刻における目標位置及び目標方位を算出する(S50)。具体的には、まず、制御装置70は、パレット位置・方向データ84からパレット100の荷取り位置(フォークリフト10の最終目標位置及び最終目標方位)と、現在の位置から荷取り位置まで移動する際に要する時間を決定し、これらから軌道計画及び速度計画を作成する。次いで、制御装置70は、作成した軌道計画と速度計画に基づいて、現時点から荷取り位置まで移動する間の各時刻での目標位置及び目標方位(軌道データ86)を算出する。軌道計画と速度計画には、例えば、直線補間やスプライン曲線による補間のような従来公知の方法を用いることができる。なお、上記の処理によって実現される制御装置70の機能が、
図3に示す軌道・速度計画部38に相当する。
【0048】
次に、制御装置70は、決定した軌道データ86(各時刻における目標位置及び目標方位)と、
図8に示す処理によって取得されるパレット位置・方向データ84から特定されるフォークリフト10の現在の位置とに基づいて、荷取り位置(最終目標位置及び最終目標方向)まで車体30を移動するための制御指令値を生成する。すなわち、本実施例では、フォークリフト10が初期位置から荷取り位置まで移動する間も、レーザセンサ20によるパレット100の観測(
図8の処理)が実行される。このため、レーザセンサ20により取得されるパレット位置・方向データ84から、現在のフォークリフトの位置(パレット100に対する相対的位置)及び方位を算出することができる。このため、まず、制御装置70は、式(7)に示すように、軌道データ86に基づく現在時刻での車体30の目標位置・方位x
ref,y
ref,θ
refと、パレット位置・方向データ84から算出される車体30の現在位置・方位x
veh,y
veh,θ
vehとから偏差x
e,y
e,θ
eを算出し、その算出した偏差x
e,y
e,θ
eを車両座標系に変換する(S52)。
【0049】
【数5】
【0050】
次に、制御装置70は、上記の式(7)より得られた偏差にフィードバックゲインK
x,K
y,K
θを乗じて、車体30が出すべき実際の目標並進速度及び目標角速度v
out,ω
out(駆動・操舵データ88)を算出する(S54)。なお、車体30の目標並進速度及び目標角速度v
out,ω
out(すなわち、車両座標系での並進速度及び角速度)は、下記に示す式(8)及び(9)を用いて算出することができる。そして、
図11に示すように、駆動・操舵データ88に基づいてフォークリフト10が移動することで、フォークリフト10は、パレット100に対して適切な位置及び向きとなるように調整される。なお、上記の処理によって実現される制御装置70の機能が、
図3に示す駆動・操舵指令部40に相当する。
【0051】
【数6】
【0052】
次に、制御装置70は、得られた並進速度及び角速度v
out,ω
outを元に、駆動輪の速度及び操舵角を制御する(S56)。すなわち、制御装置70は、制御指令値(v
out,ω
out)に基づき、これを実現する駆動輪速度指令値と操舵角度指令値を幾何学的計算により求め、それぞれを駆動輪モータ90と操舵装置94へ出力する。なお、上記の処理によって実現される制御装置70の機能が、
図3に示す駆動輪・操舵制御部42に相当する。
【0053】
次に、制御装置70は、フォークリフト10が荷取り位置(最終目標位置及び最終目標方向)まで移動したかを判断する(S58)。フォークリフト10が荷取り位置まで移動していないと判断した場合(S58でNO)は、制御装置70は、ステップS52〜S58を繰り返す。これによって、フォークリフト10が荷取り位置まで移動する。一方、フォークリフト10が荷取り位置まで移動したと判断した場合(S58でYES)は、
図10に示す処理を終了する。
【0054】
上述した実施例のフォークリフト10では、レーザセンサ20がフォーク22に取付けられている。このため、フォーク22が昇降すると、それに応じてレーザセンサ20も昇降する。したがって、フォーク22を昇降しながら、レーザセンサ20が水平方向にレーザ光を走査するだけで、パレット100の前面の形状を計測することができる。また、パレット100の前面の観測点群から、パレット100の位置、方向及び幅を特定するため、パレット100の横方向の位置ずれや、回転に関するずれを検出することができる。
【0055】
また、上述した実施例のフォークリフト10では、レーザセンサ20で得られたパレット100の計測データに基づいて、車体30をパレット100の荷取り位置まで移動させる軌道データを生成し、その生成した軌道データを用いて車体30を移動させる。このため、フォークリフト10をパレット100の荷取り位置に正確に位置決めすることができる。
【0056】
最後に、上述した実施例と請求項との対応関係を説明しておく。駆動輪・操舵制御部42が「制御部」の一例であり、演算部34、パレット認識部36、軌道・速度計画部38及び駆動・操舵指令部40が請求項でいう「誘導計画部」の一例であり、センサ移動制御部44が「昇降機構」の一例である。
【0057】
以上、本実施例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例をさまざまに変形、変更したものが含まれる。
【0058】
例えば、本実施例では、フォークを上下方向に昇降させることでレーザ光を上下方向に走査したが、本明細書に開示する技術は、このような構成に限られない。例えば、
図12に示すように、フォークの先端を基端に対して傾動させるティルト機構を利用して、レーザセンサ20から照射されるレーザ光を上下方向に走査してもよい。
【0059】
また、本実施例では、レーザセンサ20で得られた観測点群から水平方向に伸びる直線を抽出し、その線分の長さと線分の数(クラスタ数)を、パレット100の開口部110の特徴として捉え、これをもとにパレット100の高さを検出したが、本明細書に開示する技術は、レーザセンサ20から照射されるレーザ光のビーム長の変化を捉えてパレット100の高さを検出してもよい。例えば、レーザセンサ20から照射されるレーザ光を観測対象領域60の上限から下限まで走査すると、
図13に示すように、レーザセンサ20から照射されるレーザ光のビーム長は、開口部110によって大きく変化する。このため、パレット100の高さ(開口部110の高さ方向の位置)は、レーザ光のビーム長の変化によって検出することができる。具体的には、ビーム長が顕著に大きくなった箇所をパレット開口部110の上端とし、ビーム長が顕著に短くなった箇所をパレット開口部110の下端とすることができる。より詳細には、観測対象領域60の上限から下方に向かってレーザスキャンを行うと、まず、レーザ光は、パレット100の上端を捉える。さらにレーザスキャンを続けていくと、照射されるレーザ光の高さが、開口部110に達したとき、照射されるレーザ光は開口部110内を通過し、レーザ光のビーム長が極端に長くなる位置が現れる。したがって、その高さを開口部110の上端と認識することができる。その後、レーザスキャンをさらに続け、照射されるレーザ光の高さが、開口部110の下端に達すると、レーザ光はパレット100の前面に照射され、レーザ光のビーム長が極端に短くなる。したがって、その高さを開口部110の下端と認識することができる。なお、パレットの仕様(開口部110の大きさ)が既知の場合、開口部110の上端又は下端の位置を検出できれば、パレット開口部110の中央部の高さを求めることができる。この場合、レーザ光を観測対象領域60の下限までレーザ光を走査する必要がなくなるため、リードタイムの低減が可能となる。なお、パレット100の高さの検出は、観測対象領域60の下限から上方に向かってレーザスキャンを行ってもよい。
【0060】
本明細書または図面に説明した技術要素は、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。また、本明細書又は図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。