안녕하세요 이번 Earth Rover Challenge에 참여한 후기를 적어보고자 합니다.
먼저 Earth Rover Challenge가 어떤 대회인지 소개드리겠습니다

위 로봇은 Earth Rover Mini+라는 로봇입니다. 가격은 대략 $399정도하며 전방/후방 RGB 카메라, GNSS GPS센서, IMU센서가 내장되어 있습니다. 이번 대회를 주관하는 frodobot은 해당 로봇을 전국 10군데(미국, 아프리카, 중국 등등)가 넘는 곳에 배치해놨습니다. 그리고 저희는 원격으로 해당 로봇을 접속할 수 있는 권한을 받아서 해당 로봇에 인공지능 모델을 돌릴 수 있는 구조였습니다.
그래서 저 로봇으로 어떤걸 해야하는걸까요? 총 3가지로 이루어져있습니다.

- Urban navigation
- Inddor navigation
- Off-road terrain
챌린지 Track 소개
먼저 Urban navigation입니다. 아래는 아프리카 지역에서의 track입니다.


대회날이 되면 6곳의 지역에서 earth rover mini+를 정해진 waypoint를 따라 달려야합니다. 위 사진처럼 1번에서 로봇은 시작하고, 순서대로 2,3~9번까지 돌면됩니다. 각 waypoint에 도달할때마다 점수를 얻는 방식입니다. 해당 위치는 오른쪽 사진처럼 흙길이며 종종 차도 지나갑니다. 또한 지면도 고르지 않은 상태입니다.
다음은 Indoor-navigation입니다.
Indoor-navigation은 NYU의 대학교 내부에서 진행하는 트랙입니다. 대양 AI센터 4층과 비슷한 네모난 복도가 있습니다. 주최측은 그곳에 색깔 콘을 5개 배치해놓습니다. 그러면 저희는 콘을 찾을때마다 점수를 얻는 방식입니다.



그 다음은 Off-road navigation입니다.
NYU 실내에 돌. 판자 등을 이용하여 Off-road 환경을 구현해놓았습니다. 그러면 저희는 트랙에 배치되어 있는 3개의 깃발을 찾아서 근처까지 가야하는 트랙입니다.



Outdoor Navigation 개요
먼저 Outdoor navigation의 진행과정에 대해 얘기드리겠습니다.
ERC 대회는 25년도까지는 outdoor 트랙만 진행했습니다. 따라서 indoor나 off-road는 올해 신설된 부문입니다. 그래서 가장 먼저한 것은 작년 우승 방법론에 대해 알아본 것이였습니다. 작년도 우승 팀은 outdoor에서 우승하고, 해당 내용을 바탕으로 논문을 작성했습니다, GeNIE입니다. 아래는 GeNIE의 파이프라인에 대한 그림입니다.

