연구 및 프로젝트

2025 ICRA QRC 참여 후기

짓호 2025. 6. 11. 18:02

전세계 로봇 학회 중 가장 큰 학회 중 하나인 International Conference on Robotics and Automation (이하 ICRA)에서는 매년 사족보행로봇 챌린지(이하 QRC)라는 대회를 개최하곤 한다. 로보컵이나 DARPA처럼, 재난 상황에서도 잘 임무를 수행하는 로봇을 위한 기술을 개발하기 위해서 매우 도전적인 지형을 다니면서 미션을 수행하는 대회이다. 


2025 ICRA QRC 현장에서 찍은 사진



내가 속해있는 Urban Robotics Lab (이하 URL)에서는 매년 이 대회를 나가는데, 2023년 첫 대회에서는 큰 점수차로 우승을 하기도 해서(뉴스) ICRA QRC는 랩에서 큰 연례 행사이자 미션으로 여겨지곤 한다. 이 대회를 참가하기 위해서 개발한 모듈들이 연구실의 귀중한 원천기술이 되어서 다양한 과제 및 후속 연구로 이어지고 있기도 하다. 

나는 운이 좋게도 2025 QRC 팀에 합류하게 되어서 2024년 12월부터 대회 준비를 시작했다. QRC는 험악한 지형을 자율주행으로 다니는 것을 목표로 하기 때문에 크게 다음과 같은 세부 모듈로 구성되어 있다. 

  • SLAM
  • Global Planner
  • Local Planner
  • Controller

나는 감사하게도 빛✨같은 선배님의 도움으로 석사과정의 주제를 비정형 지형을 위한 플래너 연구로 선정했고, 연구실의 기반기술인 TRG-Planner를 유지보수 및 추가 개선하는 쪽으로 공부를 하고 있었기 때문에 Global Planner 파트를 (혼자) 맡게 되었다. 

또한 QRC에서는 자율보행 뿐 아니라 Inspection 및 Manipulation 태스크도 있다. 

버튼 (Manipulation) 과 원통 (Inspection)

우리 랩의 올해 전략은 팔을 부착한 사족보행 로봇(Mobile Manipulator)이었기 때문에 해당 부분을 위해서는 

  • Misison을 위한 인식 : 객체 인식, 6-DoF pose estimation 
  • Manipulator Control : 미션 수행을 위한 매니퓰레이터 제어
  • Whole-body Control : 팔을 부착한 상태로 이동
  • State Machine : 최상단 상태 관리 머신
    • 로봇의 현재 State (미션 수행 중, 자율 보행 중, 발이 끼었음, 로봇 뒤집어졌음 .... 등등)에 따라서 로봇이 취해야 할 행동 결정

도 필요했다. 이 중에서 나는 추가적으로 미션을 위한 Perception 모듈 개발도 맡아서 진행했다. 

 

1월 : 대회 4달 전

 
1월에는 킥오프 미팅을 진행하면서 작년도 대회 리뷰 문서를 점검하고 올해 보완 및 추가 개발해야 할 부분을 결정했다. QRC는 상당히 특수한 환경을 다루는데, 우선 대회장 자체가 빙글빙글 돌아가는 디스크, 심한 경사, 모래, 낮은 천장 등 굉장히 도전적인 지형을 포함하고 있다. 사족보행 로봇이 매우 넘어지기 쉬운 환경이고, 맵도 자주 바뀌고, 구경하는 사람도 많은 환경이라서 Static map을 취득하기 어렵다. 

또한 가장 심각하게 대두되었던 문제는 통신이었다. 대회장은 사람과 라우터가 많은 환경이라서 실험실같은 일반 WiFi를 가져가면 연결 자체가 잘 안 되는 경우가 많다고 하셔서, 통신에 대한 대응책 마련도 중요했다. 

내가 맡은 글로벌 플래너의 경우에는 

  • 로봇이 기존에 실패했던 경로를 다시 가지 않도록 하기 위한 Episodic Memory 기반 Replan 전략
  • 공간의 크기를 고려한 Adaptive Multi-Resolution 그래프 생성 : QRC 경기장은 매우 좁다
  • TRG Utility : 대회장에서 잘 활용할 수 있는 추가 기능 개발 (그래프 및 패스 저장 / 불러오기 / 수정, QT를 활용한 파라미터 조정)

를 올해 추가 개발해야 할 부분으로 선정했다. 
 

2월 : 대회 3달 전

 
대회장 환경이 STL 파일로 공개되어있기 때문에 이걸 받아서 시뮬레이터 환경을 구성하고, 연구실 기반 기술 인수인계를 많이 받았다. Traversability 및 Risk를 추정하여 Grid Map으로 변환하는 기술, GPP, 강화학습 기반 제어기(DreamWaQ) 사용법을 익혔다. 

