このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
複数の倉庫ロボットの制御とシミュレーション
この例では、倉庫施設や配送センターで作業する複数のロボットの制御とシミュレーションを行う方法を説明します。ロボットは施設内を走行してパッケージをピックし、保管または加工のためにステーションに搬送します。この例は、同じ施設内で 1 台のロボットを駆動する倉庫ロボットのタスクの実行の例基づいてい。。
Simulink®sateflo金宝appwチャートこのパッケージ仕分け仕分けはチャートチャートチャートと机器人系统工具箱™ののブロック使用してモデル化するすることができことができます。Central Schedulerは,"荷積みステーション" からパッケージをピックして特定の"荷降ろしステーション" に搬送するコマンドをロボットに送信します。Robot Controllerは,荷降ろしの位置て轨迹计画し,ロボットロボットへの速度コマンドコマンドを生成ししますますますはPlantに入力されます。これは、速度コマンドを実行してロボットのグラウンド トゥルース姿勢を返す差動駆動型ロボット モデルを含んでいます。ロボットのステータスを追跡する目的で、姿勢がスケジューラとコントローラーに返されます。このワークフローが 5 台のロボットからなる 1 グループに対して実行されます。すべてのロボットのスケジューリング、追跡およびモデル化が同時に行われます。
提供されている Simulink モデル多动蛋白动物模型
は,前述のシナリオをモデル化したものです。
Central Scheduler
中央调度程序はstateflowチャートチャート使用し,,,包装分配器からロボットへのパッケージの割り当てを処理します。各ロボットは一度に 1 つのパッケージを搬送可能で、各パッケージに必要な移動先に基づいて、荷積みステーションから荷降ろしステーションへ移動するように命令されます。また、スケジューラはパッケージとロボットのステータスを追跡して、Status Dashboard更新しあるががた冲突をししたスケジューラスケジューラははロボットロボットののの姿势姿势ににてて,,そのそのロボットロボットに停止停止コマンドコマンドをををを送信送信送信送信行い行いますますますますます的な物回避実行できます。
对于每个机器人和包装状态サブシステムは、ロボットとパッケージの状態を追跡するためのバスの配列をRobotPackageStatus
バスオブジェクトとして処理するFor Each Subsystem(Simulink)です。これにより、さまざまな台数のロボットに合わせて、このモデルを簡単に更新できます。For-Each サブシステムを使用したバス配列の処理の詳細については、バス配列の操作(Simulink)を参照してください。
Scheduler
次の概略は,Stateflow チャートSchedulerの信号のを示してい。。
Robot Controller
Robot ControllerはFor Each Subsystem(Simulink)を使用して、5 台のロボット用にロボット コントローラーの配列を生成します。
次の概略は,For Each Robot Controllerに关连て信号値のタイプを示してい。。
各ロボット コントローラーは次の入力と出力をもちます。
コントローラーはパッケージがれているコマンドを受け取り,mobileRobotPRM
を使用,仓库の人员にするのパスを计画します。纯粹的追求ブロックはこのパスを受け取り、各ウェイポイントを通過するための速度コマンドを生成します。また、ロボットがゴールに到達した時点でロボットとパッケージのステータスが更新されます。各ロボットには固有の内部スケジューラもあり、これはパッケージ情報に基づいて荷降ろしステーションの位置を指定し、パッケージを降ろした後でロボットを荷積みステーションに戻します。
ロボット コントローラー モデルは、倉庫ロボットのタスクの実行に示されているものと同じモデルWarehousetasksrobotsimulationModel
を使用し。
Plant
Plantサブシステムは、Differential Drive Kinematic Modelブロックをてロボット运动をモデルし。。。
モデルの設定
MATLAB® で、モデルのさまざまな変数の設定を開始します。
倉庫の環境の定義
logical 型の行列逻辑图
,仓库マップを表します。には壁,,,そのその他ののの加工加工ステーションを表す表す障害障害物物が含まれていますますxy座标でされて。。
loadmultiRobotWarehouseMap.mat逻辑图loadingStationunloadingStationschargingStationswarehouseFig = figure('Name','Warehouse Setting','单位',"normalized",“外键”,[0 0 1 1]); visualizeWarehouse(warehouseFig, logicalMap, chargingStations, unloadingStations, loadingStation);
ステーションの占有状態の確認
マップ内でステーションが占有されていないことを確認します。
map = binaryOccupancyMap(logicalMap);if(任何(checkoccupancy(Map,[Chargingstations; LoadingStation; unloadingstations])))错误("At least one of the station locations is occupied in the map.")end
Central Scheduler
Central Schedulerは,に搬送をするため,搬送パッケージの知识をを必要とと。。。
パッケージの定义
は,届け先となるさまざまなしステーションステーションををのののの配列としてとしてとしてとしてとして指定指定指定ささされますますますます。。。。このこのこのこの例例例例例例ににににには荷降ろ荷降ろ荷降ろししがががががががががががががががががががががの値取ることができます。
loadpackages.matpackagespackages
packages =1×113 2 1 2 3 1 1 1 2 3 1
ロボットの台数
ロボットの台数は,Stateflow チャートSchedulerの初期さまざま信号のサイズをために使用され。
numrobots = size(Chargingstations,1);% Each robot has its own charging station;
冲突検出ゴール到达の値値
Central SchedulerとRobot Controllerは,衝突検出およびゴール到達条件のために特定のしきい値としてcollisionThresh
と从Goalthresh出发
をそれぞれ使用します。
冲突によって特定距离しきい値内にあるのロボットのの,,,インデックスインデックスインデックス値値値値ががが低い低い方方ののロボットロボットロボットののの移动移动移动移动をを许可许可しし,,もうもうもうもうます。続けるは,上上的静的的障害物をを回避できなければなりなりませませんんん。Vector Field Histogram(Navigation Toolbox)ブロックの他の水准コントローラーをでき。。。
ゴール到達条件は、ロボットのゴール位置からの距離がしきい値从Goalthresh出发
内にある場合に発生します。
loadexampleMultiRobotParams.mat从Goalthresh出发collisionThresh
バスオブジェクト
RobotDeliverCommand
とRobotPackageStatus
のバス オブジェクトは、Central SchedulerとRobot Controllerの间とパッケージ割り当てを受け渡すにささますます。
loadwarehouseRobotBusObjects.matRobotDeliverCommandRobotPackageStatus
シミュレーション
Simulink モデルを開きます。
open_system(“ Multirobotexamplemodel.slx”)
シミュレーションを。ロボットがパス走行してを搬送するする様子がが表示さされる。
sim('multiRobotExampleModel');
###启动序列模型参考模拟构建###成功更新了模型参考模拟目标:robotController构建摘要仿真目标构建:模型动作重建原因======================================================================================================= robotController代码生成并编译了RobotController_msf.mexa64。1个型号中的1个型号(0个模型已经最新)构建持续时间:0H 2M 58.321S
メトリクスおよびステータスのダッシュボード
各パッケージについて、モデルのダッシュボードにパッケージが "InProgress"、"Unassigned"、"Delivered" のいずれであるかが表示されます。Robot Statusにはした距离,パッケージの位置パッケージパッケージパッケージががさされます
モデルの拡張
このは性にて仓库内ロボットの台数できるできるようにに设定设定さされれています。。ロボット追加追加するにはは
chargingstations(6,:) = [10,15];% Charging Station for the additional 6th robotchargingStations(7, :) = [10, 17];额外的第七机器人的百分比充电站
また,ステーションをして,にを割り当てることもできます。
: unloadingStations(4) =(30、50);packages = [packages, 4, 4];
ロボットのにするように,ののDifferential Kinematic Modelブロックも必要です。示例HelperReplaceplantsubsystem
は,数字
を更新することでこれらを追加します。
numrobots = size(Chargingstations,1)%和以前一样,每个机器人都有自己的充电站
数字= 7
示例HelperReplaceplantsubsystem(“ Multirobotexamplemodel/机器人”, numRobots);
任意既存位置再定义こともます。ステーションの位置を変更変更ます。。。
loadingStation = [35, 20];
シミュレーション
変更を行った後に、シミュレーションを再び実行します。ステーションの位置が更新され、ロボットの台数が増えたことが確認できます。
sim('multiRobotExampleModel');
###启动序列模型参考模拟构建###成功更新了模型参考模拟目标:robotController构建摘要仿真目标构建:模型动作重建原因========================================================================================================== robotController Code generated and compiled Global variable unloadingStations has changed. 1 of 1 models built (0 models already up to date) Build duration: 0h 1m 22.19s
可視化
可视化辅助器にはのを変更オプションいくつかます。ブロックマスクを开いてて,さまざまさまざまののの[Preset Views]を切り替えることができます。パスの可視化の切り替え、またはロボットのメッシュ タイプの更新を行います。表示速度を変更するには[Sample time]を調整します。これは実際のロボット シミュレーションの実行には影響しません。