From b89ea86fb69cf67cb38bdb0622d5fc9dcab11fa8 Mon Sep 17 00:00:00 2001
From: yuliang <398780299@qq.com>
Date: Mon, 23 Jun 2025 21:09:48 +0800
Subject: [PATCH] =?UTF-8?q?cl2=20=E6=8E=A5=E5=85=A5amr=E6=8C=87=E4=BB=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/com/galaxis/rcs/common/enums/PlanTaskType.java | 4 +++-
.../rcs/communication/amrCommunication/AmrMessageHandler.java | 9 +++++++--
.../galaxis/rcs/communication/amrCommunication/MqttConfig.java | 5 +++--
.../galaxis/rcs/connector/cl2/sendEntity/AmrTaskMessage.java | 4 ++--
.../com/galaxis/rcs/connector/cl2/sendEntity/BaseMessage.java | 6 ++++++
servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java | 2 +-
servo/src/main/java/com/galaxis/rcs/task/TaskService.java | 2 +-
.../java/com/galaxis/rcs/task/dispatcher/TaiWanDispatcher.java | 3 +++
.../main/java/com/yvan/logisticsModel/LogisticsRuntime.java | 4 ++--
.../java/com/yvan/logisticsModel/PtrAgvConnectorThread.java | 9 +++++----
servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java | 10 ++++++++--
11 files changed, 41 insertions(+), 17 deletions(-)
create mode 100644 servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/BaseMessage.java
diff --git a/servo/src/main/java/com/galaxis/rcs/common/enums/PlanTaskType.java b/servo/src/main/java/com/galaxis/rcs/common/enums/PlanTaskType.java
index a0f0f14..55c2b29 100644
--- a/servo/src/main/java/com/galaxis/rcs/common/enums/PlanTaskType.java
+++ b/servo/src/main/java/com/galaxis/rcs/common/enums/PlanTaskType.java
@@ -8,5 +8,7 @@ public enum PlanTaskType {
ROTATION, // 旋转任务
LOAD, // 取货任务
UNLOAD, // 装载任务
- CHARGE // 充电任务
+ CHARGE, // 充电任务
+ FINISH // 完成任务
+
}
diff --git a/servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/AmrMessageHandler.java b/servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/AmrMessageHandler.java
index e77e15f..c9640bb 100644
--- a/servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/AmrMessageHandler.java
+++ b/servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/AmrMessageHandler.java
@@ -11,6 +11,7 @@ import com.galaxis.rcs.connector.cl2.receiveEntity.base.TaskModeChangeData;
import com.galaxis.rcs.connector.cl2.receiveEntity.base.TaskStatusChangeData;
import com.galaxis.rcs.connector.cl2.receiveEntity.base.TaskTypeChangeData;
import com.galaxis.rcs.connector.cl2.sendEntity.AmrTaskMessage;
+import com.galaxis.rcs.connector.cl2.sendEntity.BaseMessage;
import com.yvan.logisticsModel.LogisticsRuntimeService;
import com.yvan.logisticsModel.PtrAgvItem;
import lombok.extern.slf4j.Slf4j;
@@ -196,8 +197,12 @@ public class AmrMessageHandler {
return (PtrAgvItem) executorItem;
}
public static void sendCmd10010(String vehicleId, AmrTaskMessage amrTaskMessage) throws JsonProcessingException, MqttException {
- MqttClient mqttClient = AppContextHolder.getBean(MqttClient.class, true);
- String json = JacksonUtils.toJson(amrTaskMessage);
+ MqttClient mqttClient = MqttConfig.mqttClient;
+ BaseMessage baseMessage = new BaseMessage();
+ baseMessage.id = 10010;
+ baseMessage.content = amrTaskMessage;
+ String json = JacksonUtils.toJson(baseMessage);
+ log.info("sendCmd10010: {}", json);
mqttClient.publish("/wcs_server/" + vehicleId, json.getBytes(StandardCharsets.UTF_8), 0, false);
}
diff --git a/servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/MqttConfig.java b/servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/MqttConfig.java
index 3c314a1..5f05002 100644
--- a/servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/MqttConfig.java
+++ b/servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/MqttConfig.java
@@ -13,6 +13,7 @@ import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
public class MqttConfig {
+ public static MqttClient mqttClient = null;
@Value("${mqtt.broker-url}")
private String brokerUrl;
@@ -36,7 +37,7 @@ public class MqttConfig {
}
@Autowired private AmrMessageHandler amrMessageHandler;
- @Bean(destroyMethod = "disconnect")
+ @Bean(destroyMethod = "disconnect", name = "mqttClient")
public MqttClient mqttClient() throws MqttException {
MqttClient client = new MqttClient(brokerUrl, clientId);
client.setCallback(new MqttCallback() {
@@ -79,7 +80,7 @@ public class MqttConfig {
});
client.connect(mqttConnectOptions());
client.subscribe("/agv_robot/status", 0);
-
+ mqttClient = client;
return client;
}
}
diff --git a/servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/AmrTaskMessage.java b/servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/AmrTaskMessage.java
index 5ad9620..92ad6ac 100644
--- a/servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/AmrTaskMessage.java
+++ b/servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/AmrTaskMessage.java
@@ -31,7 +31,7 @@ public class AmrTaskMessage {
// 路径分段数 UInt8
public short LinkCounts;
// 路径分段信息
- public List Links;
+ public List Link;
// AMR内置货位ID(仅对多层移栽有意义)UInt8 1~N
public short BuiltinSlotNo;
// 提升移栽货物拣货模式 UInt8 0:不控制(无动作) 1:从货架上取货 2:将货物放到货架上 3:仅调整托盘高度(不进行取放货操作) 4:调整车身货物(仅供调试,RCS勿发送此命令) 5:仅调整载货台到取货高度,但是不动作 6:仅调整载货台到放货高度,但是不动作
@@ -92,7 +92,7 @@ public class AmrTaskMessage {
}
@AllArgsConstructor
- public static class Link {
+ public static class LinkData {
//该段目标点X坐标 UInt16 逻辑单位,乘以一定系数才是物理距离
public int X;
//该段目标点Y坐标 UInt16 逻辑单位,乘以一定系数才是物理距离
diff --git a/servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/BaseMessage.java b/servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/BaseMessage.java
new file mode 100644
index 0000000..076a941
--- /dev/null
+++ b/servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/BaseMessage.java
@@ -0,0 +1,6 @@
+package com.galaxis.rcs.connector.cl2.sendEntity;
+
+public class BaseMessage {
+ public int id;
+ public Object content;
+}
diff --git a/servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java b/servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java
index 658e109..f7c2886 100644
--- a/servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java
+++ b/servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java
@@ -90,7 +90,7 @@ public class PlanTaskSequence {
// 添加完成动作
public RcsTaskPlan addFinish() {
- RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.ROTATION.toString());
+ RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.FINISH.toString());
this.isFinished = true;
return task;
}
diff --git a/servo/src/main/java/com/galaxis/rcs/task/TaskService.java b/servo/src/main/java/com/galaxis/rcs/task/TaskService.java
index 3a2947d..b7677f4 100644
--- a/servo/src/main/java/com/galaxis/rcs/task/TaskService.java
+++ b/servo/src/main/java/com/galaxis/rcs/task/TaskService.java
@@ -50,7 +50,7 @@ public class TaskService {
* 获取当前等待执行的任务列表
*/
public List getWaitingTaskList(List executorList) {
- return waitingTaskList;
+ return Lists.newArrayList(waitingTaskList);
}
/**
diff --git a/servo/src/main/java/com/galaxis/rcs/task/dispatcher/TaiWanDispatcher.java b/servo/src/main/java/com/galaxis/rcs/task/dispatcher/TaiWanDispatcher.java
index 8d745c9..b32c446 100644
--- a/servo/src/main/java/com/galaxis/rcs/task/dispatcher/TaiWanDispatcher.java
+++ b/servo/src/main/java/com/galaxis/rcs/task/dispatcher/TaiWanDispatcher.java
@@ -13,6 +13,9 @@ public class TaiWanDispatcher {
public void dispatchTask(TaskDispatchFactory factory, List executorList, List tasks) {
// 台湾展会的任务分配逻辑
+ if(tasks == null || executorList == null){
+ return;
+ }
for (ExecutorItem agv : executorList) {
for (RcsTaskBiz task : tasks) {
if (Objects.equals(agv.getId(), task.getAllocatedExecutorId())) {
diff --git a/servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java b/servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java
index 5ece3b9..84e80a7 100644
--- a/servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java
+++ b/servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java
@@ -96,11 +96,11 @@ public class LogisticsRuntime {
/**
* 根据 ID 获取静态物品(如路标点、货架、地堆位等)
*/
- public StaticItem getStaticItemByLogicXY(int logicX, int logicZ) {
+ public StaticItem getStaticItemByLogicXY(int logicX, int logicY) {
// 到所有楼层寻找这个物品
for (Floor floor : this.floorMap.values()) {
for (StaticItem item : floor.itemMap.values()) {
- if (item.logicX == logicX && item.logicZ == logicZ) {
+ if (item.logicX == logicX && item.logicY == logicY) {
return item;
}
}
diff --git a/servo/src/main/java/com/yvan/logisticsModel/PtrAgvConnectorThread.java b/servo/src/main/java/com/yvan/logisticsModel/PtrAgvConnectorThread.java
index c37758b..650fa12 100644
--- a/servo/src/main/java/com/yvan/logisticsModel/PtrAgvConnectorThread.java
+++ b/servo/src/main/java/com/yvan/logisticsModel/PtrAgvConnectorThread.java
@@ -56,14 +56,14 @@ public class PtrAgvConnectorThread extends Thread {
taskMessage.GoNow = true;
taskMessage.StartX = deviceTask.startPoint.logicX;
taskMessage.StartY = deviceTask.startPoint.logicY;
- taskMessage.Links = new ArrayList<>();
+ taskMessage.Link = new ArrayList<>();
}
deviceTask.seqNo = taskMessage.SeqNo;
- AmrTaskMessage.Link link = new AmrTaskMessage.Link(deviceTask.endPoint.logicX, deviceTask.endPoint.logicY, deviceTask.speed);
- taskMessage.Links.add(link);
+ AmrTaskMessage.LinkData link = new AmrTaskMessage.LinkData(deviceTask.endPoint.logicX, deviceTask.endPoint.logicY, deviceTask.speed);
+ taskMessage.Link.add(link);
if (isPositiveSpeed == (deviceTask.speed > 0) && headerDirection == deviceTask.direction) {
taskCount ++;
@@ -78,13 +78,14 @@ public class PtrAgvConnectorThread extends Thread {
distance = 0;
taskCount = 0;
startTask = null;
- taskMessage = null;
+
try {
cl2DeviceConnector.sendTask(ptrAgvItem.getId(), taskMessage);
} catch (MqttException | JsonProcessingException e) {
log.error("Cl2DeviceConnector robotMove: executorItem={}, task={}, error={}",
ptrAgvItem.getId(), deviceTask.planTaskId, e);
}
+ taskMessage = null;
}
}
} catch (InterruptedException e) {
diff --git a/servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java b/servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java
index 8ec069d..5bf598c 100644
--- a/servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java
+++ b/servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java
@@ -49,9 +49,9 @@ public class PtrAgvItem extends ExecutorItem {
// agv当前z坐标
public double z;
// 当前所在站点的逻辑X坐标 Int32
- public int logicX;
+ public int logicX = 13;
// 当前所在站点的逻辑Y坐标 Int32
- public int logicY;
+ public int logicY = 10;
// 当前方向 UInt8 0: X轴正向 1: Y轴正向 2: X轴负向 3: Y轴负向 15: 未知方向
public short direction;
// agv当前转动角度值
@@ -70,6 +70,12 @@ public class PtrAgvItem extends ExecutorItem {
* 连接器线程
*/
private final PtrAgvConnectorThread connectorThread;
+
+ public void mapReady() {
+ this.isMapReady = true;
+ this.startConnector();
+ }
+
/**
* 启动连接器线程
*/