AGV調整Matlab實現

% 用二維數組代替地圖和場地信息?
% 可用場地:0
% 小車本身:1
% 貨物點及入庫點:2
% 地圖邊界: 100
% AGV出發區:11
% 監測區:12
% 充電區:13
% 生產區A1、A2:14
% 生產區B3、B4、B5:15
% 倉庫1、4: 16
% 倉庫2、3:17

% 注:以下坐標均在matlab的map矩陣中表示,下標是從[1,1]開始
% 需要注意一個問題 平常的x-y軸坐標表示方法與matlab的矩陣表示方法相反
% 四個入庫點 ?入庫A [4,16] [27,16] 入庫B [16,4] [16,27]?

% ?基本假設:
% (1)AGV 的行駛速度為勻速;
% (2)AGV 在轉彎時的用時固定;
% (3)AGV 從貨架上叉取貨物的用時固定;
% (4)AGV 從自身儲位上放貨物的用時固定;
% (5)不考慮 AGV 自身啟動和制動對速度的影響;
% 定義:小車移動一個格子的時間為1s,轉向花費的時間為1s
% ? ? ?小車到達取貨點時取貨時間1s 卸貨時間1s
global UnitTime TurningTime
global PickUpTime
global DrapTime
UnitTime = 1; ?TurningTime = 1;
PickUpTime = 1; ?DrapTime = 1;

%% 地圖初始化
[AGVMapSize, AGVMap] = mapInit();

%% 向地圖中添加場地信息 -- 出發區、充電區、生產地、倉庫、監測區
AGVMap = addMapVenue(AGVMap);

%% 任務分配采用隨機任務分配策略
x = rand(1,12) * (4-1) + 1; % 12個任務隨機分配給3輛小車
%% 向地圖中添加小車及貨物信息 -- 3輛小車、12個貨物、4個入庫點

% 注:更改小車點和貨物點后需要在函數addMapGoods、函數judgeCargoShelves、函數mapPlot里面進行對應修改
[AGVInitCoorPoint, AGVStartPoint, storageA, storageB, AGVMission, AGVMap] = addMapGoods(AGVMap, x);

AGVTime = [0;0;0]; % 記錄三輛小車的總任務時間
numAGV = 3;
AGVPath = cell(1,numAGV); ?% AGV的初始化路徑矩陣
maxRow = max([size(AGVMission{1},1), size(AGVMission{2},1), size(AGVMission{3},1)]); % 獲取小車中的最大任務數
% AGVPath的第一列和第二列表示規劃路徑的橫縱坐標
% 第三列表示是否發生轉彎 0代表未發生轉彎 1代表在此節點上發生了轉彎
% 第四列表示花費總時間
% 第五列表示是空載還是負載 0代表空載 1代表負載低優先級任務 2代表負載高優先級任務
% 第六列表示是發生沖突的類型 1代表相交節點沖突 2代表相向節點沖突 3代表相向沖突
% 另注:如果小車不去對應的貨物點取貨,那么那個取貨點對他來說一直是一個障礙物,卸貨點也是一樣的設置方式

for i = 1:maxRow
? ? for j = 1:numAGV
? ? ? ? % 執行順序:小車1的任務1,小車2的任務1,小車3的任務1,小車1的任務2,小車2的任務2...
? ? ? ? if i > size(AGVMission{j},1)
? ? ? ? ? ? continue
? ? ? ? else
? ? ? ? ? ? fprintf('開始第%d個小車的第%d個貨物的軌跡規劃\n', j, i)
? ? ? ? ? ? % 對應的小車去對應的貨物取貨
? ? ? ? ? ? isTake = 1; % 是否取貨
? ? ? ? ? ? isSave = 0; % 是否卸貨
? ? ? ? ? ? start = AGVStartPoint(j,:);
? ? ? ? ? ? goal = AGVMission{j}(i,:);
? ? ? ? ? ? travelTime = AGVTime(j);
? ? ? ? ? ? % 取貨最優路徑
? ? ? ? ? ? AGVMap(goal(1), goal(2)) = 0; % 將目標貨物點設置為可用場地
? ? ? ? ? ? [AGVpickUpPath, ~, travelTime] = Astar(start, goal, AGVMapSize, AGVMap, 0, isTake, isSave, travelTime);
? ? ? ? ? ? AGVPath{j} = [AGVPath{j};AGVpickUpPath]; % 將路徑存儲到路徑矩陣中
? ? ? ? ? ? AGVMap(goal(1), goal(2)) = 1; % 將目標貨物點設置為不可用場地

