WWW-POSIM수업과 경진대회
문서 메뉴
WWW-POSIM / 수업과 경진대회

과제·점수·순위표

결과 파일에서 로봇이 완료한 부분과 개선할 부분을 확인하세요. 한 번의 실행은 최대 100점이며, 과제 순위를 확정하려면 5회 평가를 완료해야 합니다.

과제와 5회 평가는 어떻게 다른가요?

과제는 위치 유지나 장애물 회피처럼 해결할 문제입니다. 코드를 한 번 제출하면 서버가 같은 과제를 조건을 바꿔 5회 평가합니다. 다섯 가지 다른 과제를 푸는 것이 아닙니다.

맵은 같고, 목표 위치·경로 배치는 조금씩 달라지고, 바람·해류는 잔잔한 조건부터 해류가 변하는 거친 바다까지 포함합니다. 모든 참가자는 같은 다섯 조건으로 평가받습니다. 각 실행은 실제 이동 기록으로 따로 채점하므로 점수가 같을 수도 다를 수도 있습니다. 예를 들어 다섯 실행 모두 목표를 하나도 완료하지 못하면 전부 0점이 됩니다.

이동 기록 보기

결과 페이지에서 평가 실행을 선택하세요. 기록 재생으로 실제 차량 위치를 재생하고 시간 슬라이더를 움직여 원하는 순간을 보세요. 파랑은 이동 경로, 초록은 목표, 주황은 장애물입니다. 목표 완료 수, 이동 거리, 소요 시간, 위치·방향·깊이 오차와 접촉 근사 횟수도 표시됩니다.

순위표에는 최고·최저 점수, 평균 시간과 경로와 결과 보기 링크가 있습니다. 완료된 제출의 경로와 점수는 공개되며 프로그램 코드·출력과 계정 이메일은 공개되지 않습니다. 이메일에는 평가별 점수·시간·목표 완료 수와 경로 미리보기가 있고, 전체 재생은 결과 링크에서 볼 수 있습니다.

예제 · 위치 유지는 비교할 수 있도록 리더보드에 고정됩니다. 다섯 번의 실제 이동 경로를 보고 측정에 사용한 코드를 내려받으세요. 평균은 12.81 / 100, 대회 점수는 10.24 / 100입니다. 개선한 코드를 이 예제와 비교할 수 있습니다.

과제 선택하기

그림은 1번 평가를 예로 들어 위에서 본 목표 순서를 보여 줍니다. 번호가 있는 원은 목표, 색이 채워진 원은 부표나 기둥입니다. 목표 사이에서는 안전한 경로를 선택하세요. 다른 평가에서는 목표 배치가 조금 달라집니다.

위치 유지

위치 유지 · surface_station · WAM-V · 시뮬레이션 시간 120초

위치 유지

  1. 1번 목표로 이동한 뒤 목표 방향으로 회전하세요.
  2. 위치와 방향을 허용 범위 안에서 45초 연속 유지하세요.
  3. 범위를 벗어나면 유지 시간이 다시 시작됩니다. 목표에서 멈출 수 있도록 천천히 접근하세요.

게이트 통과 후 복귀

게이트 통과 후 복귀 · surface_gates · WAM-V · 시뮬레이션 시간 240초

게이트 통과 후 복귀

  1. 빨강·초록 부표 사이의 게이트 중앙을 1, 2, 3번 순서로 지나가세요.
  2. 4번 목표인 출발점으로 돌아오세요.
  3. 복귀 방향을 맞추고 5초 유지하세요. 나갈 때와 돌아올 때 모두 부표를 피하세요.

부표 회피 후 정박

부표 회피 후 정박 · surface_slalom · WAM-V · 시뮬레이션 시간 300초

부표 회피 후 정박

  1. 장애물 부표 네 개를 번갈아 피하며 1~4번 목표를 따라가세요.
  2. 안전한 경로를 골라 출발점의 5번 목표로 돌아오세요.
  3. 정박 방향을 맞추고 10초 유지하세요. 목표를 완료해도 충돌 감점은 남습니다.