대회장에서 TRG 경로가 어떻게 생기는지 다양한 환경에서 테스트해보면서 문제가 될 만한 부분을 찾아 보았다. 이번 대회에서 GPP 관련 내 역할은 개선도 있지만 Maintainer에 가까웠기 때문에 환경에 적합한 경로를 만들 수 있는 그래프를 생성하려면 파라미터를 어떻게 튜닝해야 하는지 경험적으로 배워야 했다. 그리고 대회장에서 문제가 될 만한 알고리즘의 약점도 잘 알고 있어야 했다. 
Utility를 개발하면서 알고리즘 내부를 자세히 뜯어볼 기회가 있었다. 

또, Perception 모듈도 개발을 시작했는데 올해 새롭게 추가된 매니퓰레이터를 위해서 각 타겟 물체의 6-DoF pose를 추정하는 것이 나의 과제였다.

다만 이 태스크는 제약 조건이 꽤 많았다. 먼저 가용 메모리가 적었다. 한정된 리소스 내에서 많은 모듈이 돌고 있기 때문에, 더 중요한 러닝 기반 모듈들(SLAM, Control)이 우선이라 미션 관련 Perception 모듈이 사용할 수 있는 메모리는 많지 않았다. 

그리고 매니퓰레이터 Policy가 받는 Input hz에 관계없이 Detection 모듈의 output hz는 높아야 했다. 그러니까 빠르고 가볍게 6-DoF를 추정해야 했다. 

그런데 이후에도 문제가 되었던 부분은 "RGB-D 카메라의 Depth 이미지가 거리가 멀어질 수록 정확도가 떨어진다는 것"이다. 나는 처음에는 <어차피 GPP가 가까이 데려다 줄 테니까 괜찮지 않을까?>라고 생각했지만 그것은 생각보다 간단치 않은 문제였다. 또한 대회장에 어떤 물품이 어떤 컨디션으로 나올지도 확실하지 않아서, 현장에서 새롭게 데이터를 땄을 때 빨리 Fine-tune할 수 있는 파이프라인도 구성해야 했다. 
 

3월 : 대회 2달 전

 
6-DoF 포즈를 추정하기 위한 다양한 방법을 시도해 보았다. 아루코 마커를 사용하여 6-DoF Pose Estimation 모듈을 파인튜닝하기 위한 GT 데이터셋을 따고 실험도 해 보았지만 생각보다 결과가 신통치 않았다. 안 되는 건 아닌데, 원하는 만큼의 정확도나 속도가 나오지 않았다. 로봇이 예상한 대로 움직이지 않으면 매니퓰레이션을 담당한 오빠랑 내 포즈가 잘못되었는지 오빠의 Policy가 잘못되었는지 옥신각신하면서 열심히 실험을 했다. (대체로 늘 내 잘못이긴 했다 - 오빠의 Policy는 무척 좋았던 것으로 판명됨...)

물체가 가까이에서 가만히 있으면 잘 되는데, 움직이는 로봇이 먼 곳에서 Pose를 Initial Guess로 받아서 행동을 시작하려고 하니까 생기는 문제들이 엄청 많았다. 그리고 모바일 매니퓰레이터 시스템 자체를 제작하는 것이다 보니까 하드웨어를 맡으신 선배님들도 정말 고난이 많으셨고, 그걸로 실험을 하면 알고리즘 하나 검증할 때도 발열, 통신, 갑자기 꺼짐 등등 하드웨어적 문제가 수두룩하게 발생해서 실험 자체도 시간이 오래 걸렸다. 문제가 생기면 설계도 수정하고, 구성도 수정하면서 노력을 많이 했다. 
 

4월 : 대회 1달 전

 
4월 9일이 첫 교수님 시연이어서, 4월 1일부터 대회 당일까지 내 인생에는 오로지 QRC밖에 없을 정도로 두달간 대회에 매진했다. 거의 매일 실험하고 3일에 한 번 꼴로 밤을 샐 정도였다. 
여담 : 나는 사실 평소에는 굉장히 일찍 자고 일찍 일어나는 스타일이라서 살면서 거의 한번도 밤을 새 본 적이 없었다. 근데 QRC는 반드시 내일 아침까지 해내야 하는 일이 많았어서 다같이 밤을 많이 샜다...


4월 10일 : 첫 밤샘을 가엾게 여기신 선배님들이 힘내라고 아이스크림 사 주심



