Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java
master
修宁 6 months ago
parent
commit
4041e69c6e
  1. 4
      servo/src/main/java/com/galaxis/rcs/common/enums/PlanTaskType.java
  2. 9
      servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/AmrMessageHandler.java
  3. 5
      servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/MqttConfig.java
  4. 4
      servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/AmrTaskMessage.java
  5. 6
      servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/BaseMessage.java
  6. 2
      servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java
  7. 2
      servo/src/main/java/com/galaxis/rcs/task/TaskService.java
  8. 3
      servo/src/main/java/com/galaxis/rcs/task/dispatcher/TaiWanDispatcher.java
  9. 4
      servo/src/main/java/com/yvan/logisticsModel/LogisticsRuntime.java
  10. 9
      servo/src/main/java/com/yvan/logisticsModel/PtrAgvConnectorThread.java
  11. 10
      servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java

4
servo/src/main/java/com/galaxis/rcs/common/enums/PlanTaskType.java

@ -8,5 +8,7 @@ public enum PlanTaskType {
ROTATION, // 旋转任务 ROTATION, // 旋转任务
LOAD, // 取货任务 LOAD, // 取货任务
UNLOAD, // 装载任务 UNLOAD, // 装载任务
CHARGE // 充电任务 CHARGE, // 充电任务
FINISH // 完成任务
} }

9
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.TaskStatusChangeData;
import com.galaxis.rcs.connector.cl2.receiveEntity.base.TaskTypeChangeData; import com.galaxis.rcs.connector.cl2.receiveEntity.base.TaskTypeChangeData;
import com.galaxis.rcs.connector.cl2.sendEntity.AmrTaskMessage; 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.LogisticsRuntimeService;
import com.yvan.logisticsModel.PtrAgvItem; import com.yvan.logisticsModel.PtrAgvItem;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -196,8 +197,12 @@ public class AmrMessageHandler {
return (PtrAgvItem) executorItem; return (PtrAgvItem) executorItem;
} }
public static void sendCmd10010(String vehicleId, AmrTaskMessage amrTaskMessage) throws JsonProcessingException, MqttException { public static void sendCmd10010(String vehicleId, AmrTaskMessage amrTaskMessage) throws JsonProcessingException, MqttException {
MqttClient mqttClient = AppContextHolder.getBean(MqttClient.class, true); MqttClient mqttClient = MqttConfig.mqttClient;
String json = JacksonUtils.toJson(amrTaskMessage); 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); mqttClient.publish("/wcs_server/" + vehicleId, json.getBytes(StandardCharsets.UTF_8), 0, false);
} }

5
servo/src/main/java/com/galaxis/rcs/communication/amrCommunication/MqttConfig.java

@ -13,6 +13,7 @@ import org.springframework.context.annotation.Configuration;
@Slf4j @Slf4j
@Configuration @Configuration
public class MqttConfig { public class MqttConfig {
public static MqttClient mqttClient = null;
@Value("${mqtt.broker-url}") @Value("${mqtt.broker-url}")
private String brokerUrl; private String brokerUrl;
@ -36,7 +37,7 @@ public class MqttConfig {
} }
@Autowired private AmrMessageHandler amrMessageHandler; @Autowired private AmrMessageHandler amrMessageHandler;
@Bean(destroyMethod = "disconnect") @Bean(destroyMethod = "disconnect", name = "mqttClient")
public MqttClient mqttClient() throws MqttException { public MqttClient mqttClient() throws MqttException {
MqttClient client = new MqttClient(brokerUrl, clientId); MqttClient client = new MqttClient(brokerUrl, clientId);
client.setCallback(new MqttCallback() { client.setCallback(new MqttCallback() {
@ -79,7 +80,7 @@ public class MqttConfig {
}); });
client.connect(mqttConnectOptions()); client.connect(mqttConnectOptions());
client.subscribe("/agv_robot/status", 0); client.subscribe("/agv_robot/status", 0);
mqttClient = client;
return client; return client;
} }
} }

