自动化立体仓库 - WCS系统
#
tzsk
2024-02-07 8dc3bcb40363cc6f9281092b4f6ea0ebcb9335b0
src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -17,13 +17,16 @@
 */
public class NavigateUtils {
    public static List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints) {
    public static List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
        //通过开始编号和结束编号获取对应的xy轴坐标
        int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//开始节点
        int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//结束节点
        ArrayList<int[]> whiteList = new ArrayList<>();//设置计算节点的白名单
        whiteList.add(startArr);//将开始节点设置为白名单,以防被过滤
        if (whites != null && !whites.isEmpty()) {
            whiteList.addAll(whites);//批量添加白名单节点
        }
        //获取当前节点计算的层高,并赋值到每一个节点中
        int lev = Utils.getLev(startPoint);
@@ -39,7 +42,7 @@
        NavigateNode res_node = solution.astarSearch(start, end);
        if (res_node == null) {
            System.out.println("未找到路径");
            System.out.println(start + "," + end + ":未找到路径");
            return null;
        } else {
            ArrayList<NavigateNode> list = new ArrayList<>();
@@ -251,7 +254,7 @@
    /**
     * 检测路径是否可用(可走)
     */
    public static boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev) {
    public static boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev, List<int[]> whitePoints) {
        NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
        if (shuttleThread == null) {
            return false;
@@ -261,23 +264,15 @@
            return false;
        }
        if (shuttleProtocol.getPoint() == null) {
            return false;//小车不存在节点
        }
        Integer mapType = NavigationMapType.DFX.id;
        if (shuttleProtocol.getLiftPosition() == 1) {
            //下降位置
            mapType = NavigationMapType.NORMAL.id;
        }
        NavigateSolution solution = new NavigateSolution(mapType, lev, null, Utils.getShuttlePoints(shuttleNo, lev));//获取无白名单地图(该地图包含小车坐标)
        NavigateSolution solution = new NavigateSolution(mapType, lev, whitePoints, Utils.getShuttlePoints(shuttleNo, lev));//获取无白名单地图(该地图包含小车坐标)
        int[][] map = solution.map;
        for (NavigateNode node : path) {
            if (shuttleProtocol.getPoint().getX() == node.getX() && shuttleProtocol.getPoint().getY() == node.getY()) {
                continue;//小车坐标和当前检测坐标相同,直接跳过,不检测小车所处当前坐标
            }
            int value = map[node.getX()][node.getY()];
            if (value != 0 && value != 3 && value != 5) {//母轨道3、子轨道0、充电桩5
                return false;
@@ -288,7 +283,7 @@
    public static void main(String[] args) {
        //计算路径
        List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null);
        List<NavigateNode> calc = calc("1000901", "1800201", NavigationMapType.NONE.id, null, null);
        System.out.println(calc);
        System.out.println("------------------------");
//        List<NavigateNode> calc = calc("0501401", "0201801", "out");