GeNIE는 사람이 수동으로 이동체가 갈 수 있을만한 영역을 annotation하여, 이로 sam2를 full-tuning 시켰습니다. 이걸(traversability map) BEV로 펴낸다음에 갈 수 있을만한 경로를 수학적 방법으로 골라낸 이후, 가장 goal gps와 가까운 경로를 선택합니다.
Navigation에서는 주로 waypoint를 모델이 내놓고 이로 제어기를 통해 부드러운 주행을 하지만, GeNIE는 가야하는 방향을 맞추고 해당 방향으로 1m를 가는 식으로 이동합니다. 이는 해당 환경이 딜레이가 심하고(대략 2-3초) 센서에 오차가 심하기에 선택한 방식입니다.
이러한 안전 위주의 방식을 통해 GeNIE팀은 25년 대회에서 한번의 flip이나 intervention없이 우승했다고 합니다.
저희도 이걸 baseline으로 시작했습니다.
GeNIE팀은 앞쪽 sam2를 학습시켜 traversability map을 내놓고 이를 경로를 내놓는 부분까지 코드로 공개해줬습니다. 따라서 그 결과를 통해 로봇을 실제로 어떻게 움직여야할지는 저희가 새로 만들어줘야 했습니다. 그러나 여기서부터 이 챌린지의 진짜 문제들이 드러납니다.
가장 큰 문제는 센서 정확도였습니다.
네비게이션 모델이 오른쪽으로 30도 돌고, 1m 직진하라고 명령을 내놓았다고 가정해봅시다. 그러면 모델은 어떻게 30도 돌았다는걸 알아낼까요? 지면의 거칠기랑 모터의 세기도 로버마다 다르기 때문에 시간으로 처리할 순 없습니다. 그렇기에 센서의 값은 절대적으로 필요합니다.
그러나 센서의 퀄리티가 너무 낮았습니다. 가장 필요한 회전각도를 얻기 위한 자력계는 calibration이 필수적이였습니다. 대부분의 대회 로버의 자력계는 hard/soft iron이 틀어진 문제였습니다. 즉, 중심을 제대로 찾지 못해서 방향을 제대로 보여주지 못하고 있는겁니다. 이는 다행히 2분 정도의 주행을 통해 충분한 데이터를 모으면 해결이 가능했습니다.
그러나 여전히 완벽하진 않았습니다. 로봇의 각도가 틀어지는 상황(pitch가 틀어진 지면)에서의 데이터는 2분 주행을 통해 얻기가 불가능하므로 해당 경우에는 방향이 또 틀어지고, 특정 로버의 경우는 자력계가 완전히 망가져있어 완전히 동일한 정보만 들어왔습니다.
아래 이미지는 데이터를 모아서 자력계를 calibration한 결과입니다. 아래 정도면 무난한 자력계입니다(파란 원의 중심이 완전히 벗어난 로버가 진짜 많았습니다)

다음 문제는 카메라의 높이였습니다.
Earth Rover Mini+는 카메라가 지면으로부터 14.7cm 떨어져있어, 화면의 대부분이 지면입니다. 이는 기존의 pretrained를 사용하는데 큰 애를 먹게 했고 fine-tuning을 꼭해야만 사용할 수 있게했습니다. 그리고 4m이상부터는 너무 적은 픽셀로 표현되기 때문에 대략 3m정도의 전방만 BEV로 활용할 수 있었습니다.
Long Range Navigator 도입
그래서 저희는 먼저 GeNIE를 상황에 맞게 구현한 후에 여러번 돌려본 결과, GeNIE는 너무 단기적인 goal을 향해가는게 문제라고 생각했습니다.
예를 들면, 아래와 같은 이미지에서는 최종적으로 빨간 별에 해당하는 위치에 도착해야합니다. 이를 위해서 사람은 노란색 원쪽으로 먼저 가야하니까, 검정 화살표 방향으로 움직일 것입니다.
하니면 GeNIE는 갈수 있는 방향 + GPS goal으로만 움직으므로 보라색 화살표로 움직이게 됩니다.
이는 연석 앞에 도달하는 결과를 만들어내고, 최종 목표에 도달하지 못할 확률을 엄청나게 올립니다. 그래서 이런 “이쪽으로 갈 수 있겠는데?”와 같은 사람의 직관을 저희도 도입하고자 했습니다.

그래서 저희는 Long Range Navigator를 도입했습니다. 이를 위해 아래 사진들처럼 사람이 갈 수 있다고 판단할 법한 이미지 대략 3000장을 직접 annotation을 쳐주었습니다(노란 타원). 그리고 이를 sam2-tiny encoder에 간단한 deconv decoder를 붙여 full-tuning 시켜주었습니다.



그렇게 학습된 결과를 일부 정성적으로 보여드리자면, 아래와 같습니다. 빨간색 영역이 모델이 예측한 값입니다.
잘 학습하여 기존 GeNIE에 문제 없이 통합할 수 있었습니다.


VLM as brain
사실 위 GeNIE+LRN 방식이 이동해야하는 대부분의 case를 처리해줍니다. 하지만 생각보다 막다른 곳으로 가거나, 잘못 밟아서 더이상 앞으로 진행할 수 없거나. 지도의 waypoint가 잘못 찍혀있어서 돌아가야할 필요가 있거나. 하는 식으로 위 방식만으로는 원하는 곳에 도달할 수 없는 경우가 많았습니다.
그래서 Claude를 들고 왔습니다.