잠항 후 게이트 통과

잠항 후 게이트 통과 · underwater_gate · BlueROV2 · 시뮬레이션 시간 180초

잠항 후 게이트 통과

  1. 수심 2 m로 잠항해 1번 목표에 도착하세요.
  2. 같은 수심을 유지하면서 2번 목표의 기둥 사이를 통과하세요.
  3. 3번 목표의 방향을 맞추고 위치와 수심을 15초 유지하세요.

검사 경로 따라가기

검사 경로 따라가기 · underwater_path · BlueROV2 · 시뮬레이션 시간 240초

검사 경로 따라가기

  1. 수심 3 m로 잠항한 뒤 해저의 주황 표식 위에 있는 1, 2, 3번 목표를 방문하세요.
  2. 이 수심에서 경로를 순서대로 따라가세요. 표식은 로봇 아래 해저에 있습니다.
  3. 수심 3 m의 4번 복귀 목표에서 방향을 맞추고 5초 유지하세요.

기둥 회피 후 복귀·부상

기둥 회피 후 복귀·부상 · underwater_return · BlueROV2 · 시뮬레이션 시간 300초

기둥 회피 후 복귀·부상

  1. 수심 2 m로 잠항해 입구 게이트의 1번 목표를 방문하세요.
  2. 수중 기둥을 피하며 2, 3, 4번 목표를 따라가세요.
  3. 같은 게이트의 5번 목표로 돌아온 뒤 출발점인 6번 목표에서 부상하고 5초 유지하세요.

위치 유지 목표에서는 위치·방향이 맞아야 하며 수중에서는 수심도 맞아야 합니다. 허용 범위를 벗어나면 연속 유지 시간이 다시 시작됩니다.

VS Code에서 결과 읽기

이메일의 결과 링크 또는 내 제출 목록 → 결과 보기에서 JSON 기록을 내려받으세요. reports의 각 항목에 평가별 report가 있습니다.

프로그램 출력에서 Python 메시지와 오류를 확인하세요. 변경 전후를 비교할 수 있도록 내려받은 결과를 보관하세요.

한 가지씩 개선하기

먼저 경로를 완료하세요. 다음으로 위치·방향·수심 오차를 줄이세요. 게이트 과제에서는 두 기둥 사이의 중앙에 가깝게 통과하세요. 마지막으로 장애물과 안전거리를 유지하면서 속도를 높이세요.

항목 최대 점수
과제 진행 20
정확도 60
속도 10
안전 10

과제를 완료하면 진행 점수 20점을 받습니다. 나머지 점수의 대부분은 정확한 제어가 필요합니다. 위치·방향·수심 오차가 커지면 정확도·속도·안전 점수가 함께 줄어듭니다. 경로를 끝까지 마쳐도 제어가 부정확하면 낮은 점수를 받을 수 있습니다.

게이트 중앙 오차

게이트 과제에서는 실제 이동 경로가 두 기둥을 잇는 선을 통과한 위치를 측정합니다. 기둥 가까이보다 중앙에 가깝게 통과할수록 정확도 점수가 높습니다. 결과에는 통과마다 중앙까지 거리(m)가 표시됩니다. 선체가 기둥 사이에 들어가야 하며 수중에서는 수심도 맞아야 합니다.

위치 유지는 가장 긴 연속 성공 시간에 따라 부분 진행 점수를 줍니다. 아직 45초를 채우지 못해도 짧은 성공으로 조금씩 점수를 얻을 수 있습니다. 장애물마다 15점을 감점하고 충돌 시 총점은 최대 50점입니다. 유효한 시간 초과는 얻은 부분 점수를 유지합니다. 무효·취소 실행은 공식 순위에 반영되지 않습니다.

