나의 로보틱스 연구 장

Table of Contents

이 글은 내가 로보틱스에 대한 열정을 발견한 FRC고등학교 시절 2015년부터, 2021년 2월부터 2021년 9월까지 콜로라도 광산 학교인간 중심 로보틱스(HCR) 연구실에서 연구 조교로 일하던 시기까지의 나의 로보틱스 여정을 회고한다. 참고로 2022년 말 이후 HCR 연구실은 콜로라도 광산 학교에서 매사추세츠 대학교 애머스트로 이전했으며, 사이트도 hcr.mines.edu에서 hcr.cs.umass.edu로 옮겨졌다.

배경

나는 2018년 가을 학기에 콜로라도 광산 학교에서 학부 과정을 시작했다. 내 전공은 로보틱스 및 지능형 시스템에 중점을 둔 컴퓨터 과학이었다. 그리고 나는 2022년 봄에 졸업했다.

나는 내 삶의 이른 시기에 내 열정을 찾을 수 있어서 운이 좋았다. 고등학교 시절, 나는 내가 무엇을 좋아하는지, 그리고 무엇을 잘할 수 있는지를 알아내기 위해 꽤 많은 시간을 보냈다. 시행착오를 거친 끝에, 나는 내 열정이 컴퓨터 과학이라는 것을 알아낼 수 있었다. 하지만 또한 이 시기에 나는 코드로 무언가를 만들어 내는 일에 대한 이 압도적인 사랑을 가지고 있다는 것도 발견했다.

Mines에서 나는 하오 장 박사 아래에서 Mines의 인간 중심 로보틱스(HCR) 연구실에서 일할 기회를 얻었다. 나는 2020년 봄 그의 수업인 “Human Centered Robotics”(CSCI473)를 통해 장 박사를 처음 만났고, COVID와 학업의 혼란이 지나간 뒤 2021년 초봄에 그의 연구실에서 일하게 되었다.

인간 중심 로보틱스(CSCI473) 수업

Mines의 인간 중심 로보틱스(CSCI473)는 내 대학 생활에서 나에게 깊은 영향을 준 몇 안 되는 수업 중 하나였다. 이 수업은 하오 장 박사가 가르쳤다. 이 수업의 전체 성적은 단 세 개의 프로젝트로 구성되었고, 각 프로젝트는 로보틱스의 핵심 개념을 소개하는 도전적인 문제를 제시했다. 이 프로젝트들은 다음으로 구성되었다:

  1. 로봇 운영 체제(ROS) 학습
  2. 로봇 벽 따라가기 위한 강화 학습
  3. 스켈레톤 기반 표현을 사용한 인간 행동에 대한 로봇의 이해

로봇 운영 체제(ROS) 학습

이것은 우리가 배정받은 첫 번째 프로젝트였다. 이 프로젝트는 세 가지 과제로 구성되어 있었다:

  1. 개발 환경 설정
  2. Gazebo 시뮬레이터 이해하기
  3. ROS “Hello World” 작성하기

과제 1과 2에서는, 우리는 단지 개발 환경을 설정하고 Gazebo 튜토리얼 소개를 따르면 되었다. 여기에는 다음이 포함되었다:

반면 과제 3은 진정한 도전이었다. 이 과제는 turtlesim을 사용하여 거북이가 Mines의 “M” 로고를 그리게 하는 것이었다:

이 과제는 단순해 보였지만, 실제로는 보이는 것보다 더 어려웠다. 이 프로젝트는 결국 나에게 개방 루프와 폐쇄 루프 시스템의 개념을 소개해 주었다. 전체 프로젝트 설명은 csci473-p1.pdf를 확인하거나, 이 프로젝트와 나의 해결 방법에 대해 ROS Move Turtle 프로젝트 페이지에서 더 알아볼 수 있다.

로봇 벽 따라가기 위한 강화 학습

이것은 우리가 배정받은 두 번째 프로젝트였고, 내가 대학에서 작업했던 프로젝트 중 가장 어려운 프로젝트 중 하나였다. 프로젝트 설명은 다음과 같았다:

이 프로젝트에서 학생들은 자율 이동 로봇이 벽을 따라가고 장애물과 충돌하지 않도록 가르치기 위해 강화 학습 알고리즘을 설계하고 구현할 것이다. 학생들은 ROS Melodic의 Gazebo 시뮬레이션을 사용하여 Triton이라는 이름의 전방향 이동 로봇을 시뮬레이션하고, 제공되는 환경 지도를 사용할 것이다. 학생들은 로봇의 레이저 거리 스캐너를 사용하여 감지와 학습을 수행하게 되며, 로봇은 조향 및 속도 명령을 사용하여 제어된다. 학생들은 Ubuntu 18.04 LTS에서 실행되는 ROS Melodic에서 이 프로젝트를 C++ 또는 Python으로 프로그래밍해야 한다(즉, 프로젝트 1에서 사용한 것과 동일한 개발 환경). 또한 학생들은 LATEX을 사용하여 표준 IEEE 로보틱스 학회 형식을 따르는 보고서를 작성해야 한다.

강화 학습 알고리즘으로는 Q-Learning을 사용하라는 지시를 받았다. 또한 우리는 수업에서 제공한 Stingray Gazebo 시뮬레이션 환경도 사용했다. Stingray는 Triton 모델과 물리 로직으로 구성되어 있었다. 또한 우리는 로봇이 따라가야 할 미로도 제공받았다. 전체적으로 환경은 다음과 같았다:

나는 내 해결책이 별로 좋지 않고 결함이 많았기 때문에 GitHub나 웹에 공개하지 않았다. 또한 코드를 올바른 환경에서 실행되게 하는 것은 꽤 어렵고 성가시다. 하지만 나는 수업에 제출했던 데모 비디오를 가지고 있는데, 거기에는 내 해결책이 담겨 있다. 여기에서 볼 수 있다:

전체 프로젝트 설명은 csci473-p2.pdf를 확인하라.

스켈레톤 기반 표현을 사용한 인간 행동에 대한 로봇의 이해

세 번째 프로젝트의 설명은 다음과 같았다:

이 프로젝트에서 학생들은 여러 스켈레톤 기반 표현(제출물 1)을 구현하고, Kinect V1 센서에서 수집된 공개 활동 데이터셋을 사용하여 인간 행동을 분류하기 위해 서포트 벡터 머신(SVM)(제출물 2)을 사용할 것이다. 또한 학생들은 보고서를 작성해야 하며, 제출물 3에서는 LATEX를 사용하여 표준 IEEE 로보틱스 학회 형식을 따라야 한다.

이 프로젝트는 도전적이었지만 두 번째 프로젝트만큼 어렵지는 않았다. 주요 목표는 Kinect V1 센서 데이터, MSR 일상 활동 3D 데이터셋, 그리고 서포트 벡터 머신을 사용하여 특정 인간의 행동/행위를 분류하는 것이었다. 전체 프로젝트 설명은 csci473-p3.pdf를 확인하거나, 이 프로젝트와 나의 해결 방법에 대해 LIBSVM을 사용한 인간 행동 예측 블로그 글에서 더 알아볼 수 있다.

CSCI473 결론

CSCI473는 내가 Mines에서의 학부 과정 동안 들은 수업 중 가장 좋았던 수업 중 하나였다. 이 모든 프로젝트는 나에게 많은 것을 가르쳐 주었고, 이력서에 언급하고 되돌아볼 수 있는 멋진 프로젝트 목록을 갖게 해 주었다. 또한 나는 이 수업에서 처음으로 내가 정말 제자리에 있는 듯한 느낌을 받았는데, 나는 시험을 잘 보는 편은 아니었지만 프로젝트를 완수하는 데서는 뛰어났기 때문이다. 이 수업을 통해 나는 하오 장 박사를 만났고, 그는 결국 내가 Mines의 인간 중심 로보틱스(HCR) 연구실에서 연구 조교 자리를 얻는 데 도움을 주었다.

