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.enums.LCCDirection;
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.google.common.base.Strings;
import com.yvan.logisticsModel.LogisticsRuntime;
@ -157,6 +158,9 @@ public class RCSService {
switch (jwPayload.asStr("t")) {
case "cl2":
case "clx":
case "cs1":
case "cc5":
case "cl3": {
// 处理 CL2 或 CLX 类型的执行器
// 车所在的标记位置,及方向 11_4:RIGHT
var eitem = new Cl2Item(runtime, (Map<String, Object>) jwPayload.getInnerMap());
@ -173,6 +177,26 @@ public class RCSService {
}
runtime.executorItemMap.put(eitem.getId(), eitem);
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:
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");
String agvId = jw.asInt("content", "VehicleId") + "";
int seqNo = jw.asInt("content", "SeqNo");
PtrAgvItem agvItem = getPtrAgvItem(agvId);
AmrAgvItem agvItem = getPtrAgvItem(agvId);
if (agvItem == null) {
return;
}
@ -199,9 +199,9 @@ public class AmrMessageHandler {
}
}
public PtrAgvItem getPtrAgvItem(String vehicleId) {
public AmrAgvItem getPtrAgvItem(String vehicleId) {
var executorItem = runtime.executorItemMap.get(vehicleId);
return (PtrAgvItem) executorItem;
return (AmrAgvItem) executorItem;
}
@SneakyThrows
@ -416,7 +416,7 @@ public class AmrMessageHandler {
private final Map<String, Long> lastMessageTimeMap = Maps.newConcurrentMap();
private final ScheduledExecutorService delayCalculator = Executors.newScheduledThreadPool(4);
private void handleHeartbeatMessage(PtrAgvItem agvItem, AmrHeartbeatMessage message) {
private void handleHeartbeatMessage(AmrAgvItem agvItem, AmrHeartbeatMessage message) {
agvItem.handleHeartbeat(message);
// 计算延迟
@ -425,19 +425,19 @@ public class AmrMessageHandler {
updateRedisNetDelay(agvItem.getId(), netDelay);
}
private void handleAmrOnlineMessage(PtrAgvItem agvItem, AmrOnlineMessage message) {
private void handleAmrOnlineMessage(AmrAgvItem agvItem, AmrOnlineMessage message) {
agvItem.handleOnlineEvent();
}
private void handleAmrOfflineMessage(PtrAgvItem agvItem, AmrOfflineMessage message) {
private void handleAmrOfflineMessage(AmrAgvItem agvItem, AmrOfflineMessage message) {
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);
}
private void handleLandmarkMessage(PtrAgvItem agvItem, AmrLandmarkMessage message) {
private void handleLandmarkMessage(AmrAgvItem agvItem, AmrLandmarkMessage message) {
// 这是源逻辑,CurLogicX / CurLogicY / CurDirection 需要到 PtrAgvItem 中更新, 因为要触发事件
agvItem.x = message.X;
agvItem.y = message.Y;
@ -446,7 +446,7 @@ public class AmrMessageHandler {
agvItem.updatePosition(message.CurLogicX, message.CurLogicY, message.CurDirection);
}
private void handleStatusMessage(PtrAgvItem agvItem, AmrStatusMessage message) {
private void handleStatusMessage(AmrAgvItem agvItem, AmrStatusMessage message) {
// 更新位置. TODO 貌似不包含 direction 信息
agvItem.updatePosition(message.CurLogicX, message.CurLogicY, agvItem.direction);
@ -463,7 +463,7 @@ public class AmrMessageHandler {
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");
// 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 "cl3":
case "clx":
case "cc5":
case "cs1":
item = new Cl2Item(this, itemObject);
this.executorItemMap.put(item.getId(), (ExecutorItem) item);
break;
case "fm600":
item = new Fm600Item(this, itemObject);
this.executorItemMap.put(item.getId(), (ExecutorItem) item);
break;
case "cc5":
break;
}
}

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

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

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

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

Loading…
Cancel
Save