위에서 말한 GeNIE+LRN 방식을 claude가 부를수 있는 하나의 skill로 만들어주고, 또 다양한 skill들을 claude가 부를수 있게 만들어 주었습니다. 이를 통해 아래와 같은 상황들을 해결할 수 있었습니다.


위처럼 잘못된 길로 들어가서 정체되어 있을때, claude는 후진하고 기존 GeNIE+LRN을 부르라고 명령했습니다. 이러한 방식으로 기존 방식이 해결 못하는 부분(주로 고착상태)를 해결할 수 있도록 해주었습니다.
이러한 방식으로 기본적인 주행(GeNIE+LRN)과 edge case(claude로 해결)을 좀 잡으니까, 이제 꽤 완성된거 같은데? 라는 착각에 빠지기 시작했습니다.
또한 이때쯤 교통사고(로버가)가 나기도 했습니다. 아래 이미지처럼 길을 따라 달리다가, 오는 차에 치여서 아래로 들어갔습니다. 저는 실시간으로 보고 있어서 꽤 놀랐는데, 차에서 아저씨가 내리더니 쿨하게 로버를 갓길에 다시 두고 떠났습니다.

그래서 저는 “아 이런 상황을 대비를 해야겠다”라는 생각이 크게 들었습니다. 주최측에 문의했을때도 “대회때 교통 통제는 없다. 로버가 저런 상황을 고려해야하지 않겠느냐?”라는 답변을 들어서 어떻게 도로에서도 안전한 부분을 선호하게 주행할수 있을까에 빠져서 몇주를 사용했습니다. 하지만 뚜렷한 결과를 내지 못했고, 최종본에도 사용하지 않았습니다.
Dry-run
그러다 보니 대회 1주 전이 다가왔습니다. 주최측은 대회의 진행 방식과 동일하게 진행하는 dry-run을 통해 점검 및 대회설명을 진행하였습니다. 1시간 동안 진행하였고, 아래 영상은 진행을 8배속으로 해놓은 영상입니다.
최종적으로는 8개의 waypoint중에 5개까지 갔습니다. 더 갈수 있었는데 time out이 됐습니다.
그리고 영상을 보면 1:05초에 로봇이 기울어지는데 이 때문에 방향 calibration이 완전히 망가져 제대로 방향을 못잡아서 제자리에서 몇분간 빙글빙글 도는 모습을 볼 수 있습니다.
위 dry-run을 통해 느낀건, 생각보다 너무 코스가 무난하고 쉬운데? 그리고 속도만 빠르게하면 무리없이 다 돌수 있겠는데? 였습니다.
또한 옆에 차가 쌩쌩 달리는 도로에서 달리는 상황이여서, 저거 해결 해야겠다. 라는 생각도 들었습니다.
하지만 문제는 제가 이러한 변동 사항을 대회 전주인 추석 연휴때 적용하려는게 문제였습니다. 연휴랑 주말 때(주말에는 원격 로버를 열어주지 않아서 테스트를 할 수 없음) 이런저런 많은 수정을 하고, 이를 대회 당일날 테스트하면 되겠지~라는 생각이였습니다(대회가 밤 10시였습니다). 그러나 대회 당일 아침/점심에 대회준비한다고 원격 로버를 열어주지 않았고, 그래서 수정사항들을이 제대로 환경에 맞게 되는지, 수치들을 알맞게 제대로 조절을 못하여서 수정사항들을 최대한 폐기하고 기존의 방식을 들고갔습니다.
대회 당일
대회는 3일간 진행되었습니다
미국 피츠버그 기준 아침 9시에 진행하여, 한국 기준으로는 밤 10시에 시작하였습니다. 첫째 날에는 outdoor만, 둘째날에는 outdoor+indoor+off-road를 진행하였습니다.
outdoor는 5개의 위치에서 달렸어야했습니다.
그중 2군데는 연습때 본적이 있는 곳이였고, 3곳은 처음보는 곳이였습니다.
결과부터 얘기하자면 outdoor는 점수를 내지 못했습니다.
첫번째 지역은 주최측이 의도적으로 연습과는 다른 해상도의 input을 주었습니다. 이러한 상황에 미리 대비를 했는지 보려고 했던것 같습니다. 다른 해상도의 input이 들어오니까 모델이 완전히 망가졌고, 1m도 제대로 가지 못했습니다.
두번째 지역은 연습때 정말 많이 봤고, 제가 자신이 있었던 곳이였습니다. 그런데 입구 지점에 낮은 연석을 모델이 갈수있다 판단해서 밝고 가려다가 뒤로 꽈당 넘어져버렸습니다. 3번까지 인간이 개입할 수 있는 기회가 있긴한데, 저도 갈수 있을거라 판단해서 개입하지 않고 지켜보다가 넘어져서, run이 끝나버렸습니다. 개인적으로 가장 아쉬운 run입니다.
세번째 지역은 제가 연습때 한번 봤던 곳이였습니다. 이곳은 완전 오르막 구간인 곳이였습니다. 아래 사진처럼 이루어진 코스였고 연습 때 주어졌던 대략 8군데 중에 잘 열리지도 알고 유일한 오르막이여서, 이곳 나오면 우리 아무것도 못하겠는데?라고 생각한 곳이였습니다. 왜냐면 오르막에서 흘러내리지 않기 위해서는 계속적으로 앞으로 명령을 내려야합니다. 그러나 흘러내려가고 있다는걸 인식해서, 이를 상쇄하는 명령을 내리는게 쉽지 않을거라 생각해서 따로 처리하지 않았습니다. 사실 이곳 나오면 포기해야지 라는 생각으로 했던거 같습니다.