CS 필드 세션(2020년 여름)

CG_GUI_19

2020년 여름 동안, CSCI473를 마치고 HCR 연구실에 합류하기 전까지 나는 콜로라도 광산 학교의 CS 학부 프로그램의 일환으로 CSCI370 또는 “고급 소프트웨어 공학"을 수강했다. CSCI370은 학생들이 회사의 소프트웨어 관련 솔루션을 설계, 구현, 문서화하도록 하는 수업이다. 이 수업은 학생들이 수업에서 배운 지식을 실제 컴퓨터 과학 문제에 적용할 수 있게 해 준다. 이 수업에 대해 여기에서 더 알아볼 수 있다.

이 수업에서는 어떤 프로젝트/회사와 함께 일할지 직접 결정하게 된다. 수업에서는 각 프로젝트와 회사를 자세히 설명한 PDF를 제공했다. 결국 나는 Lunar Outpost라는 회사가 게시한 “향상된 달 탐사를 위한 실시간 바퀴 미끄러짐 감지 및 오류 수정"이라는 프로젝트를 하기로 결정했다. 이름이 길기 때문에, 이 프로젝트에 “바퀴 미끄러짐 감지"라는 별칭을 붙이자.

문제

Lunar Outpost는 자율 달 로버를 만들려고 하는 스타트업이다. 달에는 바퀴 미끄러짐을 많이 유발하는 것으로 알려진 달 먼지가 매우 많다. 바퀴 미끄러짐은 자율 시스템이 실제 위치를 추적하지 못하게 할 수 있기 때문에 이것은 바람직하지 않다. 지구에서는 바퀴 미끄러짐으로 인해 생긴 오프셋을 수정하기 위해 GPS 데이터를 사용함으로써 이 문제를 해결한다. 하지만 GPS의 문제는, 컴퓨터가 자신의 위치를 계산할 수 있도록 고유한 신호를 지속적으로 송신하는 30개 이상의 항법 위성이 지구를 궤도로 계속 돌고 있어야만 작동한다는 점이다. 그러나 달에는 현재 그런 GPS가 없다. 이를 고려하면, 바퀴 미끄러짐을 감지하기 위해 GPS 이외의 다른 방법을 사용해야 한다. 프로젝트의 문제에 대한 더 자세한 보고서는 여기에서 볼 수 있다.

이 프로젝트는 단순한 프로젝트가 아니었기 때문에 팀으로 수행해야 했다. 팀은 다음과 같은 콜로라도 광산 학교 학생 다섯 명으로 구성되었다:

이 프로젝트는 단순한 프로젝트가 아니었기 때문에 팀으로 수행해야 했다. 이 팀은 Mehmet Yilmaz(나), Kane Bruce, Braedon O’Callaghan, Liam Williams, 그리고 Kevin Grant로 구성되었다.

이 프로젝트는 ROS, C++, Python, Linux, Raspberry Pi, 그리고 Arduino에 대한 어느 정도의 지식을 요구했다. 우리 대부분은 이러한 기술들 중 하나 이상에 대한 경험이 있었지만, 나는 2020년 봄 학기에 인간 중심 로보틱스(CSCI473) 수업에서 ROS를 사용했기 때문에 ROS 경험이 있는 유일한 사람이었다. 이 때문에 초반에 나는 모두가 ROS와 그것을 위해 어떻게 개발하는지에 대해 속도를 맞출 수 있도록 도왔다.

도전 과제

이 프로젝트에서는 많은 도전 과제가 있었습니다. 하지만 우리가 직면한 가장 큰 도전은 테스트를 위해 실제 세계의 로봇에 접근할 수 없었다는 점이었습니다. 이는 COVID 때문에 모든 것이 원격으로 진행되었고, 우리가 Lunar Outpost의 연구실/건물에서 작업하는 것을 막았기 때문입니다. 이로 인해 우리는 시뮬레이션을 사용해야 했습니다.

또한, 우리는 WVU Navigation Lab의 학술 연구를 살펴보며 Wheel Slippage 문제를 Lunar Outpost의 사용 사례에 맞게 어떻게 해결할 수 있을지에 대한 아이디어를 얻었습니다. 이는 학부 2학년과 3학년이었던 우리에게 예상보다 더 어려운 일이었습니다.

우리가 직면한 또 다른 도전은 이 프로젝트에 할애할 수 있는 시간이었습니다. CSCI370은 한 달짜리 수업입니다. 하지만 문제 자체는 수십 년 동안 많은 기업과 학자들이 해결/완성하려고 노력해 온 거대한 문제입니다. 따라서 한 달은 이 문제를 해결하기에 턱없이 부족한 시간입니다. 그러나 이러한 모든 도전에도 불구하고 우리는 끝까지 버텼고 반드시 결과물을 내기로 했습니다.

결론

모든 연구와 개발을 진행한 후, 우리는 디지털 방식으로 적절한 달의 물리 법칙을 시뮬레이션하는 것은 거의 불가능하다는 결론에 도달했습니다. 따라서 시뮬레이션에서 이 알고리즘을 실제로 시험하는 것은 별로 의미가 없으며, 우주와 달에서의 휠 슬리피지 감지에 관한 어떤 의미 있는 연구도 이끌어내지 못할 것입니다. 우리는 모래와 같은 재료와 Husky 로봇 같은 실제 하드웨어를 사용하여 적절한 테스트 환경을 구축하는 것이 이러한 유형의 연구에서는 훨씬 더 중요하다고 결론지었습니다. 우리는 휠 슬리피지 감지 코드를 ROS 노드로 동작하도록 업데이트했고, 그것은 제대로 기능했으며 실제 하드웨어로 쉽게 가져가 테스트할 수 있었습니다. 이 프로젝트를 통해 저는 리더십 역할을 맡고, 동료들에게 ROS 개발을 교육하며, 이전에는 한 번도 접해보지 못했던 복잡한 문제에 도전하면서 Python, ROS, Gazebo에 대한 경험을 쌓을 수 있었습니다. 가장 중요한 점은, 이 경험이 로봇공학에 대한 제 열정을 더욱 확고히 했고 이 분야에서 연구를 계속하고 싶다는 제 바람을 강화해 주었으며, 제 로봇공학 여정에서 다음에 올 일들을 위한 발판을 마련해 주었다는 것입니다.

HCR Lab에서 시작하기

2020년 여름 CSCI473, 제 CS Field Session, 그리고 2020년 가을 학기를 마친 후, 저는 로봇공학 연구를 추구하기로 결정했습니다. CSCI473와 CS Field Session 모두에서 매우 좋은 경험을 했기 때문에 HCR Lab에서 연구를 하고 싶다고 생각했습니다. 전년도에 Dr. Zhang을 만난 적이 있었기 때문에, 저는 그에게 이메일을 보내 2021년 1월에 연구실에서 가능한 기회가 있는지 물었습니다. 약 2주 후, Dr. Zhang은 관심을 보였고, 저에게 연구 옵션들을 제시했으며, 연구실에서의 역할을 제안했습니다. 그 후 저는 2021년 2월부터 연구실에서 일하기 시작했습니다.

소개 영상

이것은 제가 HCR Lab에서 지낸 지 몇 달 되었을 때 녹화한 제 소개 영상입니다. 2021년 5월에 녹화되었으며, 2021년 여름 동안 HCR Lab에서 제가 집중할 연구를 다룹니다:

내 프로젝트