? ? ? ? ? ? % 卸貨路徑
? ? ? ? ? ? start = goal;
? ? ? ? ? ? travelTime = travelTime + PickUpTime; ?% 取貨時間1s?
? ? ? ? ? ? % 判斷貨物對應的貨架
? ? ? ? ? ? [goal1, goal2] = judgeCargoShelves(start, storageA, storageB);
? ? ? ? ? ? AGVMap(goal1(1), goal1(2)) = 0; % 將目標卸貨點設置為可用場地
? ? ? ? ? ? AGVMap(goal2(1), goal2(2)) = 0; % 將目標卸貨點設置為可用場地

? ? ? ? ? ? % 判斷此時任務點離哪一個入庫點更近 進行卸貨
? ? ? ? ? ? isTake = 0;
? ? ? ? ? ? isSave = 1;
? ? ? ? ? ? tmpTime = travelTime;
? ? ? ? ? ? [AGVUnLoadPath1, ~, travelTime1] = Astar(start, goal1, AGVMapSize, AGVMap, 0, isTake, isSave, tmpTime);
? ? ? ? ? ? [AGVUnLoadPath2, ~, travelTime2] = Astar(start, goal2, AGVMapSize, AGVMap, 0, isTake, isSave, tmpTime);
? ? ? ? ? ? if travelTime1 < travelTime2
? ? ? ? ? ? ? ? AGVPath{j} = [AGVPath{j};AGVUnLoadPath1]; % 將路徑存儲到路徑矩陣中
? ? ? ? ? ? ? ? travelTime = travelTime1;
? ? ? ? ? ? ? ? start = goal1;
? ? ? ? ? ? else
? ? ? ? ? ? ? ? AGVPath{j} = [AGVPath{j};AGVUnLoadPath2]; % 將路徑存儲到路徑矩陣中
? ? ? ? ? ? ? ? travelTime = travelTime2;
? ? ? ? ? ? ? ? start = goal2;
? ? ? ? ? ? end ?
? ? ? ? ? ? travelTime = travelTime + DrapTime; ?% 卸貨時間1s
? ? ? ? ? ? AGVMap(goal1(1), goal1(2)) = 1; % 將目標卸貨點設置為不可用場地
? ? ? ? ? ? AGVMap(goal2(1), goal2(2)) = 1; % 將目標卸貨點設置為不可用場地

? ? ? ? ? ? AGVTime(j) = travelTime;
? ? ? ? ? ? % 如果已經執行完最后一個任務,則回到原始出發點
? ? ? ? ? ? if i == size(AGVMission{j},1)
? ? ? ? ? ? ? ? isTake = 1;?
? ? ? ? ? ? ? ? isSave = 0;?
? ? ? ? ? ? ? ? travelTime = AGVTime(j);
? ? ? ? ? ? ? ? goal = AGVInitCoorPoint(j,:);
? ? ? ? ? ? ? ? [AGVpickUpPath, ~, ~] = Astar(start, goal, AGVMapSize, AGVMap, 0, isTake, isSave, travelTime);
? ? ? ? ? ? ? ? AGVPath{j} = [AGVPath{j};AGVpickUpPath]; % 將路徑存儲到路徑矩陣中
? ? ? ? ? ? ? ? AGVMap(goal(1), goal(2)) = 1; % 將靜止的小車視為一個障礙物
? ? ? ? ? ? else
? ? ? ? ? ? ? ? % 此時代表一次任務完成,開始執行下一個小車的任務
? ? ? ? ? ? ? ? AGVStartPoint(j,:) = start; % 更新出發點
? ? ? ? ? ? end
? ? ? ? end
? ? end
end

