Browse Source

fm600 动画

jx-test
修宁 5 months ago
parent
commit
a5cdbdacd3
  1. 24
      servo/src/main/java/com/galaxis/rcs/RCSService.java
  2. 20
      servo/src/main/java/com/galaxis/rcs/amr/AmrMessageHandler.java
  3. 4
      servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java
  4. 3
      servo/src/main/java/com/yvan/workbench/controller/LccController.java
  5. 16
      servo/src/main/java/com/yvan/workbench/controller/RcsController.java

24
servo/src/main/java/com/galaxis/rcs/RCSService.java

@ -4,6 +4,7 @@ import com.galaxis.rcs.common.entity.AddTaskRequest;
import com.galaxis.rcs.common.entity.AddTaskResult; import com.galaxis.rcs.common.entity.AddTaskResult;
import com.galaxis.rcs.common.enums.LCCDirection; import com.galaxis.rcs.common.enums.LCCDirection;
import com.galaxis.rcs.connector.amr.cl2.Cl2Item; import com.galaxis.rcs.connector.amr.cl2.Cl2Item;
import com.galaxis.rcs.connector.amr.fm600.Fm600Item;
import com.galaxis.rcs.plan.path.PathUtils; import com.galaxis.rcs.plan.path.PathUtils;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.yvan.logisticsModel.LogisticsRuntime; import com.yvan.logisticsModel.LogisticsRuntime;
@ -157,6 +158,9 @@ public class RCSService {
switch (jwPayload.asStr("t")) { switch (jwPayload.asStr("t")) {
case "cl2": case "cl2":
case "clx": case "clx":
case "cs1":
case "cc5":
case "cl3": {
// 处理 CL2 或 CLX 类型的执行器 // 处理 CL2 或 CLX 类型的执行器
// 车所在的标记位置,及方向 11_4:RIGHT // 车所在的标记位置,及方向 11_4:RIGHT
var eitem = new Cl2Item(runtime, (Map<String, Object>) jwPayload.getInnerMap()); var eitem = new Cl2Item(runtime, (Map<String, Object>) jwPayload.getInnerMap());
@ -173,6 +177,26 @@ public class RCSService {
} }
runtime.executorItemMap.put(eitem.getId(), eitem); runtime.executorItemMap.put(eitem.getId(), eitem);
break; break;
}
case "fm600": {
// 处理 CL2 或 CLX 类型的执行器
// 车所在的标记位置,及方向 11_4:RIGHT
var fm600Itemitem = new Fm600Item(runtime, (Map<String, Object>) jwPayload.getInnerMap());
// 找到地标位置
StaticItem staticItem = runtime.getStaticItemById(wayPointId);
if (staticItem != null) {
fm600Itemitem.logicX = staticItem.logicX;
fm600Itemitem.logicY = staticItem.logicY;
fm600Itemitem.direction = PathUtils.convertDirectionToPtrDiretion(LCCDirection.fromString(direction));
} else {
log.warn("Static item not found for wayPointId: {}", wayPointId);
}
runtime.executorItemMap.put(fm600Itemitem.getId(), fm600Itemitem);
break;
}
default: default:
log.warn("Unknown executor type: {}", jwPayload.asStr("t")); log.warn("Unknown executor type: {}", jwPayload.asStr("t"));

20
servo/src/main/java/com/galaxis/rcs/amr/AmrMessageHandler.java

@ -102,7 +102,7 @@ public class AmrMessageHandler {
int id = jw.asInt("id"); int id = jw.asInt("id");
String agvId = jw.asInt("content", "VehicleId") + ""; String agvId = jw.asInt("content", "VehicleId") + "";
int seqNo = jw.asInt("content", "SeqNo"); int seqNo = jw.asInt("content", "SeqNo");
PtrAgvItem agvItem = getPtrAgvItem(agvId); AmrAgvItem agvItem = getPtrAgvItem(agvId);
if (agvItem == null) { if (agvItem == null) {
return; return;
} }
@ -199,9 +199,9 @@ public class AmrMessageHandler {
} }
} }
public PtrAgvItem getPtrAgvItem(String vehicleId) { public AmrAgvItem getPtrAgvItem(String vehicleId) {
var executorItem = runtime.executorItemMap.get(vehicleId); var executorItem = runtime.executorItemMap.get(vehicleId);
return (PtrAgvItem) executorItem; return (AmrAgvItem) executorItem;
} }
@SneakyThrows @SneakyThrows
@ -416,7 +416,7 @@ public class AmrMessageHandler {
private final Map<String, Long> lastMessageTimeMap = Maps.newConcurrentMap(); private final Map<String, Long> lastMessageTimeMap = Maps.newConcurrentMap();
private final ScheduledExecutorService delayCalculator = Executors.newScheduledThreadPool(4); private final ScheduledExecutorService delayCalculator = Executors.newScheduledThreadPool(4);
private void handleHeartbeatMessage(PtrAgvItem agvItem, AmrHeartbeatMessage message) { private void handleHeartbeatMessage(AmrAgvItem agvItem, AmrHeartbeatMessage message) {
agvItem.handleHeartbeat(message); agvItem.handleHeartbeat(message);
// 计算延迟 // 计算延迟
@ -425,19 +425,19 @@ public class AmrMessageHandler {
updateRedisNetDelay(agvItem.getId(), netDelay); updateRedisNetDelay(agvItem.getId(), netDelay);
} }
private void handleAmrOnlineMessage(PtrAgvItem agvItem, AmrOnlineMessage message) { private void handleAmrOnlineMessage(AmrAgvItem agvItem, AmrOnlineMessage message) {
agvItem.handleOnlineEvent(); agvItem.handleOnlineEvent();
} }
private void handleAmrOfflineMessage(PtrAgvItem agvItem, AmrOfflineMessage message) { private void handleAmrOfflineMessage(AmrAgvItem agvItem, AmrOfflineMessage message) {
agvItem.handleOfflineEvent(); agvItem.handleOfflineEvent();
} }
private void handleTaskCompletedMessage(PtrAgvItem agvItem, AmrTaskCompletedMessage message) { private void handleTaskCompletedMessage(AmrAgvItem agvItem, AmrTaskCompletedMessage message) {
agvItem.taskCompleted(message.CurX, message.CurY, message.CurDirection, 4); agvItem.taskCompleted(message.CurX, message.CurY, message.CurDirection, 4);
} }
private void handleLandmarkMessage(PtrAgvItem agvItem, AmrLandmarkMessage message) { private void handleLandmarkMessage(AmrAgvItem agvItem, AmrLandmarkMessage message) {
// 这是源逻辑,CurLogicX / CurLogicY / CurDirection 需要到 PtrAgvItem 中更新, 因为要触发事件 // 这是源逻辑,CurLogicX / CurLogicY / CurDirection 需要到 PtrAgvItem 中更新, 因为要触发事件
agvItem.x = message.X; agvItem.x = message.X;
agvItem.y = message.Y; agvItem.y = message.Y;
@ -446,7 +446,7 @@ public class AmrMessageHandler {
agvItem.updatePosition(message.CurLogicX, message.CurLogicY, message.CurDirection); agvItem.updatePosition(message.CurLogicX, message.CurLogicY, message.CurDirection);
} }
private void handleStatusMessage(PtrAgvItem agvItem, AmrStatusMessage message) { private void handleStatusMessage(AmrAgvItem agvItem, AmrStatusMessage message) {
// 更新位置. TODO 貌似不包含 direction 信息 // 更新位置. TODO 貌似不包含 direction 信息
agvItem.updatePosition(message.CurLogicX, message.CurLogicY, agvItem.direction); agvItem.updatePosition(message.CurLogicX, message.CurLogicY, agvItem.direction);
@ -463,7 +463,7 @@ public class AmrMessageHandler {
agvItem.updateRedisStatus(); agvItem.updateRedisStatus();
} }
private void handleTaskStatusMessage(PtrAgvItem agvItem, JsonWrapper jw, String json) throws MqttException, JsonProcessingException { private void handleTaskStatusMessage(AmrAgvItem agvItem, JsonWrapper jw, String json) throws MqttException, JsonProcessingException {
int EventId = jw.asInt("content", "EventId"); int EventId = jw.asInt("content", "EventId");
// log.info("1-Received message: " + json); // log.info("1-Received message: " + json);

4
servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java

@ -331,16 +331,16 @@ public class LogisticsRuntime {
case "cl2": case "cl2":
case "cl3": case "cl3":
case "clx": case "clx":
case "cc5":
case "cs1": case "cs1":
item = new Cl2Item(this, itemObject); item = new Cl2Item(this, itemObject);
this.executorItemMap.put(item.getId(), (ExecutorItem) item); this.executorItemMap.put(item.getId(), (ExecutorItem) item);
break; break;
case "fm600": case "fm600":
item = new Fm600Item(this, itemObject); item = new Fm600Item(this, itemObject);
this.executorItemMap.put(item.getId(), (ExecutorItem) item); this.executorItemMap.put(item.getId(), (ExecutorItem) item);
break; break;
case "cc5":
break;
} }
} }

3
servo/src/main/java/com/yvan/workbench/controller/LccController.java

@ -1,5 +1,6 @@
package com.yvan.workbench.controller; package com.yvan.workbench.controller;
import com.galaxis.rcs.amr.AmrAgvItem;
import com.galaxis.rcs.common.enums.LCCDirection; import com.galaxis.rcs.common.enums.LCCDirection;
import com.galaxis.rcs.amr.PtrAgvItem; import com.galaxis.rcs.amr.PtrAgvItem;
import com.google.common.base.Strings; import com.google.common.base.Strings;
@ -84,7 +85,7 @@ public class LccController {
for (var executor : runtime.executorItemMap.values()) { for (var executor : runtime.executorItemMap.values()) {
for (var agv : agvStatusList) { for (var agv : agvStatusList) {
if (agv.getId().equals(executor.getId())) { if (agv.getId().equals(executor.getId())) {
agv.copyFromExceptVirtual(((PtrAgvItem) executor).getState()); agv.copyFromExceptVirtual(((AmrAgvItem) executor).getState());
break; break;
} }
} }

16
servo/src/main/java/com/yvan/workbench/controller/RcsController.java

@ -1,5 +1,6 @@
package com.yvan.workbench.controller; package com.yvan.workbench.controller;
import com.galaxis.rcs.amr.AmrAgvItem;
import com.galaxis.rcs.common.entity.LccBasLocation; import com.galaxis.rcs.common.entity.LccBasLocation;
import com.galaxis.rcs.common.entity.RcsTaskBiz; import com.galaxis.rcs.common.entity.RcsTaskBiz;
import com.galaxis.rcs.common.entity.StoreLocation; import com.galaxis.rcs.common.entity.StoreLocation;
@ -8,7 +9,6 @@ import com.galaxis.rcs.common.enums.BizTaskType;
import com.galaxis.rcs.common.enums.LCCDirection; import com.galaxis.rcs.common.enums.LCCDirection;
import com.galaxis.rcs.plan.PlanTaskSequence; import com.galaxis.rcs.plan.PlanTaskSequence;
import com.galaxis.rcs.plan.task.*; import com.galaxis.rcs.plan.task.*;
import com.galaxis.rcs.amr.PtrAgvItem;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.yvan.entity.BasLocationVo; import com.yvan.entity.BasLocationVo;
@ -139,8 +139,8 @@ public class RcsController {
if (executorItem == null) { if (executorItem == null) {
return R.fail("executor not found: " + agvId); return R.fail("executor not found: " + agvId);
} }
if (!(executorItem instanceof PtrAgvItem)) { if (!(executorItem instanceof AmrAgvItem)) {
return R.fail("executor is not a PtrAgvItem id=" + agvId); return R.fail("executor is not a AmrAgvItem id=" + agvId);
} }
return R.success(executorItem); return R.success(executorItem);
@ -433,8 +433,8 @@ public class RcsController {
if (executorItem == null) { if (executorItem == null) {
return R.fail("executor not found: " + agvId); return R.fail("executor not found: " + agvId);
} }
if (!(executorItem instanceof PtrAgvItem agv)) { if (!(executorItem instanceof AmrAgvItem agv)) {
return R.fail("executor is not a PtrAgvItem id=" + agvId); return R.fail("executor is not a AmrAgvItem id=" + agvId);
} }
// 获取机器人当前所在位置, 也可以前端强制指定 // 获取机器人当前所在位置, 也可以前端强制指定
@ -457,10 +457,10 @@ public class RcsController {
} }
if (fromItem == null) { if (fromItem == null) {
return R.fail("PtrAgvItem not found at current location: " + agv.logicX + "_" + agv.logicY + ", id=" + agvId); return R.fail("AmrAgvItem not found at current location: " + agv.logicX + "_" + agv.logicY + ", id=" + agvId);
} }
if (fromDirection == null) { if (fromDirection == null) {
return R.fail("PtrAgvItem unkown direction id=" + agvId); return R.fail("AmrAgvItem unkown direction id=" + agvId);
} }
RcsTaskBiz bizTask = new RcsTaskBiz(); RcsTaskBiz bizTask = new RcsTaskBiz();
@ -487,7 +487,7 @@ public class RcsController {
Map<String, Object> option, Map<String, Object> option,
RcsTaskBiz bizTask, RcsTaskBiz bizTask,
LogisticsRuntime runtime, LogisticsRuntime runtime,
PtrAgvItem agv, AmrAgvItem agv,
PlanTaskSequence planSequence, PlanTaskSequence planSequence,
StaticItem fromItem, StaticItem fromItem,
LCCDirection fromDirection) { LCCDirection fromDirection) {

Loading…
Cancel
Save