HCR Lab에서 지내는 동안 저는 주로 Triton 프로젝트에 집중했습니다. Triton 프로젝트는 Human Centered Robotics Lab이 콜로라도 광산대학교에 개발한 이동 로봇입니다. NVIDIA의 Jetson Nano로 구동되는 삼각형 옴니 휠 지상 로봇입니다.

Triton은 간단히 말해 다음과 같은 부품들로 구성되어 있었습니다:

  • NVIDIA Jetson Nano
  • NVIDIA의 Seed Studio A205 캐리어 보드
  • Arduino Mega
  • 64 GB 마이크로 SD 카드
  • 맞춤형 3D 프린팅 본체
  • 3개의 메카넘 휠
  • 1개의 AR 배터리
  • 최적화된 전력 분배와 배선을 위한 맞춤형 회로
  • Intel의 Realsense D435 카메라
  • 몇 개의 LED

이 로봇은 교육용으로 2018~2020년경에 설계, 제작, 제조되었습니다. 제가 합류했을 때 Triton은 꽤 확립된 상태였고, 연구실은 그 새 버전을 만드는 것을 고려하고 있었습니다. 그러나 Triton의 주요 문제는 소프트웨어였습니다. Triton은 움직일 수 있고, 충전할 수 있으며, 기본적인 의미에서는 기능했지만, 실제로는 지능적인 일을 거의 하지 못했습니다. 더 고급 동작을 수행하는 능력조차 없었습니다.

배터리 충전기 설정 테스트 구역 배치
초기 테스트 단계의 Triton들 선반 위의 Triton들

이를 해결하기 위해 연구실은 우리가 Triton을 추적할 수 있는 구역을 마련했습니다. 이를 위해 바닥에서 약 6~7피트 위에 8개의 Optitrack Flex(적외선) 카메라를 정사각형과 비슷한 형태로 배치한 2미터 x 2미터 영역을 만들었습니다.

구역 I1 구역 I2

이 구역을 구축하는 것과 함께, 각 Triton의 몸체 상단에는 세 개의 회색 구형 공이 부착되었습니다.

이 설정을 통해 우리는 사실상 Triton의 정확한 좌표를 관심 구역 내에서 미터 단위로 얻을 수 있게 해주는 자체 소규모 GPS 시스템을 구축한 것이었습니다. Optitrack 적외선 카메라와 삼각형 형태로 배치된 Optitrack 회색 구형 마커를 사용함으로써, 우리는 구역 내 Triton의 정확한 좌표를 특정할 수 있었습니다. 이를 통해 더 나은 이동 정확도를 위한 폐루프 시스템을 적용할 수 있었습니다.

Optitrack 시스템은 적절히 보정되면 약 120Hz에서 서브밀리미터 정확도의 위치 및 자세 데이터를 제공했습니다. 각 Triton의 세 개 반사 마커는 시스템이 강체로 추적할 수 있는 고유한 삼각형 패턴을 형성했습니다. 좌표계는 (0,0)이 추적 구역의 중심에 오도록 보정되었고, X 및 Y 축은 방의 구조에 맞게 정렬되었습니다. 그러나 이렇게 정밀한 위치 데이터가 있음에도 불구하고, Triton은 여전히 이동에 어려움을 겪었습니다.

이 설정에서 우리가 Triton에게 제공하고자 했던 핵심 기능 중 하나는 특정 좌표로 이동하는 능력이었습니다. 사용자 또는 그들의 소프트웨어는 관심 구역 내의 (x, y) 좌표를 제공할 수 있었습니다. 그러면 로봇은 가능한 한 빠르고 정확하며 매끄럽게 그 좌표로 이동해야 했습니다. 제가 합류했을 때 이 기능은 존재했지만, 그다지 잘 작동하지 않았습니다. 아래는 원래의 이동 로직이 어떻게 작동했는지를 보여주는 간단한 애니메이션입니다:

저는 원래 솔루션이 실제로 작동하는 모습을 녹화하지 않았기 때문에, 오래된 이동 로직이 작동하는 모습을 보여주는 이 간단한 애니메이션을 만들었습니다. 이를 알고 있다면, 이 방법의 문제점은 무엇일까요?

  1. 정말 느립니다
  2. 특정 지점으로 가기 위해 로봇이 너무 많은 공간을 차지하게 됩니다. 이 때문에 여러 Triton이 동시에 움직일 때 이 솔루션을 사용하기가 어려웠습니다.

그렇다면 왜 이런 동작이 발생했을까요? 문제는 Triton이 먼저 회전하여, 특정 오차 범위 내에서 목표 지점을 향하도록 alpha를 바꾼다는 점이었습니다. 그런 다음 앞으로 질주하고, theta가 목표에 대해 특정 مقدار만큼 벗어나면 멈춰서 다시 회전을 시작하여 alpha가 목표값에 대해 허용 가능한 범위 안에 들어올 때까지 반복했습니다. 그런 다음 다시 질주하고, 지점에 도달할 때까지 이것을 계속했습니다. 또한 목표 지점에 점점 가까워질수록, 지나치게 넘어서지 않도록 회전과 질주의 속도는 점점 더 느려졌습니다. 그 결과 Triton은 부자연스러운 움직임을 보였고, 목표 지점에 도달하는 데 엄청나게 오랜 시간이 걸렸으며, 특정 목표 지점에 가는 데 너무 넓은 공간이 필요했습니다. 따라서 이러한 문제들, 그리고 이 기능이 Triton 프로젝트 개발에 얼마나 핵심적인지 고려했을 때, 제가 HCR Lab에서 일을 시작했을 때 제 첫 번째 과제는 Triton이 목표 지점으로 더 잘 이동할 수 있도록 더 효과적인 해결책을 개발하는 것이었습니다.

이 점을 알고, 저는 이 문제를 해결할 가장 좋은 방법에 대해 많은 시간을 들여 연구했습니다. 아이러니하게도 저는 Feedback Control Systems 소개 (EENG307)라는 수업을 Mines에서 듣고 있었습니다. 그 수업 초반에 우리는 개루프 제어기폐루프 제어기의 개념을 배웠습니다. 이 점과, 그 수업 교수님 및 똑똑한 룸메이트와의 논의를 통해, Triton을 목표 지점으로 보내는 이 목표는 폐루프 시스템 문제라는 것이 분명해졌습니다.

화이트보드 제어 시스템 다이어그램

이제 광범위한 테스트와 연구 끝에, 저는 Triton을 위한 두 가지 서로 다른 제어기 접근법을 개발했습니다:

방법 1: 거리-세타 제어기

이 접근법은 동시에 작동하는 두 개의 별도 비례 제어기를 사용했습니다:

  • 거리 제어기: 목표까지의 유클리드 거리를 계산하고 비례 이득을 적용하여 전진/후진 속도를 결정함
  • 세타 제어기: 로봇의 현재 진행 방향과 목표를 향한 원하는 방향 사이의 각도 오차를 계산하고, 회전 속도를 위해 별도의 비례 이득을 적용함

이 알고리즘은 목표까지의 유클리드 거리와 로봇의 현재 진행 방향과 원하는 방향 사이의 각도 오차를 지속적으로 계산했습니다. 선형 속도와 각속도를 생성하기 위해 각각 두 개의 별도 비례 이득이 적용되었습니다.

그 결과 Triton은 목표를 향해 자연스럽게 회전하면서 동시에 앞으로 이동하여 부드러운 곡선 경로를 만들 수 있었습니다. 핵심 장점은 로봇이 항상 앞면을 목적지 쪽으로 향하게 유지한다는 점이었고, 이는 카메라 기반 응용에서 매우 중요했습니다.