5회 평가를 마치고 순위표 확인하기

  1. 한 과제의 코드를 제출하면 서버가 목표·바람·해류 조건을 바꿔 5회 실행하고 각각 채점합니다.
  2. 공통 코스 순서는 서버가 선택합니다. seed를 직접 입력할 필요는 없습니다.
  3. 웹사이트의 Leaderboard에서 공개 별명을 찾으세요.
  4. 선택한 수상 또는 수중 부문의 나머지 두 과제도 완료하세요.

과제 점수는 다섯 평가 실행 평균의 80% + 최저 점수의 20%입니다. 부문 점수는 세 과제 점수의 평균입니다. 미완료 묶음은 provisional로 표시됩니다. 가장 최근에 완료한 제출로 과제 순위가 바뀝니다. 대기·실패한 제출은 완료된 순위를 유지합니다.

ArduPilot 비교 행은 제공된 차량 기본 설정으로 측정합니다. Not measured는 해당 행의 측정값이 없다는 뜻이며 0점이라는 뜻이 아닙니다.

고급: 정확한 규칙, 채점과 공정성

교육용 규칙 maritime-class-3는 RobotX·VRX·RoboSub 과제를 참고한 WWW-POSIM 규칙입니다. 시뮬레이터가 실제 시뮬레이션 궤적을 관측해 계산하며, 클라이언트가 주장한 점수를 제출할 수는 없습니다.

한 실행의 계산식

c는 순서대로 완료한 목표의 비율입니다. 경로 과제의 진행률은 p=c입니다. 위치 유지의 p는 가장 긴 연속 성공 시간을 45초로 나눈 값이며 최대 1입니다. e_p, e_h, e_d는 시간으로 가중한 수평 위치·경로, 방향, 수심 오차 RMS입니다. g는 각 게이트 중앙 오차를 기둥·선체 반경을 뺀 통로 반폭으로 나눈 값의 RMS입니다. 통과한 게이트가 없는 과제는 g=0입니다. t는 경과 시간, T는 제한 시간, I는 이상적 완료 시간입니다.

quality    = exp(-max(0,e_p-0.05)/0.6
                 -max(0,e_h-2π/180)/0.25
                 -max(0,e_d-0.02)/0.2
                 -(g/0.25)^2)
progress   = 20 p
accuracy   = 60 p quality
speed      = 10 c clamp((T-t)/(T-I), 0, 1) quality
safety     = 10 p clamp(minimum_hull_clearance / 2, 0, 1) quality
raw        = progress + accuracy + speed + safety - 15 × struck_obstacles
score      = clamp(raw, 0, 100)

정확도 측정값이 없으면 quality=0입니다. 높은 점수에는 진행과 정밀도가 모두 필요합니다. 게이트 중앙에서 유효 통로 가장자리까지 거리의 절반만큼 벗어나 통과하면 게이트 정확도 계수는 exp(-4), 약 0.018입니다. 게이트를 통과했다는 이유만으로 높은 정확도 점수를 받지 않습니다.

장애물이 없으면 안전 점수는 10 p quality입니다. 채점용 선체 범위는 WAM-V 반경 3.5 m, BlueROV2 반경 0.5 m이며 원기둥 장애물과 수직 범위도 비교합니다. 이는 접촉력을 측정한 값이 아닌 보수적인 기하학적 판정입니다. 실제 메시 접촉보다 먼저 감점될 수 있으며 모든 참가자에게 같은 기준이 적용됩니다. 장애물은 실행마다 한 번씩만 집계합니다. 육지·해저 접촉력을 별도 점수로 임의 추가하지 않으며 지형·동작 안전 검사로 중단하거나 무효 처리할 수 있습니다.

seed에 따른 크기 조정 전 게이트 폭은 수상 12.4 m, 수중 6.4 m입니다. 공식 평가는 2 km × 2 km 크기와 평평한 수심 20 m의 공통 경기장을 사용합니다. 지리적 원점과 수면 출발점은 35.074899 N / 129.084759 E입니다. 목표 배속은 1×, 물리 간격은 10 ms입니다. 경기장은 연습을 위해 만든 가상 지형입니다.