? ? % 對路徑進行預處理 -- 對回到初始位置的小車置為高優先級,避免發生碰撞
? ? AGVPath = preProcessing(AGVPath);
? ??
? ? % 時間窗算法 規劃出多AGV無沖突的路徑
? ? [AGVPath, sumTime] = timeWindow(AGVPath, AGVMap);
? ??
? ? % 對時間窗算法規劃后的路徑進行處理 -- 細分路徑和補齊長度
? ? AGVPath = finalProcessing(AGVPath);
? ??
? ? % ?動態展示繪圖效果
? ? % 開始繪圖
? ? mapPlot(AGVPath, 1);
? ? fprintf('總花費時間為%d秒\n', sumTime)


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166479.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C百題--7.輸出乘法表

1.問題描述 輸出9*9乘法表 2.解決思路 利用99乘法表行和列之間的關系&#xff0c;進行輸出 注意&#xff1a;%-2d 2代表占兩個字符&#xff1b;-代表左對齊 3.代碼實現 #include<stdio.h> int main(){for(int i1;i<9;i){for(int j1;j<i;j){printf("%d*%d…

微信小程序埋點

使用如下代碼封裝一下&#xff0c;例如封裝在log.js文件里面&#xff1a; var log wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : nullmodule.exports {debug() {if (!log) returnlog.debug.apply(log, arguments)},info() {if (!log) returnlog.info.apply(l…

深入學習pytorch筆記

兩個重要的函數 dir()&#xff1a; 一個內置函數&#xff0c;用于列出對象的所有屬性和方法 help()&#xff1a;一個內置函數&#xff0c;用于獲取關于Python對象、模塊、函數、類等的詳細信息 Dateset類 Dataset&#xff1a;pytorch中的一個類&#xff0c;開發者在訓練和…

抖音電商品牌力不足咋辦?如何升級或強開旗艦店、官方旗艦店?我們有妙招!

隨著抖音電商的發展&#xff0c;越來越多的商家蜂擁而至&#xff0c;入駐經營抖音小店... 然而我們在開店的時候&#xff0c;選擇開通官方旗艦店、旗艦店、專營店或專賣店&#xff0c;卻被系統提示為你的商標品牌力不足&#xff0c;無法開通官方旗艦店、旗艦店、專營店、專賣店…

Android手電筒、閃光燈、torch、flash

