|
|
@ -2,10 +2,7 @@ package com.galaxis.rcs.plan.path; |
|
|
|
|
|
|
|
|
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.CarryTask; |
|
|
import com.galaxis.rcs.plan.task.*; |
|
|
import com.galaxis.rcs.plan.task.LoadTask; |
|
|
|
|
|
import com.galaxis.rcs.plan.task.MoveTask; |
|
|
|
|
|
import com.galaxis.rcs.plan.task.UnloadTask; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
@ -20,6 +17,9 @@ public class PtrPathPlanner { |
|
|
this.astar = new AStarPathPlanner(graph); |
|
|
this.astar = new AStarPathPlanner(graph); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void planChargerTask(PlanTaskSequence planSequence, String id, LCCDirection fromDirection, ChargerTask chargerTask) { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
public void planMoveTask(PlanTaskSequence plan, String startNodeId, LCCDirection startDirection, MoveTask moveTask) { |
|
|
public void planMoveTask(PlanTaskSequence plan, String startNodeId, LCCDirection startDirection, MoveTask moveTask) { |
|
|
|
|
|
|
|
|
@ -51,30 +51,30 @@ public class PtrPathPlanner { |
|
|
List<State> toLoadPath = astar.findPath(startNodeId, startDirection, loadNodeDirection.node().id(), loadNodeDirection.direction()); |
|
|
List<State> toLoadPath = astar.findPath(startNodeId, startDirection, loadNodeDirection.node().id(), loadNodeDirection.direction()); |
|
|
|
|
|
|
|
|
// 检查方向是否匹配,如果不匹配则插入旋转点
|
|
|
// 检查方向是否匹配,如果不匹配则插入旋转点
|
|
|
if (!toLoadPath.isEmpty()) { |
|
|
if (!toLoadPath.isEmpty()) { |
|
|
State lastState = toLoadPath.get(toLoadPath.size() - 1); |
|
|
State lastState = toLoadPath.get(toLoadPath.size() - 1); |
|
|
if (lastState.direction() != loadNodeDirection.direction()) { |
|
|
if (lastState.direction() != loadNodeDirection.direction()) { |
|
|
Node rotationNode = PathUtils.findNearestRotationNode( |
|
|
Node rotationNode = PathUtils.findNearestRotationNode( |
|
|
graph, lastState.node(), lastState.direction(), loadNodeDirection.direction() |
|
|
graph, lastState.node(), lastState.direction(), loadNodeDirection.direction() |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
if (rotationNode != null) { |
|
|
if (rotationNode != null) { |
|
|
// 插入旋转路径
|
|
|
// 插入旋转路径
|
|
|
List<State> toRotation = astar.findPath( |
|
|
List<State> toRotation = astar.findPath( |
|
|
lastState.node().id(), lastState.direction(), |
|
|
lastState.node().id(), lastState.direction(), |
|
|
rotationNode.id(), loadNodeDirection.direction() |
|
|
rotationNode.id(), loadNodeDirection.direction() |
|
|
); |
|
|
); |
|
|
toLoadPath.addAll(toRotation); |
|
|
toLoadPath.addAll(toRotation); |
|
|
|
|
|
|
|
|
// 从旋转点到目标点
|
|
|
// 从旋转点到目标点
|
|
|
List<State> fromRotation = astar.findPath( |
|
|
List<State> fromRotation = astar.findPath( |
|
|
rotationNode.id(), loadNodeDirection.direction(), |
|
|
rotationNode.id(), loadNodeDirection.direction(), |
|
|
loadNodeDirection.node().id(), loadNodeDirection.direction() |
|
|
loadNodeDirection.node().id(), loadNodeDirection.direction() |
|
|
); |
|
|
); |
|
|
toLoadPath.addAll(fromRotation); |
|
|
toLoadPath.addAll(fromRotation); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 规划到放货点路径
|
|
|
// 规划到放货点路径
|
|
|
List<State> toUnloadPath = astar.findPath(loadNodeDirection.node().id(), loadNodeDirection.direction(), unloadNodeDirection.node().id(), unloadNodeDirection.direction()); |
|
|
List<State> toUnloadPath = astar.findPath(loadNodeDirection.node().id(), loadNodeDirection.direction(), unloadNodeDirection.node().id(), unloadNodeDirection.direction()); |
|
|
|