도착 범위는 수평 오차가 수상 0.8 m 미만, 수중 0.5 m 미만이고 수중 수심 오차는 0.2 m 미만입니다. 위치 유지에는 방향 오차 0.12 rad(약 6.9°) 미만도 필요합니다. 범위를 벗어나면 연속 유지 시간이 다시 시작됩니다. 게이트는 지정된 방향으로 평면을 통과하고 선체가 유효 통로 안에 있어야 완료합니다. 연속된 실제 위치 사이를 보간해 통과 순간의 중앙·수심 오차를 계산합니다. 위치 유지의 정밀도는 목표 범위에 처음 들어갈 때부터 측정합니다. 이동 중 경로 오차는 현재 선분에 대한 거리이며, 마지막 유지 목표는 허용 범위 안에서 위치 오차를 측정합니다.

과제 제한 시간 T 이상적 시간 I 마지막 유지 시간
surface_station 120초 70초 45초
surface_gates 240초 150초 5초
surface_slalom 300초 210초 10초
underwater_gate 180초 100초 15초
underwater_path 240초 170초 5초
underwater_return 300초 220초 수면에서 5초

충돌 없이 모든 목표를 완료하고 정확도 기준을 만족하고 게이트 중앙을 통과하며 I 이내에 끝내고 선체 안전거리 2 m 이상이면 100점입니다. c=0.5이면 완료와 추가 점수의 가중치도 절반입니다. 장애물에 한 번 닿은 완료 실행은 최대 50점입니다. 유효한 궤적 없음, 유한하지 않은 수치, 시간 역행·불연속, 위치 도약, 권한 만료나 세션 변경은 무효 사유입니다.

RMS는 브라우저 조회 횟수가 아닌 시뮬레이션 시간으로 적분합니다. 공식 채점 중 파도·물리 설정을 바꿀 수 없습니다. 해류가 있는 수상 유지 목표에서는 뱃머리를 해류의 반대 방향으로 맞춥니다. 5번 조건에서는 변하는 해류 방향을 따라 목표 방향도 바뀌어 두 추진기로 흐름에 대응할 수 있습니다. 해당 목표에는 yaw_current_follow가 있고, 프로필의 current_epoch_sim_time·주기·위상·방향 변동 폭으로 시각별 목표 방향을 계산합니다.

모델이나 센서 한계로 정밀도 기준을 달성할 수 없다면 운영자는 규칙 버전을 바꾸고 기준 제어기를 다시 측정해야 합니다.

5회 평가와 순위 집계

설치형 앱에서 공식 평가와 같은 다섯 조건을 연습할 수 있습니다. 규칙 버전·과제·평가 번호로 공통 seed를 정합니다. 공식 제출은 이 seed를 사용합니다. 연습 배치를 직접 바꾸는 기능은 고급 설정에 있습니다.

평가 바다와 해류 풍속
1 잔잔한 바다, 해류 없음 3 m/s
2 횡방향 해류 0.20 m/s 5 m/s
3 강한 해류 0.35 m/s 6.5 m/s
4 거친 바다, 해류 없음 8 m/s
5 거친 바다, 변하는 해류 0.35~0.65 m/s 8 m/s

해류는 차량의 유체역학 계산에 적용하는 수평 물의 속도입니다. 5번 평가는 45초 주기로 해류의 속도와 방향(±25°)이 부드럽게 변합니다. 채점을 시작하면 해류가 시작됩니다. seed에 따라 배치 크기 ±10%, 옆 방향 이동 ±3 m, 유지 방향 ±0.25 rad가 달라집니다. 풍향은 110~160°, 변화 전 해류 방향은 75~105°입니다.