방법 2: X-Y 좌표 컨트롤러

이 접근 방식은 로봇을 2D 플로터처럼 취급하여 X 및 Y 이동을 독립적으로 제어했습니다:

  • X 컨트롤러: X좌표 오차를 기반으로 동서 방향 이동을 직접 제어
  • Y 컨트롤러: Y좌표 오차를 기반으로 남북 방향 이동을 직접 제어

구현은 X와 Y 좌표 오차를 각각 독립적으로 계산하고, 별도의 비례 이득을 적용한 다음, 회전 행렬을 사용하여 이 전역 속도 성분들을 로봇의 로컬 좌표계로 변환했습니다. 이 변환이 필요한 이유는 로봇의 옴니휠 구동계가 전역 좌표가 아니라 자기 자신의 기준 프레임에서의 속도를 필요로 했기 때문입니다. 이 방법은 목표 지점까지 가장 직접적인 경로를 만들어 냈고 훨씬 더 빨랐지만, 명시적인 자세 제어가 없었기 때문에 로봇의 헤딩은 드리프트했습니다.

방법 #1에 대해서는 제 Move Turtle (TurtleSim) 블로그에서 이 방법을 완전하게 자세히 설명했습니다. PID 컨트롤러가 일반적으로 어떻게 작동하는지, 그리고 방법 #1이 어떻게 작동하는지에 대한 모든 세부 사항을 얻기 위해 이 블로그를 읽어 보시기를 강력히 권합니다. 저는 ROS의 TurtleSim을 사용해 방법 #1을 개발한 뒤, 그 코드를 Triton으로 옮겨 더 실제 세계에 가까운 환경을 반영하도록 업데이트했습니다.

방법 #2는 꽤 다르지만 마찬가지로 효과적인 접근 방식을 사용했습니다. 로봇의 방향과 목표까지의 거리를 생각하는 대신, 이 방법은 이동을 좌표평면 문제처럼 다룹니다. 컨트롤러는 X 및 Y 방향의 오차를 각각 지속적으로 계산합니다. 예를 들어, 로봇이 (0,0)에서 (2,3)으로 이동해야 한다면, 이는 X에서 2미터의 오차와 Y에서 3미터의 오차를 수정해야 한다고 봅니다. 두 개의 비례 컨트롤러가 동시에 작동했습니다: 하나는 X 오차를 기반으로 로봇의 X 방향 속도를 조절하고, 다른 하나는 Y 오차를 기반으로 Y 방향 이동을 처리했습니다. 이는 3D 프린터 헤드가 움직이는 방식과 비슷한, 목표 지점으로 더 직접적인 경로를 만들어 주었고, 부드러운 대각선 이동을 가능하게 했습니다. 로봇이 명시적으로 목표를 향해 회전할 필요가 없었기 때문에, 이 방법은 특히 좁은 공간이나 정밀한 위치 지정이 필요한 경우에 매우 효과적이었습니다.

두 방법 모두 원래 접근 방식보다 훨씬 더 빠르고 신뢰할 수 있음이 입증되었습니다. 이 새로운 방법들이 실제로 동작하는 모습을 보려면, 새로운 방법으로 모든 Triton이 움직이는 장면을 보여 주는 Tritons in Action 재생목록을 확인해 보세요.

단순한 점 대 점 이동에 30~45초가 걸리던 것이 이제는 약 8~12초가 되었습니다. 더 중요한 점은, Triton이 이제 좁은 공간에서도 더 효율적으로 주행할 수 있게 되었고, 이는 다중 로봇 시나리오에서 유용하게 활용되었다는 것입니다.

개발상의 도전과 디버깅

이 컨트롤러들을 구현하는 일은 간단하지 않았고, 여러 가지 중요한 디버깅 도전 과제를 수반했습니다:

좌표계 변환: 가장 까다로운 부분 중 하나는 좌표 변환을 정확하게 수행하는 것이었습니다. Optitrack 시스템은 자체 좌표계를 기준으로 데이터를 제공했고, 로봇은 자체 로컬 좌표계를 가지고 있었으며, 저는 이들 사이를 정확하게 변환해야 했습니다. 초기 구현에서는 회전 행렬 계산을 혼동했기 때문에 로봇이 엉뚱한 방향으로 움직였습니다.

현실 세계의 동작 vs. 이상적인 동작: 가장 큰 도전은 교과서적인 제어 이론에는 나타나지 않는 실제 세계의 요인들을 반영하는 것이었습니다. 로봇의 바퀴는 서로 다른 마찰 특성을 가지고 있었고, 모터들은 동일하게 반응하지 않았으며, Optitrack에서 제어 소프트웨어를 거쳐 로봇의 Arduino까지 이어지는 통신 경로에는 항상 어느 정도의 지연이 있었습니다. 저는 이러한 물리적 현실을 반영하기 위해 비례 이득을 몇 주 동안 조정하고 데드밴드 필터를 추가했습니다.

진동 및 안정성 문제: 제 첫 구현은 로봇이 목표를 지나쳐 앞뒤로 흔들리는 진동 문제를 겪었습니다. 이를 통해 PID 컨트롤러에서 미분 항의 중요성과 적절한 이득 튜닝의 필요성을 배웠습니다. 결국 저는 완전한 PID 대신, 시스템의 고유한 감쇠만으로도 대부분의 응용에 충분했기 때문에 세심하게 튜닝된 이득을 사용하는 주로 비례 제어 방식에 정착했습니다.

다중 로봇 간 간섭: 여러 로봇이 동시에 동작할 때, 저는 예상치 못한 간섭 패턴을 발견했습니다. 로봇들이 때때로 같은 공간을 두고 “서로 밀어내는” 듯한 현상을 보이거나, 서로를 무한정 막아 버리는 교착 상태를 만들기도 했습니다. 이로 인해 저는 조정 메커니즘과 충돌 회피 알고리즘을 구현하게 되었습니다.

다중 Triton 제어 시스템

단일 Triton 이동 문제를 해결한 뒤, 다음 과제는 여러 Triton이 동시에 함께 동작하도록 만드는 것이었습니다. 이것은 제 주요 관심 분야 중 하나가 되었고, 결국 프로젝트에 대한 중요한 기여로 이어졌습니다.

원래 시스템은 한 번에 하나의 Triton만 제어할 수 있었기 때문에 연구 가능성이 심각하게 제한되었습니다. 연구실은 여러 자율 주행 차량이 서로 통신하며 교통 흐름을 최적화하고 더 나은 SLAM(Simultaneous Localization and Mapping) 지도를 만드는 것처럼, 여러 자율 차량이 서로의 이동을 조정해야 하는 시나리오를 시뮬레이션하고자 했습니다.

이를 해결하기 위해 저는 Python의 multiprocessing 라이브러리를 사용한 멀티프로세싱 접근 방식을 구현했습니다. 각 Triton은 중앙 제어 시스템에 의해 조정되면서도 독립적으로 실행될 수 있는 전용 프로세스를 하나씩 받았습니다. 이를 통해 여러 Triton이 서로의 제어 루프를 방해하지 않고 동시에 이동할 수 있었습니다.

다중 로봇 아키텍처 설계

제가 개발한 시스템 아키텍처는 몇 가지 핵심 구성 요소로 이루어져 있었습니다:

메인 컨트롤러 프로세스: 이는 중앙 조정자로서 사용자 인터페이스 상호작용, 경로 계획, 그리고 로봇 간의 고수준 조정을 담당했습니다. 전역 상태를 유지하고 개별 로봇 프로세스에 명령을 분배했습니다.