그리고 여기서 처음 받은 로봇이 센서가 완전히 고장난 로봇이여서 교체를 요청했습니다. 주최측은 교체해줬고(교체에 걸린 시간은 run 시간에 포함되었습니다) calibration을 위해 오르막에서 데이터를 모으다가 제가 실수로 넘어뜨렸습니다. 그렇게 허무하게 이곳 run이 끝났습니다.
그리고 나머지 두곳은 한곳은 풀숲이 우거진 곳이였고, 한곳은 광장이였습니다. 풀숲이 우거진 곳은 통신이 망가져서 다른 플레이어 포함, 저도 이미지나 gps를 받을 수 없었습니다. 그래서 다음날 재시도 기회를 준다고 해서 다시 시도했지만, 여전히 통신이 너무 불안했습니다(환경도 너무 어렵긴했습니다). 중간부터는 아예 통신이 되지 않아 문의했더니, 어쩔수 없다고 그냥하라고 하여 포기했습니다.
그리고 광장은 센서가 완전히 고장난 로봇을 또 받았습니다. 교체를 요청했지만, 교체해줄 수 없다고 했습니다. 지자계 센서 값이 동일한 값만 들어와서 모델을 아예 돌릴수 없었습니다. 그래서 포기했습니다.
이렇게 outdoor navigation이 끝이났습니다. 두번째 지역이나 세번째 지역은 제가 좀만 잘 대비했다면 점수를 꽤 얻을 수 있는 지역이라고 생각하여 많이 아쉬움이 남습니다. 첫번째 지역도 다른 해상도로 충분히 들어올수 있는거기에 아예 생각도 못하고 있었지만, 대비했다면 충분히 갈 수 있지 않았을까 싶습니다.
하지만 대회내내 센서랑 통신 때문에 너무 고통받았습니다. 혹시 센서 값을 제가 잘못처리하고 있는건가 싶어서 계속해서 확인해봤지만 문제 없었고, 주최측도 어쩔수 없다라고 진행하여 다른팀들은 어떻게 진행하였는지 너무 궁금하였습니다.
그래서 대회가 끝난 후, 대회에 참여한 다른 한국팀에게 어떤 식으로 진행했는지, 그리고 문제들을 어떻게 해결했는지 물어보았습니다. 그곳 역시 특별한 대책이 있었던건 아니고, 로봇 교체를 계속 요구했고 on-board calibration이라는 기능을 주최측에 요청했다고 합니다.
—
마무리
제가 outdoor navigation을 위주로 담당하여 indoor나 off-road를 어떻게 준비했는지는 다루지 않았습니다. 아마 우현님이 잘 설명해주시지 않을듯 싶습니다. 또한 결과적으로 off-road부문에서는 좋은 성적을 달성하여서, 흥미롭게 읽으실 수 있지 않을까 싶습니다.
대회를 준비하면서 제일 크게 느낀건 모델보다 로봇의 센서를 잡고, 딜레이를 잡는게 정말 중요한걸 느꼈습니다. 물론 대회가 저가 로봇에 원격 환경에서 진행하여 더 심한것도 있지만, 실제 로봇을 deploy해야하는 관점에서도 꼭 필요한 부분 같습니다.
그리고 메인은 VLM에 GeNIE+LRN이지만, 세부적으로 적용한게 정말 많습니다. 이러한 엔지니어링이 성능을 크게 좌우했고, 시간도 많이 잡아먹었습니다. 단순히 주어진 데이터셋으로 성능을 올리는 작업을 하다가, 이러한 엔지니어링적으로 주어진 문제를 푸는 과정이 꽤 재미었습니다.
이상으로 마치겠습니다. 긴글 읽어주셔서 감사합니다.
정우님 글 재미있게 읽었습니다! 매번 조그만 로봇으로 뭘 하고 계신 건지 궁금했는데 이번 글을 읽으면서 그 궁금증을 해소할 수 있었네요! ㅎㅎ 원격으로 로봇에 접속해서 진행하는 대회라니 정말 신기하네요. 대회 준비하시느라 정말 수고 많으셨습니다! 저도 언젠가 정우님과 함께 이런 챌린지에 참가할 날이 오겠죠? 그날을 기대하겠습니다! ㅎㅎ
안녕하세요 정우님 후기 잘 읽었습니다!
정우님이랑 둘째 날 진행했던 챌린지에서 새벽 3시까지 정우님 통역 도움받으면서 진행했었는데 정말 감사했습니다 우하하.
준비하면서 여러 문제를 겪긴 했지만, 막상 실전에서는 센서같은 하드웨어 문제에 발목이 잡힐 줄은 몰랐습니다. 사실 결과를 떠나서 그동안 준비했던 것들을 제대로 보여주지도 못했다는 점이 가장 아쉬웠던 것 같습니다. 뭔가 돌이켜보면 저희가 주로 컴퓨터 비전 쪽을 위주로 무언가를 해왔기에 실제 로봇을 운용하면서 발생하는 이런 하드웨어적인 문제들에 익숙하지 않았던 것도 있는 것 같습니다. 그래도 직접 저희가 생각한 방향에 맞춰서 학습 데이터셋 어노테이션도 해보고, 여러 내로라하는 VLM도 가져다가 붙여보고, 센서 캘리브레잉션도 진행하고 실제 환경에서 모델을 돌리면서 예상치 못한 문제들도 어떻게든 해결해 보려고 하는 과정에서 연구실에서는 쉽게 얻기 힘든 경험을 많이 했다고 생각합니다! 결과적으로 아쉬움도 많았지만, 그만큼 배운 것도 많았던 챌린지라고 저는 개인적으로 생각합니다! 준비부터 대회 마지막까지 정말 고생 많으셨습니다!
안녕하세요 정우님 챌린지 후기 잘 봤습니다.
제가 데이터 어노테이션을 도와드린게 어떤 부분인지 알 수 있었네요
준비기간도 길고 준비한만큼 보여주지 못해서 아쉬웠겠네요..
다만 다음에도 같은 상황이 생긴다면 어떤 점들을 신경써야하는지를 이번기회에 배울 수 있었을거라 생각합니다!