4
servo/src/main/java/com/galaxis/rcs/connector/cl2/sendEntity/AmrTaskMessage.java

@ -31,7 +31,7 @@ public class AmrTaskMessage {
// 路径分段数 UInt8 // 路径分段数 UInt8
public short LinkCounts; public short LinkCounts;
// 路径分段信息 // 路径分段信息
public List<Link> Links; public List<LinkData> Link;
// AMR内置货位ID(仅对多层移栽有意义)UInt8 1~N // AMR内置货位ID(仅对多层移栽有意义)UInt8 1~N
public short BuiltinSlotNo; public short BuiltinSlotNo;
// 提升移栽货物拣货模式 UInt8 0:不控制(无动作) 1:从货架上取货 2:将货物放到货架上 3:仅调整托盘高度(不进行取放货操作) 4:调整车身货物(仅供调试,RCS勿发送此命令) 5:仅调整载货台到取货高度,但是不动作 6:仅调整载货台到放货高度,但是不动作 // 提升移栽货物拣货模式 UInt8 0:不控制(无动作) 1:从货架上取货 2:将货物放到货架上 3:仅调整托盘高度(不进行取放货操作) 4:调整车身货物(仅供调试,RCS勿发送此命令) 5:仅调整载货台到取货高度,但是不动作 6:仅调整载货台到放货高度,但是不动作
@ -92,7 +92,7 @@ public class AmrTaskMessage {
} }
@AllArgsConstructor @AllArgsConstructor
public static class Link { public static class LinkData {
//该段目标点X坐标 UInt16 逻辑单位,乘以一定系数才是物理距离 //该段目标点X坐标 UInt16 逻辑单位,乘以一定系数才是物理距离
public int X; public int X;
//该段目标点Y坐标 UInt16 逻辑单位,乘以一定系数才是物理距离 //该段目标点Y坐标 UInt16 逻辑单位,乘以一定系数才是物理距离

6
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;
}

2
servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java

@ -90,7 +90,7 @@ public class PlanTaskSequence {
// 添加完成动作 // 添加完成动作
public RcsTaskPlan addFinish() { public RcsTaskPlan addFinish() {
RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.ROTATION.toString()); RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.FINISH.toString());
this.isFinished = true; this.isFinished = true;
return task; return task;
} }

2
servo/src/main/java/com/galaxis/rcs/task/TaskService.java