개별 로봇 프로세스: 각 Triton은 다음을 처리하는 전용 Python 프로세스를 가지고 있었습니다:

  • 약 50Hz에서의 실시간 PID 제어 계산
  • 로봇 하드웨어(Arduino/Jetson)와의 통신
  • 로컬 경로 실행 및 장애물 회피
  • 메인 컨트롤러로의 상태 보고

공유 메모리 통신: 저는 프로세스 간 효율적인 통신을 가능하게 하기 위해 Python의 multiprocessing.shared_memory와 Queue 객체를 사용했습니다. 이를 통해 네트워크 통신의 부담 없이 실시간 조정이 가능했습니다.

동기화 메커니즘: 여러 로봇이 충돌 회피처럼 조정이 필요할 때 충돌이 발생하지 않도록, 저는 로봇이 작업 공간의 특정 영역에 대한 배타적 접근 권한을 요청할 수 있게 하는 세마포어와 락을 구현했습니다.

도전 과제는 모든 로봇이 전역 조정을 유지하면서도 각자의 제어 루프를 독립적으로 운영할 수 있게 하는 것이었습니다. 각 로봇 프로세스는 자체 PID 계산을 수행하고 모터 명령을 하드웨어에 직접 보냈으며, 메인 프로세스는 충돌 회피와 경로 계획 같은 더 높은 수준의 조정을 처리했습니다.

다중 Triton 교차로 테스트 초기 다중 Triton 설정

향후 다중 에이전트 작업을 위한 드론과 함께 있는 Triton

다중 Triton 시스템은 완전히 새로운 연구 가능성을 열어 주었습니다. 이제 우리는 다음과 같은 것들을 시뮬레이션할 수 있었습니다:

  • 차량 간 통신 시나리오
  • 장애물 회피를 포함한 조정 경로 계획
  • 군집 로봇 동작
  • 다중 에이전트 SLAM 맵핑
  • 편대 제어와 추종 동작

여러 Triton이 동시에 실행되는 연구실 세팅이 어떤 모습이었는지는 다음과 같습니다:

초록색 그리드 위의 로봇들 로봇 그리드 설정

또한 저는 연구자들이 각 Triton의 경로를 시각적으로 정의할 수 있는 사용자 친화적 인터페이스도 개발했습니다. 각 로봇이 따라가길 원하는 경로를 말 그대로 그릴 수 있었고, 로봇들은 완벽하게 조정된 상태로 이 경로를 실행했습니다. 이는 모든 이동을 일일이 수동으로 코딩하지 않고도 복잡한 실험을 설정하는 데 매우 유용했습니다.

이 시스템은 최대 5개의 Triton을 동시에 처리할 수 있었고, 각 Triton은 중앙 제어 시스템을 통해 조정되면서도 자체 PID 컨트롤러를 실행했습니다. 성능은 인상적이었고, 모든 로봇은 팀으로 함께 일하면서도 각자의 정확도를 유지했습니다.

단일 로봇 제어부터 다중 로봇 조정까지, Triton이 실제로 동작하는 모습을 보여 주는 재생목록은 다음과 같습니다: Tritons in Action 재생목록

깊이 센서 통합 및 좌표 보정

제가 작업한 또 다른 중요한 진전은 각 Triton에 장착된 Intel RealSense D435 깊이 카메라를 활용하는 것이었습니다. Optitrack 시스템이 매우 정밀한 위치 데이터를 제공해 주었지만, 저는 로봇들이 온보드 센서를 사용해 공간 인식을 향상시키고 좌표 오차를 보정하는 방법을 탐구하고 싶었습니다.

아이디어는 Triton들이 깊이 센서를 사용하여 주변의 다른 Triton을 감지하고 서로의 위치를 교차 참조할 수 있다는 것이었습니다. 이는 여러 목적에 도움이 될 수 있었습니다:

  1. 오차 보정: Optitrack 시스템에 캘리브레이션 드리프트나 일시적인 가림이 있더라도, 로봇들은 서로의 위치를 시각적으로 확인하여 정확한 좌표계를 유지할 수 있습니다.

  2. 향상된 SLAM: 깊이 센서를 가진 여러 로봇이 함께 작업함으로써, 중복된 데이터 포인트를 통해 환경의 훨씬 더 풍부한 지도를 만들 수 있습니다.

  3. 충돌 회피: 실시간 깊이 센싱은 중앙 제어 시스템에 통신 지연이 있더라도 로봇들이 서로를 감지하고 피할 수 있게 해줄 것이다.

나는 Triton들이 다음을 할 수 있게 해주는 알고리즘을 실험하기 시작했다:

  • 고유한 삼각형 형태와 반사 구체 마커를 사용해 다른 Triton들을 감지하기
  • 깊이 데이터를 사용해 상대 위치와 방향 계산하기
  • 이러한 측정값을 Optitrack 데이터와 비교하여 불일치 식별하기
  • 잠재적으로 정확성을 유지하기 위해 실시간으로 좌표계를 조정하기

컴퓨터 비전 실험

나는 여러 단계로 동작하는 컴퓨터 비전 파이프라인을 실험하는 데 상당한 시간을 보냈다:

컴퓨터 비전 테스트를 위해 서로 마주 보고 있는 두 Triton Triton의 카메라 클로즈업
테스트를 위해 서로 마주 보고 있는 두 Triton
서로 마주 보고 있는 두 로봇 경주를 막 시작하려는 두 Triton

깊이 데이터 처리: Intel RealSense D435는 RGB 및 깊이 데이터 스트림을 모두 제공했다. 나는 주로 깊이 데이터를 다뤘는데, 그것은 30Hz에서의 거리 측정값으로 이루어진 640x480 배열로 들어왔다. 첫 번째 과제는 이 잡음이 많은 깊이 데이터를 필터링하여 의미 있는 기하학적 정보를 추출하는 것이었다.

객체 감지 시도: 나는 다단계 감지 알고리즘을 실험했다. 바닥 수준의 객체를 식별하기 위해 깊이 이미지를 분할하고(벽, 천장 등은 걸러냄), 대략 0.3x0.3미터 발자국 크기 특성을 가진 객체를 찾는 데 어느 정도 성공했다. 나는 가장 뚜렷한 Triton 프로필을 식별하기 위해 에지 감지와 기하학적 분석을 사용해 보았지만, 결과는 엇갈렸다.

마커 인식 실험: 각 Triton 위에 있는 세 개의 반사 구체는 가장 유망한 감지 특징처럼 보였다. 나는 깊이 이미지에서 세 개의 밝은 점이 이루는 특징적인 삼각형 패턴을 식별하기 위해 블롭 검출 알고리즘을 실험했다. 통제된 조명 조건에서는 유망한 결과를 얻었지만, 일관되게 신뢰할 수는 없었다.

좌표 융합 연구: 나는 기본적인 칼만 필터 구현을 포함하여, 비전 기반 위치 추정값을 Optitrack 데이터와 융합하는 접근법을 연구했다. 개념은 Optitrack 데이터가 사용 가능할 때는 더 큰 가중치를 주되, 필요할 때는 비전에 의존하는 것이었지만, 연구실에서의 시간이 끝나기 전에 이것을 완전히 작동시키지는 못했다.

성능 문제: 이 모든 처리를 로봇의 제어 루프와 함께 실시간으로 실행되게 만드는 것은 어려운 일이었다. 나는 Jetson Nano의 처리 능력을 압도하지 않으면서 알고리즘을 약 10-15Hz로 실행하기 위한 최적화 접근법을 실험했다.

불행히도, 나는 이 컴퓨터 비전 작업을 완전히 마무리하기 전에 연구실을 떠나야 했다. 유망한 초기 결과도 있었고 깊이 센서 처리에 대해 많은 것을 배웠지만, 시스템을 완전히 신뢰할 수 있는 상태로 만들지는 못했다. 그것은 다른 사람들이 잠재적으로 이어받아 발전시킬 수 있는 흥미로운 연구 방향으로 남았다.