1. 僅開啟手電筒 單純的開啟手電筒我們可以使用CameraManager的.setTorchMode()方法。 cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE)獲取該相機特征是否可獲取閃光燈。 CameraManager cameraManager (CameraManager) getSystemService(CAMERA_SE…

在 vscode 中的json文件寫注釋,不報錯的解決辦法

打開 vscode 的「設置」&#xff0c;搜索&#xff1a;files: associations&#xff0c;然后添加 *.json jsonc最后

Nginx 配置錯誤導致的漏洞

目錄 1. CRLF注入漏洞 Bottle HTTP頭注入漏洞 2.目錄穿越漏洞 3. http add_header被覆蓋 本篇要復現的漏洞實驗有一個網站直接為我們提供了Docker的環境&#xff0c;我們只需要下載下來就可以使用&#xff1a; Docker環境的安裝可以參考&#xff1a;Docker安裝 漏洞環境的…

Docker rm 命令

docker rm&#xff1a;刪除一個或多個容器。 語法&#xff1a; docker rm [OPTIONS] CONTAINER [CONTAINER...]OPTIONS說明&#xff1a; -f&#xff1a;通過SIGKILL信號強制刪除一個運行中的容器。 -l &#xff1a;移除容器間的網絡連接&#xff0c;而非容器本身。 -v &…

2023亞太杯數學建模A題思路代碼分析

已經完成A題完整思路代碼&#xff0c;文末名片查看獲取 A題就是我們機器學習中的一個圖像識別&#xff0c;他是水果圖像識別&#xff0c;就是蘋果識別的一個問題&#xff0c;我們用到的方法基本是使用深度學習中的卷積神經網絡來進行識別和分類 問題一&#xff1a;基于附件1中…

展現天津援疆工作成果 “團結村里看振興”媒體采風團走進和田

央廣網天津11月19日消息(記者周思楊)11月18日&#xff0c;由媒體記者、書法和攝影家、旅行社企業代表等40余人組成的“團結村里看振興”媒體采風團走進新疆和田。在接下來的一周時間里&#xff0c;采風團將走訪天津援疆和田地區策勒縣、于田縣、民豐縣鄉村振興示范村&#xff0…

HTML CSS登錄網頁設計

一、效果圖: 二、HTML代碼: <!DOCTYPE html> <!-- 定義HTML5文檔 --> <html lang="en"> …

在全球碳市場中嶄露頭角的中碳CCNG

在全球氣候治理的大背景下&#xff0c;中國碳中和發展集團有限公司&#xff08;簡稱中國碳中和&#xff09;正在成為全球碳交易市場的一個重要參與者。隨著國際社會對碳排放的日益關注&#xff0c;中國碳中和憑借其在碳資產開發、咨詢與管理等領域的深厚積累&#xff0c;正成為…

acedInitGet 函數

acedInitGet 函數是 AutoCAD 的 C++ API(ObjectARX)中用于初始化下一次用戶輸入操作選項的函數。以下是該函數簽名及其組成部分的中文翻譯和解釋: extern "C" int acedInitGet(int val,const ACHAR * kwl );cpp 復制 extern “C”:指定函數使用 C 語言鏈接(lin…

LeetCode93. Restore IP Addresses

文章目錄 一、題目二、題解 一、題目 A valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros. For example, “0.1.2.201” and “192.168.1.1” are valid IP add…

視頻剪輯新招:批量隨機分割,分享精彩瞬間

隨著社交媒體的普及&#xff0c;短視頻已經成為分享生活、交流信息的重要方式。為制作出吸引的短視頻&#xff0c;許多創作者都投入了大量的時間和精力進行剪輯。然而&#xff0c;對于一些沒有剪輯經驗的新手來說&#xff0c;這個過程可能會非常繁瑣。現在一起來看云炫AI智剪批…

楊傳輝:從一體化架構,到一體化產品,為關鍵業務負載打造一體化數據庫

在剛剛結束的年度發布會上&#xff0c;OceanBase正式推出一體化數據庫的首個長期支持版本 4.2.1 LTS&#xff0c;這是面向 OLTP 核心場景的全功能里程碑版本&#xff0c;相比上一個 3.2.4 LTS 版本&#xff0c;新版本能力全面提升&#xff0c;適應場景更加豐富&#xff0c;有更…

web前端之若依框架圖標對照表、node獲取文件夾中的文件名,并通過數組返回文件名、在html文件中引入.svg文件、require、icon

MENU 前言效果圖htmlJavaScripstylenode獲取文件夾中的文件名 前言 需要把若依原有的icon的svg文件拿到哦&#xff01; 注意看生成svg的路徑。 效果圖 html <div id"idSvg" class"svg_box"></div>JavaScrip let listSvg [404, bug, build, …

02 如何快速讀懂一個C++程序

系列文章目錄 02 如何快速讀懂一個C程序 目錄 系列文章目錄 文章目錄 前言 一、C 的基本語法 二、如何看懂一個c程序&#xff1f; 1.了解程序結構 2.C 中的分號 & 語句塊 3.C 注釋 總結 前言 C 是一種高級編程語言&#xff0c;它具有豐富的特性&#xff0c;用于…

CentOS7安裝Docker運行環境

1 引言 Docker 是一個用于開發&#xff0c;交付和運行應用程序的開放平臺。Docker 使您能夠將應用程序與基礎架構分開&#xff0c;從而可以快速交付軟件。借助 Docker&#xff0c;您可以與管理應用程序相同的方式來管理基礎架構。通過利用 Docker 的方法來快速交付&#xff0c;…

11.前綴和、異或前綴和、差分數組練習題

前綴和 前綴和可以用來求滿足條件的子數組的和、個數、長度 更多前綴和題目&#xff1a; 560. 和為 K 的子數組 974. 和可被 K 整除的子數組 1590. 使數組和能被 P 整除 523. 連續的子數組和 525. 連續數組 560. 和為 K 的子數組 中等 給你一個整數數組 nums 和一個整數…