다 같이 미국에 가는 것은 랩 차원에서 돈도 시간도 정말 많이 드는 일이고, 이렇게 리소스가 많이 투입되는데 팀에 누가 되지 않기 위해서는 내가 맡은 모듈을 꼭 잘 해내야 한다는 부담감이 많이 있었다. 

4월이 되어서는 전체 시스템 통합이 이루어져서 이제 내가 맡은 모듈의 앞 단, 뒷 단 까지 함께 고려하면서 협업해야 했다. 나는 SLAM 팀에서 제작해준 지도를 받아서 패스를 생성하고 이를 강화학습 기반 Local Planner에 전달해줘야 했다. 
여담 : 날 빼면 이 QRC팀은 정말 괴물같이 잘 하시는 선배님들로 구성된 팀이라서 실험 하시는 모습을 볼 때마다 가슴이 웅장해지곤 했다.

전체 시스템이 함께 동작하게 되면서 문제가 생겼을 때 어디가 문제인지 찾기가 좀 더 어려워지거나 하드웨어적 이슈도 많이 생기곤 했다. 이를 테면, <그냥 로봇이 이상하게 움직인다> 같은 문제가 생긴다.

자세히 뜯어보면, Local Planner는 로봇 Base frame의 Odometry를 받아서 학습했는데, Integration 과정에서 IMU frame 기준 Odometry를 구독하게 되면서 강화학습 기반 플래너가 좀 다른 양상의 제어기 output을 준다던지... 하는 문제였다. odom을 구독하냐 odom_base를 구독하냐 하는 차원의 문제인데, 플래너 단은 사실 SLAM을 그렇게 잘 알지 못 하기 때문에 odom과 odom_base의 큰 차이를 몰라서 이런 문제가 왕왕 발생하곤 했다. 

그래서 특히 GPP 쪽은 전체 파이프라인을 머릿속에 집어넣고 있어야 한다는 조언을 받았다. 대회를 하면서 특히 느낀건, GPP를 하는 사람은 LPP를 반드시 해야 한다는 것이었다. GPP는 그냥 길찾는 사람이 아니라, 로봇이 잘 갈 수 있을 만한 Local Goal Point를 주고 이를 위한 cmd_vel까지 책임을 져야 한다. LPP 친화적인 GPP를 만들어야 로봇이 <실제로 잘 갈 수 있는> 길을 찾을 수 있다는 걸 이번 QRC하면서 많이 깨달았다. 

그것은 왜냐하면 내 눈에는 분명 패스에는 문제가 없는데, 막상 로봇을 주행해 보면 로봇이 잘 가지 못 하는 경우가 다수 있었기 때문이다. 

경로는 예쁜데, 이것이 사실은 로봇이 잘 갈 수 있는 길이 아닌 것이다. 이런 위험한 지형을 주행하는 실험을 할 때는 로봇이 자주 앞구르기를 하면서 위에 전장부가 박살나곤 했는데, 박살난 로봇을 수십번 고치고 일으켜서 다시 실험을 진행하는 것도 참 쉬운 일은 아니었다. 

여담 : 로봇을 하기 위해서 필요한 것은 다름 아닌 체력 ! 로봇을 번쩍번쩍 들어서 다시 제자리로 가져다 놓을 수 있는 근력이 필요하다... 

 

5월 : 대회 

 
대회 직전이 되면서 들었던 말은 <지원아 미국가서 코드 고칠 생각일랑 말아라> 였다. 대회장은 정말 정신이 없으니 실수를 줄이는 것이 가장 중요하다고 하셨다. 알고리즘에서 사용하는 파라미터들을 모두 바깥으로 빼내서 대회장에서는 결코 catkin_make를 할 일 없이 config 파라미터만 고치면 되도록 준비했다. (하지만 결국 미국에서 새로 컴파일을 했는데, 선배님 말씀을 좀 더 마음에 새겼어야 했다...)

그래서 이때는 자동화에 집중하면서 모듈 실행을 위한 커맨드라인을 최대한 줄였다. 그리고 또 중요한 것은 RViz 아티스트가 되는 것이었다. 많은 수의 모듈이 던지는 토픽을 한 눈에 볼 수 있는 최적화된 RViz 환경을 구성하고, 이 트래픽을 조정하는 과정이 필요했다. 

그리고 실험을 많이 해 보면서 발생할 수 있는 문제들을 모두 미리 경험하고 손발을 잘 맞추는 연습도 많이 했다. 
로봇을 두 대나 들고 -  배터리도 포함해서 - 엄청난 짐을 꾸려서 미국에 가야 했으므로 준비물 리스트도 만들고 배분도 하고 대회 전날까지 밤을 샜다. 