다음은 내가 컴퓨터 비전 알고리즘을 테스트하는 영상이다:

다음은 내 실험 동안 깊이 센서 뷰가 어떤 모습이었는지이다:

깊이 센서 통합 작업을 완료하지는 못했지만, 그 개념은 자율주행차 시나리오를 시뮬레이션하는 것과 같은 응용 분야에 유망함을 보여주었다. 그 차량들은 외부 인프라에만 의존하지 않고 서로를 인식할 필요가 있다. 내가 탐구하기 시작한 연구 방향은 연구실의 향후 작업에 잠재적으로 기여할 수 있었다.

문서화와 지식 보존

HCR Lab에 대한 나의 가장 중요한 기여 중 하나이자, 아마도 내가 가장 자랑스럽게 여기는 것은 모든 프로젝트 문서를 정리하고 보존한 일이었다. 내가 연구실에 합류했을 때, Triton 프로젝트의 지식은 여러 플랫폼과 형식에 흩어져 있었다. 핵심 정보는 다음 곳들에 분산되어 있었다:

  • 졸업한 서로 다른 학생들이 소유한 다양한 Google Drive 계정
  • 받은 편지함 깊숙이 묻혀 있던 오래된 이메일
  • 아무렇게나 흩어진 Dropbox 폴더
  • 여러 GitHub 저장소
  • 조직이 일관되지 않은 GitLab 저장소
  • 특정 사람만 해석할 수 있는 손글씨 메모

이렇게 분산된 문서는 엄청난 문제였다. 새로운 학생들은 어떻게 시작해야 하는지 알아내는 데만 몇 주를 보냈고, 사람들이 졸업하거나 연구실을 떠날 때마다 소중한 지식은 계속 사라지고 있었다.

나는 이 문제를 체계적으로 해결하기로 마음먹었다. 나는 Triton 프로젝트와 관련된 모든 문서, 코드, 영상, 메모를 찾아내는 데 수많은 시간을 쏟았다. 그리고 나서 그것들을 명확하고 논리적인 구조를 가진 중앙화된 GitLab 저장소에 모두 정리했다.

책상 위의 Triton 테이블 위의 여러 Triton (총 8개, 5개는 제작 중)

좋은 각도에서 선반 위에 놓인 Triton들

중앙화된 문서에는 다음이 포함되었다:

  • 조립 가이드: Triton을 처음부터 조립하기 위한 단계별 지침
  • 소프트웨어 설정: 개발 환경 설정을 위한 완전한 가이드
  • 코드 문서화: 명확한 설명이 포함된 주석 처리된 코드
  • 하드웨어 사양: 상세한 부품 목록, 배선도, PCB 설계
  • 문제 해결 가이드: 흔한 문제와 그 해결책
  • 비디오 튜토리얼: 나는 상세한 Optitrack 캘리브레이션 튜토리얼을 포함해 교육 영상을 제작하여 YouTube에 업로드했다:

또한 나는 향후 기여들이 체계적으로 정리되고 접근 가능하도록 문서화 표준도 확립했다. 내가 만든 저장소 구조는 연구실의 이후 모든 작업의 기초가 되었다.

기존 문서를 정리하는 것에 더해, 나는 지식 기반의 중요한 공백을 메우는 여러 개의 독창적인 가이드와 튜토리얼도 만들었다. 여기에는 새 연구실 구성원을 위한 상세한 설정 지침, 종합적인 문제 해결 가이드, 복잡한 절차의 비디오 안내가 포함되었다.

그 영향은 즉각적이고 오래 지속되었다. 새로운 학생들은 몇 주가 아니라 며칠 만에 업무에 익숙해질 수 있었다. 내가 만든 문서 저장소는 내가 떠난 지 수년이 지난 지금도 연구실에서 계속 사용되고 있다. 그것은 Triton 프로젝트의 단일 진실 स्रोत이 되었고, 미래 연구자들에게 수많은 시간/일을 절약해 주었다.

멘토링과 지식 전달

HCR Lab에서 보낸 시간의 가장 보람 있는 측면 중 하나는 다른 사람들을 멘토링하고 내가 얻은 지식을 나눌 수 있었던 기회였다. 내 작업이 진행되고 Triton 시스템에 더 익숙해지면서, 나는 새로운 팀원들을 교육하는 책임을 점점 더 맡게 되었다.

연구실 후임자 멘토링

학위를 마무리하고 eBay에서의 일을 계속하기 위해 결국 연구실을 떠날 준비를 하면서, 나는 떠난 뒤 Triton 프로젝트를 이어받을 두 사람을 철저히 훈련시켰다. 이것은 단순히 어떻게 작동하는지 보여주는 것이 아니라, 그들이 기본 원리를 진정으로 이해하여 계속 혁신할 수 있도록 하는 것이었다.

나는 몇 주 동안 그들과 긴밀히 일하면서 다음 내용을 함께 다뤘다:

  • PID 제어 시스템의 수학적 기초
  • 여러 로봇을 조정하기 위한 멀티프로세싱 아키텍처
  • 깊이 센서 통합 및 컴퓨터 비전 알고리즘
  • 문서화 시스템과 그 유지 관리 방법
  • 디버깅 기법과 흔한 실패 모드

지식 전달은 믿을 수 없을 정도로 철저했다. 우리는 함께 실제 디버깅 세션을 진행했고, 나는 그들이 기존 코드를 수정하고 확장하도록 했으며, 그들이 새 Triton을 처음부터 독립적으로 설정할 수 있게 되도록 확실히 했다.

고등학생 멘토링 프로그램

아마도 그보다 더 보람 있었던 것은 연구실의 아웃리치 프로그램을 통해 한 고등학생을 멘토링한 경험이었다. 이것은 교육의 형성기에 있는 누군가에게 로보틱스, 컴퓨터 과학, 연구를 소개할 수 있는 훌륭한 기회였다.

나는 다음을 다루는 포괄적인 커리큘럼을 설계했다:

컴퓨터 과학 기초:

  • 주 언어로 Python을 사용한 프로그래밍 개념
  • 객체지향 프로그래밍 소개
  • 알고리즘과 자료 구조에 대한 이해

로보틱스 개념:

  • 센서가 어떻게 작동하는지와 그것과 인터페이스하는 방법
  • 액추에이터 제어와 모터 시스템
  • 자율 시스템과 피드백 제어의 기초

ROS(로봇 운영 체제):

  • 발행/구독 메시징 시스템 이해
  • 노드와 서비스 생성
  • 실행 파일과 파라미터 서버 작업

실습 프로젝트 작업:

  • 우리는 Triton의 머리 부분 LED 시스템을 제어하는 ROS 서비스를 만드는 데 협력했다
  • 그녀는 우리의 기존 시스템과 통합되는 깔끔하고 문서화된 코드를 작성하는 법을 배웠다
  • 그녀가 만든 LED 제어 서비스는 Triton 코드베이스의 영구적인 일부가 되었다

이 멘토링을 특히 특별하게 만든 것은, 프로그래밍에 대해 사실상 아무것도 모르던 상태에서 능동적인 연구 프로젝트에 의미 있는 코드를 기여하는 수준으로 그녀가 성장하는 과정을 지켜본 것이었다. 그녀는 “변수(variable)가 무엇인가요?”라고 묻던 단계에서, 독립적으로 ROS 통신 문제를 디버깅하고 자신만의 서비스 구현을 작성하는 단계로 발전했다.

