Skip to main content

패키지 대시 챌린지 - C++

패키지 대시 챌린지의 샘플 레이아웃은 왼쪽 하단 모서리에 로딩 도크, 캔을 놓을 수 있는 세 개의 영역, 그리고 오른쪽 상단 모서리에 클로봇이 있는 시작 영역을 보여줍니다.

로봇 경쟁 경기장의 그리드 레이아웃으로, 오른쪽 '시작' 영역에 로봇이 배치되어 있습니다. 이 운동장은 왼쪽에 '적재함' 구역과 세 개의 작은 구역으로 구성되어 있으며, 각 구역에는 책 위에 캔이 놓인 이미지가 있으며, 운동장 전체에 분포되어 있습니다. 이러한 구역은 로봇이 작은 구역에 있는 물체와 상호 작용하고 이를 로딩 도크로 운반해야 하는 작업 지향적 환경을 조성하도록 배열됩니다.

패키지 대시 챌린지

이 챌린지에서는 로봇이 패키지를 집어 최대한 빨리 적재 도크로 가져오도록 프로그래밍해야 합니다!

도전 규칙:

  • 로봇은 시작 구역에서 도전을 시작해야 합니다.
  • 패키지(알루미늄 캔)는 책, 클로봇의 집게발, 로딩 도크에만 접촉할 수 있습니다.
    • 창고 바닥에 패키지가 떨어진 경우 필드를 재설정하고 다시 시작해야 합니다.
  • 각 실행 시간은 로봇이 움직이는 즉시 시작됩니다.
  • 마지막 패키지가 로딩 도크에 떨어지는 순간 시간은 멈춘다.
  • 필드를 재설정할 때는 모든 것이 처음 시작했을 때의 정확한 위치로 돌아가야 합니다.
  • 즐거운 시간 보내세요!

교사 팁 아이콘 교사 팁

  • 창고에 대한 배경 스토리나 목적을 만들어 참여도를 높이세요! 어떤 종류의 창고인가요? 창고에는 어떤 종류의 패키지가 있나요? 창고의 소유자는 누구입니까?

  • 학생들이 캔을 더 효율적으로 운반할 수 있는 다양한 경로나 전략을 만들도록 합니다.

  • 이 챌린지의 우승자를 결정하기 위해 완료 시간만 비교하는 것이 아니라(경쟁적인 방식으로 구성하려는 경우) 학생들이 다른 팀의 솔루션을 고려할 수 있도록 사용된 탐색 기술도 비교하세요.

교사 도구 상자 아이콘 교사 도구 상자 - 솔루션

학생을 평가하기 위한 프로그래밍 기준은 여기에서 찾을 수 있습니다.

다음은 이 과제에 대한 한 가지 가능한 해결책입니다. 해결책은 로봇의 시작 위치와 선택한 경로에 따라 달라질 수 있습니다. 모든 패키지를 옮기는 데에는 여러 가지 방법이 있습니다.

int main() {
  // 로봇 구성 초기화. 제거하지 마세요!
  vexcodeInit();

  // Claw 모터를 안전하게 작동시키고 첫 번째 패키지를 집어 올립니다
  ClawMotor.setTimeout(2, seconds);
  Drivetrain.driveFor(forward, 900, mm);
  Drivetrain.turnFor(right, 90, degrees);
  ArmMotor.spinFor(forward, 315, degrees);
  ClawMotor.spinFor(reverse, 180, degrees);
  Drivetrain.driveFor(forward, 215, mm);
  ClawMotor.spinFor(forward, 120, degrees);

  // 첫 번째 패키지를 내려놓기 위해 로딩 도크로 이동합니다.
  Drivetrain.driveFor(reverse, 110, mm);
  Drivetrain.turnFor(right, 90, degrees);
  Drivetrain.driveFor(forward, 920, mm);
  Drivetrain.turnFor(left, 90, degrees);
  Drivetrain.driveFor(전진, 2300, mm);
  Drivetrain.turnFor(좌회전, 90, 도);
  Drivetrain.driveFor(전진, 750, mm);
  ArmMotor.spinFor(후진, 315, 도);
  ClawMotor.spinFor(후진, 120, 도);

  // 두 번째 패키지를 집어 올립니다.
  Drivetrain.driveFor(후진, 200, mm);
  Drivetrain.turnFor(좌회전, 170, 도);
  Drivetrain.driveFor(전진, 900, mm);
  Drivetrain.turnFor(우회전, 90, 도);
  Drivetrain.driveFor(전진, 2300, mm);
  ArmMotor.spinFor(전진, 315, 도);
  ClawMotor.spinFor(전진, 120, 도);

  // 두 번째 패키지를 내려놓기 위해 로딩 도크로 이동합니다.
  Drivetrain.driveFor(forward, 900, mm);
  Drivetrain.turnFor(right, 90, degrees);
  Drivetrain.driveFor(forward, 960, mm);
  ArmMotor.spinFor(reverse, 315, degrees);
  ClawMotor.spinFor(reverse, 120, degrees);

  // 세 번째 패키지를 픽업합니다
  Drivetrain.driveFor(reverse, 150, mm);
  Drivetrain.turnFor(left, 90, degrees);
  ArmMotor.spinFor(forward, 315, degrees);
  Drivetrain.driveFor(forward, 490, mm);
  ClawMotor.spinFor(forward, 120, degrees); 

  // 세 번째 패키지를 내려놓기 위해 로딩 도크로 이동합니다.
  Drivetrain.driveFor(reverse, 490, mm);
  Drivetrain.turnFor(right, 90, degrees);
  Drivetrain.driveFor(forward, 150, mm);
  ArmMotor.spinFor(reverse, 315, degrees);
  ClawMotor.spinFor(reverse, 120, degrees);
  
}