본선은 목요일이었고, 월요일부터 대회장이 설치되어 있어서 실험을 많이 했다. 대회장에 예상치 못한 미션 물품이 나와서 거기서 추가적으로 대책을 세운 부분도 많았고, 예상보다 로봇이 잘 못 가서 고민스러웠던 코스도 있었다.




특히 이 대회는 F1같이 5분씩 시간을 주면서 제한 시간 내에 로봇을 세팅하고 주행시키는 것 까지 타이트한 시간 제한 내에 했어야 했다. 그게 생각보다 정말 어렵고 마음이 급해지면서 멘탈이 저 멀리 우주로 나가는 일이었다. 

그렇지만 많은 우여곡절 끝에 최종 성적 2등으로 2025 QRC를 마무리했다! 

 
1등을 한 ETH Zurich 팀과 대회 끝나고 서로 어떻게 했는지 한참을 얘기했는데, 그 시간도 무척 도움이 많이 되고 재미있었다. 

다른 팀 로봇도 구경했는데, 

좌 : 중국팀 모바일 매니퓰레이터 / 우 : ETH 팀

모바일 매니퓰레이터는 많이 출전하지 않을 것이라는 예상과는 달리 상단에 팔을 달고 나온 팀이 없지는 않았고, 거의 모든 팀이 유니트리 로봇을 데리고 출전했다. 상단에 3D 프린터로 출력한 전장부와 내부에 NUC, 가드를 장착한 LiVOX, 리얼센스를 달고 나온 구성이 거의 모든 팀이 동일했다.

대회와 연구가 어떤 점에서 다른지도 생각해 볼 만한 문제였다. 우선 대회의 경우 그래도 꽤 사전 정보가 많이 공개되기 때문에 범용적으로 잘 되는 기능보다 특정 상황에서 최적화를 빨리 시킬 수 있는 파이프라인을 구성하는 게 중요한 것 같다. ETH팀의 경우에도, 빙글빙글 돌아가는 디스크는 이번에 처음 나온 코스라서 처음에는 잘 못 갔는데, 마찰계수를 극도로 줄인 시뮬레이션 환경에서 보행 Policy를 빠르게 재학습시켰더니 잘 걸었다고 했었다. 그리고 전략을 다양하게 세우기보다는 하나의 확실한 전략을 반복적으로 연습함으로써 사람과 기술을 둘 다 최적화시키는 것이 중요한 것 같다. 정신이 없고 피로하기도 해서 도무지 대회장에서는 이성적인 생각을 하기가 어려웠다. 그런 상황에서 발생하는 실수를 줄이는 것이 관건이라고 생각한다. 

그리고 나는 처음에는 패스 저장, 파라미터 조정 같은 걸 할 수 있는 UI가 있으면 좋지 않을까? 하는 생각에 이것저것 두서 없이 개발을 했었는데, 대회장에서는 그걸 하나 더 켜는 것도 일이어서 전혀 쓰지 않게 되었다. 기능을 하나 추가할 거면 진짜 쓰기 쉽고 편하게 잘 만들던가, 아니면 시작을 하지 말던가 해야겠다. 

또 모바일 매니퓰레이터의 경우 페이로드의 무게를 심각하게 고려해야 할 필요가 있다. 팔이 무거워서, 제어기를 아무리 튜닝해도 보행 안정성이 확보가 잘 안 되었다. 

QRC가 끝나고 소회를 적어보려 하니 참 다양한 감정이 든다. 우선 가장 큰 감정은 감사함과 아쉬움인 것 같다. QRC를 하면서 나는 많은 것을 배웠는데,
1) 연구실 기반 기술의 소스코드 접근 권한(?)을 받아서 그 기술을 실전에 써보고 개선할 수 있는 기회가 있었고,
2) 사족보행 로봇을 다양한 환경에서 주행시켜 보면서 사족보행 로봇을 위한 플래너에는 어떤 요소들이 필요한 지 알 수 있었다. QRC가 아니었으면 Kinodynamic Local Planner의 중요성을 몰랐을 것이다.

그리고 다른 과제에서도 TRG Planner를 쓸 일이 많은데 QRC를 하면서 TRG에 익숙해져서 과제에서 할당받은 일도 지금은 자신있게 할 수 있고, QRC가 끝나고 나니까 순식간에 랩에 적응도 할 수 있게 되었다. 

다만 연차도 모자르고 경험도 부족해서 마음만큼 더 잘 하지 못 한 것 같아서 아쉬움이 남긴 한다. 그래서 돌아오는 비행기에서 앞으로 어떤 연구를 해야 할지에 대한 생각을 많이 했다. 


암튼 URL 짱임!