그녀가 개발한 LED 제어 시스템은 연구자들이 간단한 ROS 명령을 통해 Triton의 머리 LED 색상과 패턴을 쉽게 바꿀 수 있게 해주었다. 이것은 단순해 보일 수 있지만, ROS 아키텍처, 하드웨어 인터페이싱, 적절한 소프트웨어 설계 패턴을 이해해야 했다. 그녀의 기여는 오늘날에도 연구실에서 계속 사용되고 있다.

멘토링은 그녀에게 그랬던 것만큼이나 나에게도 교육적이었다. 그것은 내가 복잡한 개념들을 소화하기 쉬운 조각들로 나누도록 강요했고, 우리가 하고 있는 일의 기본 원리를 정말로 생각하게 만들었다. 다른 사람을 가르치는 일은 나를 더 나은 엔지니어이자 연구자로 만들어 주었다.

박사 연구와의 협업

내가 연구실에서 보낸 시간 중 가장 직업적으로 보람 있었던 부분 중 하나는 자율주행차 알고리즘을 연구 주제로 삼고 있던 박사과정 학생 Peng과 긴밀히 협업한 것이었다. 내가 Triton 시스템에 가한 소프트웨어 개선은 그의 박사 연구를 지원하는 데 도움이 되었다.

Peng의 연구는 자율주행차 시나리오를 시뮬레이션하기 위해 정밀하고 신뢰할 수 있는 다중 로봇 조정을 필요로 했다. 이동 제어와 다중 로봇 시스템을 개선하기 전에는 이러한 실험을 수행하는 것이 훨씬 더 어려웠다. 로봇들은 더 느렸고, 정확성도 떨어졌으며, 서로 효과적으로 협력할 수 없었다.

내 기여는 여러 영역에서 Peng의 연구에 도움이 되었다:

교차로 관리 연구: 개선된 PID 제어기와 다중 로봇 조정을 통해, Peng은 여러 “차량”(Triton)들이 움직임을 조정해야 하는 교차로 시나리오를 시뮬레이션할 수 있었다. 더 나은 타이밍과 위치 지정은 이러한 연구를 훨씬 더 실현 가능하게 만들었다.

차량 간 통신: 내가 개발한 멀티프로세싱 프레임워크는 Peng이 시뮬레이션된 차량들 사이의 통신 프로토콜을 구현하고 시험할 수 있게 해 주었다. 각 Triton은 다른 차량들과 조정하면서도 결정을 내릴 수 있었는데, 이는 자율주행차가 작동해야 할 방식과 유사했다.

SLAM 및 매핑 연구: 깊이 센서 통합 작업은 Peng의 동시적 위치추정 및 지도작성 연구를 위해 추가 데이터를 제공했다. 조정된 감지 능력을 가진 여러 로봇을 보유함으로써 보다 포괄적인 매핑 실험이 가능해졌다.

우리의 협업이 특히 가치 있었던 이유는 그것이 단순히 내가 그의 연구를 도와주는 것이 아니라, 진정한 파트너십이었기 때문이다. 자율주행차의 이론적 측면에 대한 Peng의 이해는 나의 실용적 구현에 도움을 주었다. 그의 피드백과 요구사항은 나로 하여금 시스템을 더 견고하고 더 유능하게 만들도록 밀어붙였다.

우리는 연구실에서 함께 많은 시간을 보내며 시나리오를 디버깅하고, 다양한 제어 전략에 대해 논의하고, Triton 플랫폼이 무엇을 할 수 있는지 탐구했다. Peng은 동료이자 친구가 되었고, 그와 함께 일하면서 나는 학술 연구가 실제로 어떻게 작동하는지에 대해 많은 것을 배웠다.

내가 구축한 시스템들은 Peng의 논문 작업의 유용한 일부가 되었다. 나의 실용적인 엔지니어링 기여가 자율주행차 기술 연구를 지원하는 것을 보는 것은 정말 보람 있었다. 그것은 견고한 엔지니어링과 연구가 함께 작동하여 유용한 결과를 만들어낼 수 있다는 내 관심을 더욱 강화해 주었다.

내가 연구실을 떠난 뒤에도 Peng과 나는 계속 연락을 주고받았다. 내가 떠난 후에도 내 작업이 중요한 연구에 계속 기여하고 있다는 사실은 매우 큰 보람이었다.

관점: LLM 이전 시대의 개발

이 모든 작업이 LLM 이전 시대의 소프트웨어 개발 중에 이루어졌다는 점을 언급할 가치가 있다. 이 모든 것은 2020년부터 2021년 사이, 주로 2021년에 진행되었으며, ChatGPT, Claude, Perplexity, 또는 Cursor IDE와 같은 AI 기반 개발 도구가 존재하기 전이었다.

코드의 모든 줄은 처음부터 작성되었고, 모든 알고리즘은 학술 논문과 교과서를 통해 조사되었으며, 모든 디버깅 세션은 print 문, 디버거, 체계적인 테스트와 같은 전통적인 방법을 포함했다. 좌표 변환이나 PID 튜닝 문제에 막혔을 때, 나는 단지 AI 어시스턴트에게 개념을 설명해 달라거나 문제 디버깅을 도와달라고 요청할 수는 없었다.

이로 인해 개발 과정은 훨씬 더 도전적이었지만 동시에 더 교육적이기도 했다. 나는 다음을 해야 했다:

모든 것을 수동으로 조사하기: PID 제어 이론을 이해하려면 교과서와 학술 논문을 읽어야 했다. 좌표 변환을 이해하려면 수학을 손으로 직접 풀어야 했다. 모든 개념은 구현하기 전에 완전히 이해되어야 했다.

AI 도움 없이 디버깅하기: 로봇이 예상치 못한 방향으로 움직이거나 목표물 주변에서 진동할 때, 나는 논리를 체계적으로 추적하고, 디버그 출력을 추가하고, 가설을 하나씩 시험해야 했다. 잠재적 문제를 제안하거나 오류 패턴을 해석하는 데 도움을 줄 AI는 없었다.

첫 원리에서 배우기: “로보틱스를 위한 Python에서 멀티프로세싱을 어떻게 구현하나요?“라고 빠르게 물어볼 수 있는 능력이 없었기 때문에, 나는 기저 개념들을 깊이 이해해야 했다. 이것은 나로 하여금 동시성 프로그래밍, 제어 시스템, 컴퓨터 비전에 대한 견고한 기초를 쌓도록 강제했다.

문서화는 매우 중요했다: 나중에 코드를 설명해 줄 AI에 의존할 수 없었기 때문에, 나는 매우 명확한 문서와 주석을 작성해야 했다. 이런 습관은 나중에 다른 사람들에게 지식을 전달할 때 매우 큰 도움이 되었다.

돌이켜보면, 현대의 AI 도구가 개발의 많은 측면을 가속화했겠지만, 그것들 없이 일한 경험은 나로 하여금 더 깊은 문제 해결 능력과 기저 시스템에 대한 더 철저한 이해를 발전시키도록 만들었다. 오늘날의 개발 도구를 사용할 수 있었다면 이 프로젝트가 얼마나 달라졌을지 생각해 보면 참 흥미롭다.

떠나기로 한 어려운 결정

HCR Lab에서 일하는 것이 아무리 좋았어도, 2021년 말 무렵 나는 많은 학생들이 마주하는 어려운 결정에 직면했다. 여러 기회와 책임 사이의 균형을 맞추는 일이었다. 나는 동시에 eBay에서 소프트웨어 엔지니어로 풀타임으로 일하고 있었고, Mines에서 컴퓨터과학 학위를 마무리하고 있었으며, HCR Lab의 연구에도 기여하고 있었다.

