기존에는 /dev/ttyACM0 등으로 센서마다 ACM 숫자가 바뀌어 준비 시간이 오래 걸리는 것을 방지하기 위해 GPS는 ttyGPS로 이름을 고정해 두었었음
그래서 ls -l /dev/tty* 로 조회를 하면 ttyARDUINO, ttyLIDAR, ttyGPS, ttyIMU로 잘 인식을 해 왔음
그러나 대회장에서 연결 후 ttyGPS가 인식되지 않고, 심지어 다른 형식으로도 인식이 되지 않았음. 재부팅, USB 허브 연결 포트 교체, 케이블 교체 등 여러 방법을 써 봤으나 마찬가지
간혹 1-2초간 연결되었다가 다시 끊어짐
battery charge 불도 깜빡였음
다른 팀의 GPS 보드를 빌려다 연결했을 때는 이상이 없었음. 따라서 보드의 문제인 것으로 생각됨.
오후가 늦도록 아무것도 테스트해보지 못함
캠핑용 배터리 중 하나도 고장이 나 잿슨에 들어오는 전원 등을 주지 못함
해결
마지막으로 대회장(창원)으로 향하는 인원(필자 본인)이 예비용 GPS 보드를 가져가 해결
타 팀의 GPS를 빌려 GPS 좌표 수집, 알고리즘 테스트를 진행. 대회장 폐장 직전에서야 끝낼 수 있었음 (다행다행다행!!!)
배터리는 새로 주문함
2021.10.29.금 (대회 1일차)
발표 심사 / 자율운항 예선 / 오토파일럿 호핑투어
💬발표 심사
각 팀의 부스 앞에서 발표 자료 프린트를 보고 심사위원 3명에게 설명을 하는 시간
제한시간은 15분이었으나 많은 질문을 받아 긴 시간을 소요했음
선형 설계, 장비, 각 종목 별 알고리즘 설계, 이미지 학습 등의 내용을 설명함. 본인은 도킹 알고리즘 설계 부분을 설명함
질문사항
조종 성능의 향상을 회전 반경으로 설명했는데, 지그재그로 설정하지 않은 이유
배수량
이미지 학습 방법
종제어 및 횡제어 방법
도킹 연습 시 성공률
도킹 시 스테이션에 부딪히는 상황에 대한 대비
(다른 팀 질문) 본인 팀에서 가장 자랑할 만한 부분?
CFD 분석이 호평을 얻음
높은 점수를 기대해볼 수 있었음
🚩대회 진행
각 팀별로 1시간의 도전 시간이 주어짐
본 팀은 각 종목 별 1시간으로 인지했었음. 자율운항 예선에 1시간을 모두 써버려 호핑투어에 도전할 기회가 없었음
모든 팀이 예정된 할당 시간이 끝난 오후 4시 이후에야 도전해볼 수 있었음 (중간에 배정 시간 아니라고 비는 수조 놀려둔 거 정말 화났음. 그럴 거면 그냥 시간 더 주고 쓰게 해주던가!)
4시 ~ 5시에는 우선권을 '기록(실격 없이 완주)이 없는 팀'에게 주었으나, 5시 이후에는 모든 팀에게 선착순 기회를 부여했음 (시장통이 따로 없었음....)
🚤자율운항 예선
작은 수조에서 진행. 부표의 부피가 수조 크기에 비해 컸음. 따라서 배의 크기가 상대적으로 큰 본 팀은 매우 불리한 상황
배의 크기가 작은 팀들은 선수각을 확확 틀어도 장애물 회피가 가능한 반면, 본 팀은 회피를 하더라도 회전 반경 때문에 선수 혹은 선미가 장애물에 종종 부딪혔음
확실히 작은 배가 유리!
각 시기마다 pwm(thruster 속도), 탐지 반경을 조정하며 시도함
기록
3차 시기: 49초 75로 첫 완주. 1회 충돌로 1분 9초 75 기록
6차 시기: 43초로 완주.
7차 시기: 40초로 완주. 2회 충돌로 무의미
12차 시기: 제한시간 종료 직전에 32초 09로 무실점 성공. 이전 도전 팀들 중 1위를 차지 (물론 이후 부경대 PASS 팀이 29초를 기록해 최종 예선 2등으로 마무리)
바람이나 타 팀의 경기 중 충돌로 인해 장애물 위치가 조금씩 바뀜.
공정성의 문제를 제기했으나 주최측에서는 '완전히 장애물 위치가 변경되지 않은 이상 다시 옮길 필요는 없다. 그것을 못 피할 정도면 장애물 회피 능력이 떨어지는 것과 같다'는 답변을 받음
배정된 시간 외에는 수조 사용이 불가능 한 것으로 알고 있었으나, 타 팀이 점심시간에 이용하는 것을 보고 말을 잃음.... (그럴 거면 우리도 큰 수조에서 호핑투어 해봤지....)
🏁오토파일럿 호핑투어
대기 중 타 팀들의 경기를 관람했을 때, 타 팀들의 배는 선속이 매우 느렸었음. 바람에 의해 움직이는지 thruster에 의해 움직이는지 구분하기 힘든 경우도 있었음.
연습 때처럼 PID 제어가 예술로 작동함. 본래 선속도 빠르게 설정해 연습한 터에 속도도 상당히 빠른 편
그러나 GPS가 또 문제를 일으킴. 수조 바닥에 표시된 직경 4m 안에 배의 80%가 들어와야 그 지점을 통과했다고 보는데, 범위 안에 들어오지 못하고 미리 turn을 해버림 -> waypoint 4개를 전체적으로 미리 돌아버리는 것
해결책으로 GPS 상대 좌표의 원점의 위치(경기장 좌측 하단)를 다시 설정해봄
경기장 기준으로 더 북서쪽으로 변경: 잘못 생각한 듯
경기장 기준으로 더 남동쪽으로 변경: 이전과 큰 차이 없었음
주최 측에서 제시한 GPS 좌표와 우리가 수집한 GPS 좌표 간 차이가 매우 컸음
그래서 아예 waypoint 좌표도 우리가 임의로 설정하고 경기해봄
약간은 개선이 되었으나 여전히 불만족스럽게 waypoint를 돎
마지막 시도에서는 waypoint 3개를 통과했으나, 마지막 point를 찍고 다시 출발지점으로 돌아와야 하는데 4번 point에서 계속 뱅글뱅글 무한 반복을 함
결국 6차의 시도 모두 실격 처리로 0점을 기록함
본디 1위를 기대하고 있었고, 특히 호핑투어는 PID제어까지 포함하여 완벽하다 할 정도의 준비가 되어 있었음. 그래서 더욱 아쉬움이 큼
호핑투어의 배점이 비교적 높은 것을 감안할 때, 순위권에 들기 위해서는 자율운항 예선과 도킹 미션, 정상통행 원격조종에서 높은 점수를 얻어야 한다는 계산이 나옴
나중에 알게된 사실로, 경기 당시 수많은 배들 각각에 달린 GPS 수십 대가 서로 간섭을 주었을 가능성도 있었음
연습 시, 정확성은 보장되므로 기록 단축을 위해 속도를 포기하지 못했던 것도 미약한 원인 중 하나. (이후 자율운항 결선 시 속도의 우선순위를 뒤로 넘긴 이유로 작용)
⚓도킹 미션 준비
도킹은 총점 5점으로 환산되므로 매우 작은 배점이었음. 따라서 필자가 담당해 준비는 했으나 크게 중요성을 두진 않았음
기존 알고리즘은 선수각을 먼저 타겟으로 돌려놓고 스테이션은 라이다 탐지를 통해 회피하는 식이었는데, 라이다가 스테이션을 인지하는지에 따라 성능이 크게 좌우되고, 수중에서 테스트해본 적이 거의 없었음. 물론 성공률도 모름
따라서 밤을 새 새로운 알고리즘을 다시 작성함
스테이션 3개(좌, 중앙, 우)가 있을 때, 각 스테이션의 중심에 수직인 방향으로 2개 씩의 점을 찍음
좌측 스테이션부터 2개의 점을 순차적으로 추종하며 선수를 해당 스테이션 마크를 똑바로 보도록 위치시킴
만약 원하는 마크라면 계속 직진해 스테이션 안으로 진입
아니라면 후진 명령
중앙 스테이션에 대해서 같은 명령을 수행
그것도 타겟이 아니라면 우측이 정답이므로 그곳으로 추종
각 점의 추종은 호핑 투어 알고리즘 차용
실제 배 센서와 thruster 테스트 없이 코딩만 한 것이라 다음날 테스트를 해봐야 검증이 가능했음
서로 다른 클래스, main 함수였던 fuzzy & docking & hopping을 통합하는 데 애를 많이 먹었음
임의의 지점의 GPS 좌표를 구하는 방법을 엑셀로 구현함 (선배님들 최고십니다...)
기타
4시를 넘어가니 너무 추웠음. 바로 옆이 바다인데다 10월 말의 차가운 강풍이 불었음
때문에 필자는 밤샘 코딩의 여파까지 더해 감기몸살을 심하게 앓음
2021.10.30.토 (대회 2일차)
정상통행 원격조종 / 자율운항 예선 / 자율운항 중 도킹
🔋준비
본 팀의 경기 배정 시간은 오후 4시였음. 따라서 오전과 오후 시간을 모두 사용해 도킹 미션 육상 테스트를 진행함
아침시간 및 점심시간을 이용해 GPS 좌표를 수집함
시간 배분 전략을 짜서 어제와 같은 일이 일어나지 않도록 주의함(원격 -> 도킹 -> 시간 남으면 자율 예선 재도전)
필자는 건강상태 악화로 점심때 즈음부터 참여함
🎮정상통행 원격조종
작고 빠른 배가 많고, 거의 모든 팀이 준비 가능한(난이도가 비교적 낮은) 종목이므로 시간을 줄이는 것보다는 기록을 만드는 것(실격X)에 집중하기로 함
기록
1차 시도: 도킹 스테이션에 1회 충돌. 솔직히 치워줘야 하는 것은 아닌가 생각이 들다가도, 워낙 큰 구조물이라 그러려니 함
2차 시도: 무실점 53초 기록
3차 시도: 무실점 54초 55 기록
⚓자율운항 중 도킹
밤새 수정을 했던 파일과 잿슨의 최신 파일이 약간 달라 이를 병합하는 과정에서 오류가 조금씩 발생함
fuzzy 알고리즘 부분을 jetson에 있던 부분으로 아예 똑같이 복사
yaml, launch 파일, 코드를 조금씩 수정하며 launch 시킴
원하는 타겟이 아닐 때 backward 함수(후진 명령)을 내리는 것까지는 잘 됨. 그러나 설정한 시간(초) 후 다시 다음 waypoint로 전진 이동해야 하는데 계속 후진 명령만 내림
서로 다른 클래스에서 publish를 하고 있는 것이 문제인가 함. 머릿속으로는 한 번 publish하고 마니까 상관 없을 것 같긴 해도.
아예 backward 함수(후진 명령)을 없애고, servo motor의 회전각 제한을 풀어 큰 회전을 가능하게 함. '한 스테이션에 가까운 포인트 -> 다른 스테이션의 먼 포인트'로 바로 회전해서 전진 이동하도록
원하는 타겟일 때 forward, 아닐 때 다음 포인트로 이동까지 육상 테스트는 잘 됨
실제 경기에서 지금까지 성공한 팀이 오직 2팀으로, 나머지 팀은 도전조차 하지 않은 경우가 많았음. 어차피 배점도 작으니. 성공한 팀도 같은 학교였음
카메라가 자외선에 약해서 다시 학습을 시켜야 할 정도로 날씨와 조도의 영향을 많이 받는 것을 걱정했는데, 경기장은 마크를 LED로 보여주고 게다가 본팀의 도전 시간은 해가 지기 시작해 좀 어두워지는 4시이기에 인식률이 높을 것으로 판단. 게다가 선글라스도 씌워둠
경기 시작 직전 마크를 알려주고 배를 출발시킴
fuzzy 알고리즘에서 docking 알고리즘으로 잘 전환이 되었고, 원하는 스테이션으로 바로 들어감
43초라는 압도적인 기록으로 한 번에 1위를 기록함! (거의 울 뻔.....)
1회차 성공의 감격으로 모든 팀원이 소리를 지른 기억이 생생함
🚤자율운항 예선
다른 팀이 1위를 탈환했고, 본팀이 호핑투어 점수가 0점인 것을 감안할 때, 자율운항 예선의 기록을 단축할 필요가 있었음
도킹과 원격조종에서 많이 시간을 단축해놓았을 뿐더러, 동시에 도전하는 팀이 2-3팀 정도라 많은 재도전을 할 수 있었음
그러나 전날보다 장애물의 위치가 조금 더 어려워져 기록 단축에는 실패함
예선 2위로 마무리
최종 결과 상위 6개 팀이 결선에 진출함. 최단 시간은 28초였으며 6위가 40여 초로 전반적으로 기록이 매우 좋았음(해가 갈수록 발전하는 듯. 어디까지 갈 거야!!!)
🍣회식
필자는 건강상 참석하지 못했음
타 학교까지 합류해 생각보다 회식 규모가 커졌... 기억이 삭제되신 선배님들이 여럿....
2021.10.31.일 (대회 3일차)
자율운항 결선 / 시상식
🚤자율운항 결선
오전에 시작하여 6팀이 2회 씩의 기회를 부여받음. 모든 팀이 실격(결승선에 도달하지 못하는 경우)하는 경우에만 1회씩 기회를 더 부여
호핑투어의 교훈에 따라 속도보다는 무실점 & 실격 없이 기록 남기기에 집중
처음에 장애물을 배치할 때, 배의 크기가 상대적으로 큰 본팀이 우려를 표명함. 배의 폭과 길이를 고려해 장애물을 배치해줘야 함.
같은 부표를 사용하지만 결선 수조는 예선보다 훨씬 크기에 체감 난이도는 예선이 훨씬 높아 보였음
전반적으로 본선에 진출한 다른 팀들의 실력이 매우 우수했음
작년 1회 대회에서 시작 지점(복도 식으로 된 벽을 돌아 나가 시작하는 식)조차 통과하지 못하는 경우가 있었으나, 올해 대회에서는 거의 모든 시도에서 무난히 통과함
선속이 대체적으로 빠르고 장애물 회피 능력이 상당함. 충돌 직전이더라도 기가 막히게 피함
본팀의 fuzzy 알고리즘은 굉장히 잘 작동은 함. 개인적 견해로는 본팀의 제어법이 '가장 가까운 장애물을 추종하고 피하는' 식으로 설계되어 뒤뚱뒤뚱 움직여 소요 시간이 비교적 더 걸릴 수 있었음. 다른 팀들의 경우 '인식 후 회피' 식으로 움직이는 것 같아, 알고리즘의 업그레이드 필요성을 느낌
1회 시도에서 38초 09가 소요되었으나 1회 충돌로 98초 09의 기록을 남김
중간 부분에서 장애물을 확실히 회피하였으나, 바람이 불어 부표가 선체 중앙으로 와서 부딪힘
회피는 했으니 충돌로 처리되지 않았으면 했으나, 충돌 처리가 됨
바람이 야속하구나....
2회 시도에서는 무실점에 집중하여 약간의 파라미터를 수정함. 그러나 실격.
출발지점 통과 후 갑자기 장애물을 회피하지 못하고 이상한 방향으로 움직이다 제자리에서 갈팡질팡함
파라미터 변경에 무슨 문제가 있었나 배를 빼 보니, thruster 중앙에 낙엽이 껴 있었음. (어이가 없네...) 그래서 회전 잘 안되고 잘 움직이지도 않았던 것.
수조 테스트 때도 한 번 낙엽이 꼈던 기억이 있었는데, 설마 경기에서도 끼겠어 했었는데..... 가을에 진행되는 대회라 수조 위로 낙엽이 많았음
올해도 역시 부경대학교의 드론이 매우 부러웠음. 경기장의 수조는 세로 길이가 크기 때문에 중반부 이후에는 카메라로 담기에 매우 힘듦. 특히 장애물 때문에 배가 가려지는 경우가 빈번했음. 드론을 이용하면 bird's eye view 가 가능하기 때문에 기록 및 분석에 유리할 것 같음
정말 다양한 형태의 선체가 존재했음. 확실히 배가 작아야 할 필요성을 느낌. 동시에, 도대체 저기에 어떻게 배터리부터 센서, 컴퓨터까지 다 들어가지? 싶음
장애물 회피 및 경로 탐색에 다양한 방법이 이용되는 듯했는데, velocity obstacle이나 SLAM 등을 보았음. 대단하단 생각이 듦
다른 팀들과 이야기하며 친해지거나 견해를 나눠보았으면 좋았을텐데, 몰아치는 일정과 갖가지 비상 상황들로 그럴 여유가 없었던 것이 많이 아쉬움. (특히 부경대학교나 한국해양대학교와 이야기해보고 싶었는데)
경기 기록 현황을 팀장들에게만 단체 채팅방으로 전달했었음. 차라리 경기장에 보드를 만들어 실시간 중계를 해줬으면 했음. 결선 기록까지 볼 수 있었으면 했음.(실제로 알려주지 않음)
포터블 모니터로 jetson에 연결해 사용했는데, 보통 모니터에 비해 매우 크기가 작아 눈이 아프고 목이 뻐근했음. 매우 큰 모니터를 부착해 사용한 팀이 매우 부러웠음
전반적으로 모든 팀의 수준이 기하급수적으로 상승하는 경향을 보임. 내년 대회를 준비함에 있어 부담으로 다가올 듯.
약 29팀 중 오직 3팀, 그것도 학교로 치면 2개 학교만이 도킹 미션에 성공했는데, 점수 배점도 매우 작고 종목별 상도 없어 매우 아쉬웠음. (줄 만도 하건만)
코로나 19 상황으로 인해 대회장 내외부 인원 제한, 경기 시간 제한 등으로 경기 진행이 매끄럽지 못한 부분도 있었음. 그러나 시간 제한 자체의 의도는 나쁘지 않았던 것 같기도 함.