@ -50,7 +50,7 @@ public class TaskService {
* 获取当前等待执行的任务列表 * 获取当前等待执行的任务列表
*/ */
public List<RcsTaskBiz> getWaitingTaskList(List<ExecutorItem> executorList) { public List<RcsTaskBiz> getWaitingTaskList(List<ExecutorItem> executorList) {
return waitingTaskList; return Lists.newArrayList(waitingTaskList);
} }
/** /**

3
servo/src/main/java/com/galaxis/rcs/task/dispatcher/TaiWanDispatcher.java

@ -13,6 +13,9 @@ public class TaiWanDispatcher {
public void dispatchTask(TaskDispatchFactory factory, List<ExecutorItem> executorList, List<RcsTaskBiz> tasks) { public void dispatchTask(TaskDispatchFactory factory, List<ExecutorItem> executorList, List<RcsTaskBiz> tasks) {
// 台湾展会的任务分配逻辑 // 台湾展会的任务分配逻辑
if(tasks == null || executorList == null){
return;
}
for (ExecutorItem agv : executorList) { for (ExecutorItem agv : executorList) {
for (RcsTaskBiz task : tasks) { for (RcsTaskBiz task : tasks) {
if (Objects.equals(agv.getId(), task.getAllocatedExecutorId())) { if (Objects.equals(agv.getId(), task.getAllocatedExecutorId())) {

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

@ -96,11 +96,11 @@ public class LogisticsRuntime {
/** /**
* 根据 ID 获取静态物品如路标点货架地堆位等 * 根据 ID 获取静态物品如路标点货架地堆位等
*/ */
public StaticItem getStaticItemByLogicXY(int logicX, int logicZ) { public StaticItem getStaticItemByLogicXY(int logicX, int logicY) {
// 到所有楼层寻找这个物品 // 到所有楼层寻找这个物品
for (Floor floor : this.floorMap.values()) { for (Floor floor : this.floorMap.values()) {
for (StaticItem item : floor.itemMap.values()) { for (StaticItem item : floor.itemMap.values()) {
if (item.logicX == logicX && item.logicZ == logicZ) { if (item.logicX == logicX && item.logicY == logicY) {
return item; return item;
} }
} }

9
servo/src/main/java/com/yvan/logisticsModel/PtrAgvConnectorThread.java

@ -56,14 +56,14 @@ public class PtrAgvConnectorThread extends Thread {
taskMessage.GoNow = true; taskMessage.GoNow = true;
taskMessage.StartX = deviceTask.startPoint.logicX; taskMessage.StartX = deviceTask.startPoint.logicX;
taskMessage.StartY = deviceTask.startPoint.logicY; taskMessage.StartY = deviceTask.startPoint.logicY;
taskMessage.Links = new ArrayList<>(); taskMessage.Link = new ArrayList<>();
} }
deviceTask.seqNo = taskMessage.SeqNo; deviceTask.seqNo = taskMessage.SeqNo;
AmrTaskMessage.Link link = new AmrTaskMessage.Link(deviceTask.endPoint.logicX, deviceTask.endPoint.logicY, deviceTask.speed); AmrTaskMessage.LinkData link = new AmrTaskMessage.LinkData(deviceTask.endPoint.logicX, deviceTask.endPoint.logicY, deviceTask.speed);
taskMessage.Links.add(link); taskMessage.Link.add(link);
if (isPositiveSpeed == (deviceTask.speed > 0) && headerDirection == deviceTask.direction) { if (isPositiveSpeed == (deviceTask.speed > 0) && headerDirection == deviceTask.direction) {
taskCount ++; taskCount ++;
@ -78,13 +78,14 @@ public class PtrAgvConnectorThread extends Thread {
distance = 0; distance = 0;
taskCount = 0; taskCount = 0;
startTask = null; startTask = null;
taskMessage = null;
try { try {
cl2DeviceConnector.sendTask(ptrAgvItem.getId(), taskMessage); cl2DeviceConnector.sendTask(ptrAgvItem.getId(), taskMessage);
} catch (MqttException | JsonProcessingException e) { } catch (MqttException | JsonProcessingException e) {
log.error("Cl2DeviceConnector robotMove: executorItem={}, task={}, error={}", log.error("Cl2DeviceConnector robotMove: executorItem={}, task={}, error={}",
ptrAgvItem.getId(), deviceTask.planTaskId, e); ptrAgvItem.getId(), deviceTask.planTaskId, e);
} }
taskMessage = null;
} }
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {

10
servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java

@ -50,9 +50,9 @@ public class PtrAgvItem extends ExecutorItem {
// agv当前z坐标 // agv当前z坐标
public double z; public double z;
// 当前所在站点的逻辑X坐标 Int32 // 当前所在站点的逻辑X坐标 Int32
public int logicX; public int logicX = 13;
// 当前所在站点的逻辑Y坐标 Int32 // 当前所在站点的逻辑Y坐标 Int32
public int logicY; public int logicY = 10;
// 当前方向 UInt8 0: X轴正向 1: Y轴正向 2: X轴负向 3: Y轴负向 15: 未知方向 // 当前方向 UInt8 0: X轴正向 1: Y轴正向 2: X轴负向 3: Y轴负向 15: 未知方向
public short direction; public short direction;
// agv当前转动角度值 // agv当前转动角度值
@ -72,6 +72,12 @@ public class PtrAgvItem extends ExecutorItem {
*/ */
private final PtrAgvConnectorThread connectorThread; private final PtrAgvConnectorThread connectorThread;
public void mapReady() {
this.isMapReady = true;
this.startConnector();
}
/** /**
* 启动连接器线程 * 启动连接器线程
*/ */

Loading…
Cancel
Save