Исправление потенциальных ошибок перемещения
This commit is contained in:
parent
9a206925c5
commit
bcb42cce82
46
scheduler.c
46
scheduler.c
@ -240,29 +240,19 @@ void scheduler_main()
|
||||
|
||||
// логика для того, чтобы роботы не столкнулись в начале
|
||||
if (robot1.dx.current_zone < robot1_border) {
|
||||
robot2_lock_zone = -1;
|
||||
robot1_lock_zone = robot1_border;
|
||||
if (robot1_code.PC < 0) {
|
||||
robot2_lock_zone = -1;
|
||||
robot1_lock_zone = robot1_border;
|
||||
robot1_code.barrel_id = -1;
|
||||
robot1_code.code[0] = ROBOT_CMD_DOWN();
|
||||
robot1_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(robot1_border + 2);
|
||||
robot1_code.code[2] = ROBOT_CMD_END();
|
||||
robot1_code.PC = 0;
|
||||
}
|
||||
} else if (robot2.dx.current_zone < ZONE_DEGREASING) {
|
||||
// начальная позиция робота 1 - обезжир
|
||||
robot2_lock_zone = ZONE_DEGREASING;
|
||||
if (robot2_code.PC < 0) {
|
||||
robot2_code.barrel_id = -1;
|
||||
robot2_code.code[0] = ROBOT_CMD_DOWN();
|
||||
robot2_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(ZONE_DEGREASING);
|
||||
robot2_code.code[2] = ROBOT_CMD_END();
|
||||
robot2_code.PC = 0;
|
||||
}
|
||||
} else if (robot2.dx.current_zone > robot2_border) {
|
||||
// это уже граница робота 2
|
||||
robot2_lock_zone = robot2_border - 2;
|
||||
if (robot2_code.PC < 0) {
|
||||
robot2_lock_zone = robot2_border - 2;
|
||||
robot2_code.barrel_id = -1;
|
||||
robot2_code.code[0] = ROBOT_CMD_DOWN();
|
||||
robot2_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(robot2_border - 2);
|
||||
@ -287,17 +277,29 @@ void scheduler_main()
|
||||
|
||||
// и отдельно для второго (только если не в ночном режиме)
|
||||
if (robot2_code.PC < 0) {
|
||||
for (short i = 0; i < BARRELS_COUNT; i++) {
|
||||
// для каждой задачи:
|
||||
tasks[i].start_zone = barrels[i].zone;
|
||||
// определяем можно ли ее выполнить и что вообще нужно выполнить
|
||||
tasks[i].dest_zone = can_move(barrels + i, 2);
|
||||
if (tasks[i].dest_zone >= 0) {
|
||||
tasks[i].priority = get_operation_priority(i);
|
||||
if (robot2.dx.current_zone < ZONE_DEGREASING) {
|
||||
// начальная позиция робота 1 - обезжир
|
||||
robot2_lock_zone = ZONE_DEGREASING;
|
||||
if (robot2_code.PC < 0) {
|
||||
robot2_code.barrel_id = -1;
|
||||
robot2_code.code[0] = ROBOT_CMD_DOWN();
|
||||
robot2_code.code[1] = ROBOT_CMD_MOVE_TO_ZONE(ZONE_DEGREASING);
|
||||
robot2_code.code[2] = ROBOT_CMD_END();
|
||||
robot2_code.PC = 0;
|
||||
}
|
||||
} else {
|
||||
for (short i = 0; i < BARRELS_COUNT; i++) {
|
||||
// для каждой задачи:
|
||||
tasks[i].start_zone = barrels[i].zone;
|
||||
// определяем можно ли ее выполнить и что вообще нужно выполнить
|
||||
tasks[i].dest_zone = can_move(barrels + i, 2);
|
||||
if (tasks[i].dest_zone >= 0) {
|
||||
tasks[i].priority = get_operation_priority(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
schedule_one_robot(tasks, &robot2, &robot2_code, 2);
|
||||
schedule_one_robot(tasks, &robot2, &robot2_code, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user