과제 점수는 0.8 × 평균 + 0.2 × 최저점이며 부문 점수는 세 과제의 산술평균입니다. 다섯 seed 미만은 실행 수와 함께 임시 순위로 표시합니다. 업로드한 코드는 가장 최근에 완료한 5회 평가 제출을 사용합니다. 고급 로컬 클라이언트는 seed별 가장 최근 유효 결과를 사용합니다. 재시도 횟수와 계산 자원은 운영자에게 공개하세요. 5회 평가를 마치면 다음 재시도는 순번 0부터 시작합니다. 운영자는 결선을 별도 시리즈나 규칙 버전으로 진행할 수 있습니다.

서버 기록에는 시간, 소유자 ID, 공개 별명, 과제, 규칙 버전, seed, 시뮬레이션 궤적, 지표, 제어기 종류와 기준 제어기 설정 해시가 포함됩니다. 공개 응답에는 이메일을 넣지 않습니다. 로컬 실행은 연습용입니다. 서버 관측은 점수의 출처를 보호하지만 학생의 코드 작성이나 실제 추정기 사용을 증명하지는 않습니다. 이동 제어에 시뮬레이션 odometry를 허용합니다. 장애물 회피에는 카메라·LiDAR 측정값을 사용하세요. 더 강한 인지 전용 제약에는 별도의 센서·항법 프로필과 규칙 버전이 필요합니다.

ArduPilot 기준 제어기

고정된 비교 행은 새 Autopilot 월드에서 제공된 차량 기본 설정과 시뮬레이터 항법 연동을 사용합니다. 운영자는 같은 목표 순서를 실행하고 실제 상태와 설정 해시를 기록합니다. 설정 변경 세션은 기준 제어기로 사용할 수 없고, 실행 중 설정 변경은 무효입니다. 기본 장애물 회피 능력을 가정하지 않습니다. 제공된 설정에는 Gazebo·SITL·외부 항법에 필요한 값도 포함되므로 실제 장비의 공장 초기값만을 뜻하지 않습니다.

측정하지 않은 행은 Not measured입니다. 한 seed만 측정하면 임시 기준이며 5회 평가 순위를 완료한 것은 아닙니다. 코스·설정·모델이 바뀌면 기준과 규칙 버전도 새로 필요합니다. 참가자가 기준 점수를 넘겨도 기준 행을 표시합니다.

서버는 실행 전후 전체 FCU 설정을 확인합니다. 별도로 1×를 확인하는 SIM_SPEEDUP, 읽기 전용 시간 계수 STAT_RUNTIME·STAT_FLTTIME, 자동 기압 보정 BARO1_GND_PRESS·BARO2_GND_PRESS·BARO3_GND_PRESS만 설정 해시에서 제외합니다. 제어 설정이 바뀌면 무효입니다. 제어기 종료, 최종 확인과 데이터 저장까지 finalizing 상태이며 그 전에 서버 자리를 반환하면 무효입니다. 유효한 실패 결과는 실제 0점일 수 있습니다.

결과 내보내기와 공정성

웹사이트 제출은 분리된 서버 실행 환경에서 업로드한 코드를 실행하고 전용 Gazebo 월드에 연결합니다. 고급 설치형 Evaluation 클라이언트는 참가자 PC에서 알고리즘을 실행할 수도 있습니다. 서버가 알고리즘 실행 전에 채점을 시작하고 물리·파도 조건을 검사합니다. 완료 또는 중단된 기록은 해당 소유자만 내보낼 수 있습니다. 서버 자리를 반환한 뒤에도 /competition/run/export?run_id=...는 같은 소유자의 인증을 요구합니다. 관리자가 다른 소유자의 비공개 파일을 내려받을 수 있는 경로는 아닙니다.

JSON 해시는 내보낸 파일의 변경을 감지하며 모든 부정행위를 막는 인증서는 아닙니다. 로컬 파일로 공식 점수를 받는 API는 없습니다.

경진대회 시작하기 · Evaluation 준비하기