Main Content

倉庫ロボットのタスクの実行

この例では、指定されたマップ上の 3 点の位置間で、モバイル ロボット用の障害物のないパスを実行する方法を説明します。ロボットは倉庫内にある充電ステーション、荷積みステーション、荷降ろしステーションの 3 か所を訪れる必要があります。これらの位置の訪問順序はスケジューラによって決定されます。スケジューラは、各ロボットのナビゲート先のゴール姿勢を指定します。ロボットはパスを計画し、Pure Pursuit コントローラーを使用して、ロボットの現在姿勢に基づきウェイポイントを追従します。Differential Drive Kinematic Model ブロックは簡略化された運動学をモデル化し、Pure Pursuit コントローラーから線形速度と角速度を受け取ります。この例は、Simulink での差動駆動型ロボットのパスの計画の例に基づいています。

倉庫のマップ

仕分けや配送を行う施設のよくある倉庫では、パッケージを作業ステーションから保管区域に搬送します。倉庫には、オフィスのような立ち入り禁止区域、および通路や歩道をブロックする仕掛品がある場合があります。ロボットには、仕分けステーションに到着した完成パッケージをピックするタスクが与えられ、その保管場所が指示されます。倉庫には、一定期間の経過後にロボットを充電するための充電ステーションもあります。

このサンプルの倉庫の平面図は、倉庫施設内のすべての安全な領域を示すバイナリ占有マップに変換できます。

例のマップ ファイルを読み込みます。logicalMap は、倉庫内の自由空間を示す logical 値の行列です。この行列から binaryOccupancyMap を作成します。

load warehouseMaps.mat logicalMap
map = binaryOccupancyMap(logicalMap);
show(map)

倉庫内にある充電ステーション、仕分け (荷積み) ステーションおよび棚近くの荷降ろし場所の xy 位置を割り当てます。

chargingStn = [5,5];
loadingStn = [52,15];
unloadingStn = [15,42];

マップ上にさまざまな位置を表示します。

hold on;

text(chargingStn(1), chargingStn(2), 1, 'Charging');
plotTransforms([chargingStn, 0], [1 0 0 0])

text(loadingStn(1), loadingStn(2), 1, 'Sorting Station');
plotTransforms([loadingStn, 0], [1 0 0 0])

text(unloadingStn(1), unloadingStn(2), 1, 'Unloading Station');
plotTransforms([unloadingStn, 0], [1 0 0 0])

hold off;

Figure contains an axes object. The axes object with title Binary Occupancy Grid contains 16 objects of type patch, line, image, text.

モデルの概要

ロボットの動作のスケジュール、計画、制御、モデル化を行うシステムのあらゆる面をモデル化する Simulink® モデルが用意されています。

Simulink モデルを開きます。

open_system('warehouseTasksRobotSimulationModel.slx')

計画、制御およびプラント モデル

モデルはSimulink での差動駆動型ロボットのパスの計画の例と類似する計画、制御およびプラント モデルを使用します。プランナーはスケジューラから開始位置とゴール位置を受け取り、指定されたマップに基づいてその間に障害物のないパスを計画します。コントローラーは Pure Pursuit コントローラーを使用して、パスを通るロボットの線形速度と角速度の制御を生成します。これらの制御は、差動駆動型ロボットの動作をモデル化するプラント モデルに渡されます。

ロボット スケジューラ

Scheduler ブロックは、ロボットに開始位置とゴール位置を割り当てます。開始位置にはロボットの現在姿勢が使用され、終了位置はスケジューラ内で指定されているタスクのシーケンスによって決まります。この例では、ロボットのタスク シーケンスが次のように示されています。

  1. 充電位置から開始し、荷積み位置に移動する。

  2. 荷積みステーションで一時停止してパッケージを積み、荷降ろし位置へのパスを計画する。

  3. 荷降ろしステーションに移動してパッケージを降ろす。充電ステーションへのパスを再計画する。

  4. 充電ステーションで停止する。

ロボットのシミュレーション

シミュレーションを実行して、ロボットがタスクを実行することを確認します。

simulation = sim('warehouseTasksRobotSimulationModel.slx');

{"String":"Figure contains an axes object. The axes object with title Binary Occupancy Grid contains 21 objects of type patch, line, image, text.","Tex":"Binary Occupancy Grid","LaTex":[]}

ロボットの軌跡の可視化

分散カメラ システムを模倣して、マップの特定位置におけるロボット軌跡のさらに詳細なビューを取得するカスタムの可視化ツールが用意されています。Visualization Helper ブロックを開き、[Preset Views] ドロップダウンを使用してさまざまなパースペクティブを選択します。可視化の Sample time はロボットのシミュレーションに影響しません。

参考

© Copyright 2019 The MathWorks, Inc.