eBay 기회는 매우 중요했다. 그것은 나의 첫 번째 주요 소프트웨어 엔지니어링 역할이었고, 매우 값진 산업 경험을 제공했으며, 안정적인 수입도 안겨주었다. 그러나 풀타임 업무를 유지하고, 학위를 마치고, 연구에 의미 있게 기여하는 것을 동시에 해내려는 시도는 단순히 지속 가능하지 않았다. 무언가를 내려놓아야 했다.

내가 더 많은 연구실 작업에 집중하기 위해 수강 과목 수를 줄이는 가능성에 대해 Dr. Zhang에게 접근했을 때, 그는 강하게 반대했다. 그의 판단은 타당했다. 학위를 마치는 것이 우선순위여야 하고, eBay에서의 산업 경험은 내 경력 개발에 가치가 있을 것이라는 이유였다. 그는 연구에 집중하기 위해 수업을 줄이는 것이, 유혹적이기는 해도, 장기적으로는 최선의 결정이 아닐 수 있다고 보았다.

그래서 2021년 9월, 연구실에서 약 8개월 동안 집중적으로 일한 뒤, 나는 학위와 eBay에서의 업무를 완료하는 데 집중하기 위해 연구 조교 역할에서 물러나기로 하는 어려운 결정을 내렸다. 당시 내가 내렸던 전문적 결정들 중 가장 힘든 것 중 하나였다.

공식적으로 연구실을 떠난 뒤에도, 내가 구축한 시스템들에 대해 누군가 도움이 필요할 때마다 나는 계속 지원을 제공했다. 필요에 따라 문서를 업데이트했고, 디버깅 관련 질문에 답했으며, 원격으로 문제 해결을 도왔다. 내가 쌓아온 연결과 프로젝트 성공에 대한 나의 투자는 더 이상 공식적으로 팀의 일부가 아니라는 이유만으로 사라지지 않았다.

회고와 되돌아보기

이제 2025년인 지금, 4년이 지난 시점에서 나는 그 시간을 복잡한 감정으로 회상하고 있다. 내 경력 경로는 나를 웹 개발과 AI/ML 엔지니어링의 깊은 세계로 이끌었고, 이 분야들은 믿을 수 없을 만큼 보람 있었으며 성장과 영향력 측면에서 엄청난 기회를 제공했다.

Top-down view of Tritons on table

하지만 마음 한편에는 “만약에"라는 생각이 있다. 로보틱스는, 솔직히 지금도 여전히, 나의 진정한 열정이었다. 물리적 시스템과 함께 일하면서, 내 코드가 실제 세계의 움직임과 행동으로 변환되는 것을 보는 데에는 웹 개발이나 심지어 AI 작업이 완전히 대체할 수 없는 무언가가 있다.

나는 때때로 내가 다른 길을 택했다면 무엇이 일어났을지 궁금해한다. 로보틱스 연구에 계속 머무를 방법을 찾았다면 어땠을까? 학부 학위를 마친 직후 바로 대학원에 진학했다면 어땠을까? 연구실 작업을 산업 경험보다 우선시하기로 선택했다면 어땠을까?

하지만 동시에 나는 모든 길에는 장단점이 있다는 것도 인식한다. 웹 개발과 AI에서 내가 개발한 기술들은 믿을 수 없을 만큼 가치 있었다. 산업 경험은 대규모 소프트웨어 엔지니어링, 사용자 경험 설계, 그리고 수백만 명이 사용하는 제품을 만드는 실질적인 도전들에 대해 나에게 가르쳐 주었다. 이러한 경험들은 전체적으로 나를 더 나은 엔지니어로 만들어 주었다.

HCR Lab에서 했던 작업은 오늘날 내가 문제에 접근하는 방식에 계속 영향을 미친다. PID 제어 시스템에 필요한 체계적 사고는 소프트웨어 시스템에서 피드백 루프를 설계하는 방식에 나타난다. 내가 개발한 문서화 및 지식 보존 기술은 그 이후의 모든 역할에서 매우 큰 자산이 되었다. 멘토링하고 가르친 경험은 내가 주니어 개발자들과 협업하고 팀의 지식 공유에 기여하는 방식에 영향을 주었다.

무엇보다도, 그 경험은 내가 실제 세계에 영향을 미치는 도전적인 기술 문제를 다룰 때 가장 잘 성장한다는 것을 가르쳐 주었다. 그것이 로봇 이동 알고리즘을 최적화하는 일이든, 사용자들이 목표를 달성하도록 돕는 AI 시스템을 구축하는 일이든, 만족은 중요한 어려운 문제를 해결하는 데서 온다.

지속적인 영향

HCR Lab 경험을 돌아보면, 비교적 짧은 시간에 내가 얼마나 많은 것을 이루었는지에 놀라게 된다. 내가 구축한 시스템들은 Triton 플랫폼이 작동하는 방식을 근본적으로 바꾸었고, 그 개선 사항들 중 많은 부분은 오늘날에도 여전히 사용되고 있다. 내가 만든 문서 저장소는 전체 프로젝트의 지식 기반이 되었다. 내가 형성한 멘토링 관계는 함께 일했던 사람들에게 오래도록 영향을 남겼다.

그러나 아마도 가장 중요한 것은, 이 경험이 내가 진정으로 열정을 가진 문제에 몰두할 때 내가 얼마나 많은 일을 해낼 수 있는지를 보여주었다는 점일 것이다. 그 8개월 동안 나는:

  • 플랫폼을 제한하고 있던 로봇 이동 제어 시스템을 개선했다
  • 처음부터 다중 로봇 조정 시스템을 구축했다
  • 컴퓨터 비전과 센서 융합 기능을 통합했다
  • 포괄적인 문서화 및 지식 관리 시스템을 만들었다
  • 여러 사람을 멘토링하고 지식 이전을 도왔다
  • 자율주행 차량에 대한 박사 과정 수준의 연구를 지원했다

하지만 이것은 단지 기술적 성취에 관한 것만은 아니었다. 물론 그것들도 나에게는 의미가 있었다. 그것은 끈기와 체계적인 사고가 있다면, 학부생으로서도 유용한 기여를 할 수 있다는 것을 배우는 일이었다.

미래와 로보틱스

내 경력은 다른 방향으로 나아갔지만, 로보틱스에 대한 나의 열정은 줄어들지 않았다. 나는 여전히 이 분야의 발전을 따라가고 있고, 로봇 학습과 자율 시스템의 진전에 큰 기대를 하고 있으며, 여가 시간에 가끔 개인 로보틱스 프로젝트를 진행한다.

미래가 어떻게 될지는 누가 알겠는가? 내가 AI와 머신러닝에서 개발하고 있는 기술은 로보틱스와 점점 더 관련이 깊어지고 있다. 내가 쌓아온 산업 현장 경험은 견고하고 확장 가능한 시스템을 구축하는 방법을 가르쳐 주었다. 아마도 언젠가는 내 경험의 서로 다른 흐름들이 예상치 못한 방식으로 하나로 모이는 미래가 있을지도 모른다.

지금으로서는 HCR Lab에서 보낸 시간과 그곳이 제공해 준 경험에 감사하고 있다. 그것은 내 기술적 역량과 내가 어떤 종류의 일을 가장 보람 있게 느끼는지에 대한 이해 모두를 형성한 형성기였다. 가끔 그곳이 그립기도 하지만, 내가 배운 교훈과 개발한 접근 방식이 내가 하는 모든 일에 계속 영향을 미치고 있다는 것을 알고 있다.

트리톤 로봇들은 여전히 그곳에 있고, 여전히 연구자들을 지원하며, 여전히 중요한 작업을 가능하게 하고 있다. 그리고 그것은 참으로 멋진 일이다.