내 로봇 공학 연구 장

Table of Contents

이 글은 제가 2015년FRC(퍼스트 로보틱스 컴피티션)을 고등학교 시절에 접하면서 로봇 공학에 대한 열정을 발견한 것부터, 2021년 2월부터 2021년 9월까지 콜로라도 스쿨 오브 마인스인간 중심 로보틱스(HCR) 연구실에서 연구조교로 일한 시기까지의 로봇 공학 여정을 회고한 글입니다. 참고로 2022년 말 이후로 HCR 연구실은 콜로라도 스쿨 오브 마인스에서 매사추세츠 대학교 앰허스트로 옮겨 갔으며, 사이트도 hcr.mines.edu에서 hcr.cs.umass.edu로 이전되었습니다.

배경

저는 2018년 가을 학기에 콜로라도 스쿨 오브 마인스에서 학부 공부를 시작했습니다. 전공은 로봇 및 지능형 시스템에 중점을 둔 컴퓨터 과학이었고, 2022년 봄에 졸업했습니다.

운이 좋게도 저는 일찍 제 열정을 찾을 수 있었습니다. 고등학교 시절 저는 무엇을 좋아하고 무엇을 잘할 수 있는지를 알아내기 위해 많은 시간을 보냈습니다. 여러 번의 시행착오 끝에 컴퓨터 과학이 제 열정임을 알게 되었습니다. 또한 이 시기에 코드로 무언가를 만드는 것에 대한 압도적인 사랑을 발견했습니다.

마인스에서 저는 장 하오 박사 지도 아래 콜로라도 스쿨 오브 마인스의 인간 중심 로보틱스(HCR) 연구실에서 일할 기회를 얻었습니다. 장 박사님을 처음 만난 것은 2020년 봄, 그의 수업 “Human Centered Robotics”(CSCI473)를 통해서였고, COVID와 수업의 혼란이 지나간 뒤 2021년 초봄에 그의 연구실에서 일하게 되었습니다.

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

마인스의 인간 중심 로보틱스(CSCI473)는 제 학부 경험 중 저에게 깊은 영향을 준 몇 안 되는 수업 중 하나였습니다. 수업은 장 하오 박사님께서 가르치셨습니다. 이 수업의 학점은 단 세 개의 프로젝트로만 구성되어 있었고, 각 프로젝트는 로보틱스의 핵심 개념을 소개하는 도전적인 문제를 제시했습니다. 이 프로젝트들은 다음으로 구성되어 있었습니다:

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

로봇 운영 체제(ROS) 학습

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

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

과제 1과 2에서는 개발 환경을 설정하고 Gazebo 소개 튜토리얼을 따라 하면 되었습니다. 여기에는 다음이 포함되었습니다:

반면 과제 3는 진짜 도전이었습니다. 과제는 turtlesim을 사용하여 거북이가 마인스의 “M” 로고를 그리게 하는 것이었습니다:

겉으로 보기에는 단순해 보였지만 이 과제는 생각보다 더 어려웠습니다. 이 프로젝트는 결국 저에게 개방 루프(Open-Loop)와 폐쇄 루프(Closed-Loop) 시스템의 개념을 소개해 주었습니다. 전체 프로젝트 설명은 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를 확인하세요.

골격 기반 표현을 사용한 인간 행동 이해

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

이 프로젝트에서 학생들은 여러 개의 골격 기반 표현(Deliverable 1)을 구현하고, 공개 활동 데이터셋(킨넥트 V1 센서로 수집된)을 사용하여 인간 행동을 분류하기 위해 서포트 벡터 머신(SVM)(Deliverable 2)을 사용할 것입니다. 또한 학생들은 Deliverable 3에서 LATEX를 사용하여 표준 IEEE 로보틱스 학회 형식에 따른 보고서를 작성해야 합니다.

이 프로젝트는 도전적이었지만 두 번째 프로젝트만큼 어렵지는 않았습니다. 주요 목표는 Kinect V1 센서 데이터(데이터는 MSR Daily Activity 3D Dataset에서 가져옴)와 서포트 벡터 머신을 사용하여 특정 인간 행동/동작을 분류하는 것이었습니다. 전체 프로젝트 설명은 csci473-p3.pdf를 확인하거나, 이 프로젝트와 제 해결 방법에 대해 더 알고 싶다면 Predict Human Actions Using LIBSVM 블로그 게시물을 참조하세요.

CSCI473 결론

CSCI473은 제가 마인스에서 학부 시절에 수강한 수업 중 최고 또는 그 중 하나였습니다. 이 모든 프로젝트들은 저에게 많은 것을 가르쳐 주었고, 이력서에 반영하고 참조할 수 있는 멋진 프로젝트 목록을 갖게 해주었습니다. 또한 저는 시험을 잘 보는 편은 아니었지만 프로젝트를 완수하는 데는 탁월했기 때문에 이 수업이 제가 제 자리를 찾았다고 느낀 첫 수업이기도 했습니다. 이 수업을 통해 장 하오 박사님을 만나게 되었고, 결국 장 박사님은 저를 마인스 인간 중심 로보틱스(HCR) 연구실의 연구조교로 채용하는 데 도움을 주셨습니다.

CS 현장 세션 (2020년 여름)

CG_GUI_19

2020년 여름, CSCI473을 마치고 HCR 연구실에 합류하기 전 사이에 저는 콜로라도 스쿨 오브 마인스의 컴퓨터 과학 학부 과정의 일환으로 CSCI370 또는 “고급 소프트웨어 공학(Advanced Software Engineering)“을 수강했습니다. CSCI370은 학생들이 기업을 위해 소프트웨어 관련 솔루션을 설계, 구현 및 문서화하게 하는 코스입니다. 수업은 학생들이 교과 과정 지식을 실제 컴퓨터 과학 문제에 적용할 수 있게 해줍니다. 코스에 대해 더 알고 싶다면 여기를 참조하세요.

이 수업에서는 어떤 프로젝트/기업에서 작업할지 스스로 결정할 수 있습니다. 수업은 각 프로젝트와 회사를 자세히 설명한 PDF를 제공했습니다. 결국 저는 Lunar Outpost라는 회사가 게시한 “향상된 달 탐색을 위한 실시간 바퀴 미끄럼 감지 및 오차 보정(Real Time Wheel Slip Detection and Error Corrections for Enhanced Lunar Navigation)“이라는 프로젝트에 참여하기로 결정했습니다. 이름이 길어서 이 프로젝트에 “바퀴 미끄럼 감지(Wheel Slippage Detection)“라는 별칭을 붙이겠습니다.

문제

Lunar Outpost는 자율 달 탐사 로버를 만들려고 하는 스타트업입니다. 달 표면에는 바퀴 미끄럼을 유발하는 많은 달 먼지가 존재합니다. 이는 자율 시스템이 실제 위치 추적을 잃게 할 수 있기 때문에 이상적이지 않습니다. 지구에서는 GPS 데이터를 사용하여 바퀴 미끄럼으로 인해 발생하는 오프셋을 보정함으로써 이를 해결합니다. 그러나 GPS는 지구를 계속 돌며 고유 신호를 전송하는 30개 이상의 항법 위성이 있어야만 작동합니다. 달에는 현재 그런 GPS가 존재하지 않습니다. 이를 알기 때문에 GPS 외의 다른 방법을 사용하여 바퀴 미끄럼을 감지해야 합니다. 프로젝트 문제에 대한 보다 자세한 보고서는 여기에서 볼 수 있습니다.

이 프로젝트는 단순한 프로젝트가 아니었기 때문에 팀으로 진행해야 했습니다. 팀은 다섯 명의 콜로라도 스쿨 오브 마인스 학생으로 구성되어 있었습니다:

이 프로젝트는 단순한 프로젝트가 아니었기 때문에 팀으로 진행해야 했습니다. 이 팀은 메흐메트 일마즈(저), 케인 브루스, 브레이던 오’캘러헌, 리암 윌리엄스, 케빈 그랜트로 구성되었습니다.

이 프로젝트는 ROS, C++, Python, 리눅스, 라즈베리 파이, 아두이노에 대한 지식을 요구했습니다. 우리 대부분은 이러한 기술 중 하나 이상에 대한 경험이 있었지만, 저는 Spring 2020 학기 동안 Human Centered Robotics(CSCI473) 수업에서 ROS를 사용한 경험이 있어서 유일하게 ROS 경험이 있는 사람이었습니다. 이 때문에 초기에 저는 모두가 ROS와 거기에서 개발하는 방법을 숙지하도록 도왔습니다.

도전 과제

이 프로젝트에는 많은 도전 과제가 있었습니다. 하지만 우리가 직면한 가장 큰 도전은 실제 세계 로봇을 테스트할 수 없었다는 것입니다. 이는 모든 것이 원격으로 전환되고 루나 아웃포스트의 실험실/건물에서 작업할 수 없게 만든 코로나19 때문이었습니다. 이 때문에 우리는 시뮬레이션을 사용해야만 했습니다.

또한, 우리는 WVU 내비게이션 연구실의 일부 학술 연구를 검토하여 루나 아웃포스트의 사용 사례에 대해 휠 슬립 문제를 어떻게 해결할 수 있을지 아이디어를 얻었습니다. 학부 2학년 및 3학년이었던 우리에게는 이것이 예상보다 더 어려운 일이었습니다.

또 다른 도전은 이 프로젝트에 투자할 수 있는 시간의 양이었습니다. CSCI370은 한 달짜리 수업입니다. 그러나 문제 자체는 많은 기업과 학자들이 수십 년간 해결/완벽화하려고 시도해 온 거대한 문제입니다. 그래서 한 달은 이 문제를 해결하기에는 턱없이 부족합니다. 그래도 이러한 모든 어려움에도 불구하고 우리는 밀고 나가서 결과물을 전달했습니다.

결론

모든 연구와 개발을 거친 후, 우리는 디지털로 적절한 달 표면 물리학을 시뮬레이션하는 것이 거의 불가능하다는 결론을 내렸습니다. 따라서 시뮬레이션에서 이 알고리즘을 실제로 시도하는 것은 좋지 않으며 우주 및 달에서의 휠 슬립 감지에 대한 의미 있는 연구를 산출하지 않을 것입니다. 우리는 모래와 같은 물질과 허스키 로봇과 같은 실제 하드웨어를 사용하여 적절한 테스트 환경을 설정하는 것이 이러한 유형의 연구에 훨씬 더 중요하다는 결론을 내렸습니다. 우리는 휠 슬립 감지 코드를 ROS 노드로 작동하도록 업데이트했으며, 그것은 제대로 작동했고 실제 하드웨어로 쉽게 가져와 테스트할 수 있었습니다. 이 프로젝트를 통해 저는 리더십 역할을 맡고 동료들에게 ROS 개발을 교육했으며, 파이썬, ROS, Gazebo에 대한 경험을 얻으면서 이전에 접해본 적 없는 복잡한 문제를 다뤘습니다. 가장 중요한 점은 이 경험이 제 로봇공학에 대한 열정을 더욱 확고히 했고 이 분야에서 연구를 계속하고자 하는 열망을 강화시켜 제 로봇공학 여정의 다음 단계를 준비하게 했다는 것입니다.

HCR 연구실에서 시작하기

CSCI473을 마치고 2020년 여름의 CS 현장 세션과 2020년 가을 학기를 마친 후, 저는 로봇공학 연구를 추구하기로 결정했습니다. CSCI473과 CS 현장 세션 모두에서 매우 좋은 경험을 해서 HCR 연구실에서 연구를 하고 싶다는 결심을 하게 되었습니다. 이전 해에 장 박사님을 만난 적이 있었기 때문에 2021년 1월에 그에게 이메일을 보내 연구실에 어떤 기회가 있는지 물어보기로 했습니다. 약 2주 정도 내에 장 박사님은 관심을 보였고, 연구 옵션을 제시해 주셨으며 연구실에서의 역할을 제안해 주셨습니다. 그래서 저는 2021년 2월에 연구실에서 일하기 시작했습니다.

소개 비디오

아래는 제가 HCR 연구실에서 활동한 지 몇 달 후에 녹화한 소개 비디오입니다. 2021년 5월에 녹화되었으며 2021년 여름 동안 HCR 연구실에서 중점적으로 다룰 연구를 다룹니다:

내 프로젝트

HCR 연구실에서 지내는 동안 저는 주로 트리톤 프로젝트에 집중했습니다. 트리톤 프로젝트는 콜로라도 스쿨 오브 마인즈의 휴먼 중심 로보틱스 연구실에서 개발한 모바일 로봇입니다. 트리톤은 삼각형 형태의 옴니휠 지상 로봇으로 엔비디아의 제트슨 나노로 구동됩니다.

트리톤은 간단히 요약하면 다음 부품들로 구성되어 있었습니다:

  • 엔비디아 제트슨 나노
  • 엔비디아의 씨드 스튜디오 A205 캐리어 보드
  • 아두이노 메가
  • 64GB 마이크로 SD 카드
  • 맞춤형 3D 프린트 바디
  • 3개의 메카넘 휠
  • 1개의 AR 배터리
  • 최적화된 전원 분배 및 배선을 위한 맞춤형 회로
  • 인텔 리얼센스 D435 카메라
  • 몇 개의 LED

이 로봇은 교육 목적으로 2018-2020년경에 설계되고 제작되었습니다. 제가 합류했을 때 트리톤은 꽤 확립되어 있었고, 연구실에서는 새로운 버전을 만들 것을 고려하고 있었습니다. 그러나 트리톤의 주요 문제는 소프트웨어였습니다. 트리톤은 기본적인 의미에서는 이동하고 충전하며 작동할 수 있었지만 실제로 지능적으로 무엇인가를 하는 수준은 아니었고, 더 고급 동작을 수행하는 능력도 부족했습니다.

배터리 충전기 설정 테스트 구역 레이아웃
초기 테스트 단계의 트리톤들 선반 위의 트리톤들

이 문제를 해결하기 시작하기 위해 연구실은 트리톤을 추적할 수 있는 구역을 설정했습니다. 이를 위해 그들은 바닥에서 약 6-7피트 높이에 정사각형 형태로 배치된 8대의 옵티트랙 플렉스(적외선) 카메라로 2미터 x 2미터 영역을 만들었습니다.

영역 I1 영역 I2

이 영역을 구축한 것과 더불어 각 트리톤의 몸체 상단에는 회색 구체 세 개가 부착되어 있었습니다.

이 설정을 통해 우리는 관심 영역 내의 트리톤의 정확한 좌표(미터 단위)를 얻을 수 있는 자체 소규모 GPS 시스템을 효과적으로 구축했습니다. 옵티트랙 적외선 카메라와 옵티트랙 회색 구체를 삼각형 형태로 사용함으로써, 우리는 관심 영역 내의 트리톤의 정확한 좌표를 정확히 찾아낼 수 있었습니다. 이를 통해 더 나은 이동 정확성을 위한 폐쇄 루프 시스템을 적용할 수 있었습니다.

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

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

원래 솔루션이 실제로 작동하는 장면을 기록하지 않았기 때문에, 저는 옛 이동 로직이 어떻게 작동했는지 보여주기 위해 이 간단한 애니메이션을 만들었습니다. 이를 알고 난 후, 이 방법의 문제점은 무엇일까요?

  1. 매우 느립니다
  2. 특정 지점으로 가기 위해 로봇이 많은 공간을 차지하게 만듭니다. 이로 인해 여러 대의 트리톤이 동시에 이동할 때 이 솔루션을 사용하기 어려웠습니다.

그렇다면 왜 이러한 동작이 발생했을까요? 문제는 트리톤이 먼저 회전하여 alpha를 변경하면서 목표 지점을 향할 때까지 특정 허용 오차 내에서 방향을 맞추려 한다는 것입니다. 그런 다음 전속력으로 앞으로 돌진하고, theta가 목표로부터 특정 값만큼 벗어나면 멈추고 다시 회전을 시작하여 alpha가 목표 목표에 대해 허용 가능한 범위 내로 들어오도록 합니다. 그런 다음 다시 전속력으로 돌진하고 이러한 과정을 목표 지점에 도달할 때까지 계속합니다. 또한 목표 지점에 가까워질수록 회전 및 돌진 속도가 훨씬 느려져서 초과 이동을 하지 않도록 했습니다. 이로 인해 트리톤은 부자연스러운 움직임을 보였고, 목표 지점에 도달하는 데 시간이 너무 오래 걸렸으며 특정 목표 지점에 도달하기 위해 너무 많은 공간이 필요했습니다. 이러한 모든 문제와 이 기능이 트리톤 프로젝트 개발에 얼마나 중요한지를 고려했을 때, 제가 HCR 연구실에서 일하기 시작했을 때 첫 번째 과제는 트리톤이 목표 지점으로 더 잘 네비게이션할 수 있도록 보다 효과적인 솔루션을 개발하는 것이었습니다.

이를 알고 저는 이 문제를 해결할 수 있는 최선의 방법을 찾기 위해 많은 시간을 연구하는 데 보냈습니다. 아이러니하게도 저는 마인스에서 피드백 제어 시스템 소개 (EENG307)라는 수업을 듣고 있었습니다. 그 수업 초반에 우리는 개방 루프 제어기폐쇄 루프 제어기의 개념을 배웠습니다. 이를 알고 난 후, 그 수업 교수님과 똑똑한 룸메이트와의 논의 끝에 트리톤을 목표 지점으로 이동시키는 이 문제는 폐쇄 루프 시스템 문제라는 것이 분명해졌습니다.

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

이제 광범위한 테스트와 연구 후, 저는 트리톤을 위한 두 가지 뚜렷한 제어기 접근법을 개발했습니다:

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

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

  • 거리 제어기: 목표까지의 유클리드 거리를 계산하고 선형/전후 속도를 결정하기 위해 비례 이득을 적용했습니다
  • 세타 제어기: 로봇의 현재 헤딩과 목표로 향하는 원하는 헤딩 사이의 각 오차를 계산하고 회전 속도를 위해 별도의 비례 이득을 적용했습니다

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

이로 인해 트리톤은 목표를 향해 자연스럽게 회전하면서 동시에 전진하여 매끄러운 곡선 경로를 만들었습니다. 주요 장점은 로봇이 항상 목적지를 향하도록 전면을 유지한다는 점으로, 이는 카메라 기반 응용에 결정적이었습니다.

방법 2: X-Y 좌표 제어기

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

  • X 제어기: X 좌표 오차에 따라 동서 이동을 직접 제어
  • Y 제어기: Y 좌표 오차에 따라 남북 이동을 직접 제어

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

방법 #1에 대해서는 제 Move Turtle (TurtleSim) 블로그에서 이 방법을 완전한 세부사항으로 다루었습니다. PID 제어기가 일반적으로 어떻게 동작하는지와 방법 #1이 어떻게 작동하는지에 대한 모든 세부사항을 얻으려면 이 블로그를 꼭 읽어보시길 강력히 권합니다. 저는 방법 #1을 ROS의 TurtleSim을 사용해 개발한 다음 그 코드를 Triton으로 옮기고 보다 실제 환경을 고려해 업데이트했습니다.

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

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

단순한 점대점 이동에 이전에는 30-45초가 걸렸던 것이 이제는 약 8-12초 정도로 줄었습니다. 더 중요한 것은 Triton이 이제 좁은 공간에서 더 효율적으로 내비게이션할 수 있게 되어 다중 로봇 시나리오에 유용해졌다는 점입니다.

개발 도전과 디버깅

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

좌표계 변환: 가장 까다로운 측면 중 하나는 좌표 변환을 올바르게 맞추는 것이었습니다. Optitrack 시스템은 자체 좌표계에서 데이터를 제공했고, 로봇은 로컬 좌표계를 가졌으며, 저는 이들 사이를 정확하게 변환해야 했습니다. 초기 구현에서는 회전 행렬 계산을 혼동해서 로봇이 잘못된 방향으로 움직이는 문제가 있었습니다.

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

진동 및 안정성 문제: 초기 구현들은 로봇이 목표를 지나치고 앞뒤로 흔들리는 진동 문제를 겪었습니다. 이를 통해 PID 제어기에서 미분 항의 중요성과 적절한 이득 튜닝의 필요성을 배웠습니다. 결국 대부분의 응용에서 시스템의 고유 감쇠가 충분했기 때문에 전체 PID보다는 신중하게 조정된 이득을 가진 주로 비례 제어를 사용하기로 결정했습니다.

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

다중 트라이튼 제어 시스템

단일 Triton 이동 문제를 해결한 후, 연구실의 다음 과제는 여러 Triton이 동시에 함께 작동하도록 하는 것이었습니다. 이것은 제가 중점적으로 다룬 주요 분야 중 하나가 되었으며 프로젝트에 상당한 기여를 하게 되었습니다.

원래 시스템은 한 번에 한 대의 Triton만 제어할 수 있어서 연구 가능성을 심각하게 제한했습니다. 연구실은 다수의 자율 차량들이 서로 통신하여 교통 흐름을 최적화하거나 더 나은 SLAM(동시적 위치추정 및 지도작성) 지도를 만드는 것과 같은 시나리오를 시뮬레이션하기를 원했습니다.

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

다중 로봇 아키텍처 설계

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

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

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

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

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

동기화 메커니즘: 여러 로봇이 조정이 필요할 때(예: 충돌 회피) 충돌을 방지하기 위해 로봇이 작업 공간의 특정 영역에 대한 배타적 접근을 요청할 수 있도록 세마포어와 락을 구현했습니다.

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

다중 트라이튼 교차 테스트 초기 다중 트라이튼 설정

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

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

  • 차량 간 통신 시나리오
  • 장애물 회피를 포함한 협조적 경로 계획
  • 군집 로보틱스 행동
  • 다중 에이전트 SLAM 지도 작성
  • 대형 제어 및 추종 행동

다음은 다수의 Triton이 동시에 실행될 때 연구실 설치가 어떻게 보였는지입니다:

녹색 그리드 위의 로봇들 로봇 그리드 설정

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

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

여기 단일 로봇 제어에서 다중 로봇 조정까지 Triton들의 동작을 보여주는 재생목록이 있습니다: Tritons in Action 재생목록

깊이 센서 통합 및 좌표 보정

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

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

  1. 오차 보정: Optitrack 시스템에 보정 드리프트나 일시적 가림 현상이 발생할 경우, 로봇들은 서로의 위치를 시각적으로 확인하여 정확한 좌표계를 유지할 수 있습니다.

  2. 강화된 SLAM: 깊이 센서를 장착한 다수의 로봇이 함께 작업함으로써 중복된 데이터 포인트로 훨씬 더 풍부한 환경 지도를 생성할 수 있습니다.

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

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

  • 특징적인 삼각형 형태와 반사 구체 마커를 사용하여 다른 트리톤을 감지
  • 깊이 데이터를 사용하여 상대 위치와 방향을 계산
  • 이러한 측정값을 옵티트랙 데이터와 비교하여 불일치 식별
  • 정확성을 유지하기 위해 실시간으로 좌표계를 조정할 가능성

컴퓨터 비전 실험

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

컴퓨터 비전 테스트를 위해 서로 마주보고 있는 두 트리톤 트리톤 카메라의 클로즈업
테스트를 위해 얼굴을 맞대고 있는 두 트리톤
서로 마주보고 있는 두 로봇 경주를 앞둔 두 트리톤

깊이 데이터 처리: 인텔 리얼센스 D435는 RGB와 깊이 데이터 스트림을 모두 제공했습니다. 나는 주로 30Hz에서 640x480 배열의 거리 측정값으로 제공되는 깊이 데이터로 작업했습니다. 첫 번째 도전 과제는 이 시끄러운 깊이 데이터를 필터링하여 의미있는 기하학적 정보를 추출하는 것이었습니다.

객체 검출 시도: 나는 다단계 검출 알고리즘을 실험했습니다. 바닥 수준의 물체를 식별하기 위해 깊이 이미지를 분할(segmentation)하는 데 어느 정도 성공했으며(벽, 천장 등은 필터링), 대략 0.3x0.3 미터 정도의 발자국을 가진 적절한 크기 특성을 가진 물체를 찾았습니다. 나는 엣지 검출과 기하학적 분석을 사용하여 특징적인 트리톤 프로파일을 식별하려고 시도했으나 결과는 엇갈렸습니다.

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

좌표 융합 연구: 나는 비전 기반 위치 추정치를 옵티트랙 데이터와 융합하는 접근법을 연구했으며, 기본적인 칼만 필터 구현을 포함했습니다. 개념적으로는 옵티트랙 데이터가 사용 가능할 때 더 큰 가중치를 부여하고 필요할 때 비전으로 대체하는 것이었지만, 연구실을 떠나기 전까지 이 시스템을 완전히 작동시키지는 못했습니다.

성능 문제: 이러한 모든 처리를 로봇의 제어 루프와 함께 실시간으로 실행하는 것은 어려웠습니다. 나는 제트슨 나노의 처리 능력을 과도하게 사용하지 않으면서 알고리즘을 약 10-15Hz로 실행하기 위한 최적화 방법들을 실험했습니다.

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

여기 내가 컴퓨터 비전 알고리즘을 테스트한 동영상이 있습니다:

실험 중 깊이 센서 뷰가 어떻게 보였는지는 다음과 같습니다:

깊이 센서 통합 작업을 완료하지는 못했지만, 이 개념은 차량들이 외부 인프라에만 의존하지 않고 서로를 인식해야 하는 자율주행 자동차 시나리오와 같은 응용 분야에 가능성을 보였습니다. 내가 시작한 연구 방향은 향후 연구실의 작업에 기여할 수 있을 것입니다.

문서화 및 지식 보존

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

  • 졸업한 서로 다른 학생들이 소유한 다양한 구글 드라이브 계정
  • 받은편지함에 묻혀 있는 오래된 이메일들
  • 무작위 드롭박스 폴더들
  • 여러 깃허브 저장소
  • 구성 방식이 일관되지 않은 깃랩 저장소들
  • 특정 사람만 해독할 수 있는 손으로 쓴 메모들

이렇게 단편화된 문서는 큰 문제였습니다. 신입 학생들은 단순히 시작하는 방법을 알아내는 데 몇 주를 보내야 했고, 사람들이 졸업하거나 연구실을 떠날 때마다 귀중한 지식이 계속 유실되고 있었습니다.

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

책상 위의 트리톤 테이블 위의 여러 트리톤 (총 8대, 5대가 제작 중)

멋진 각도로 선반에 놓인 트리톤들

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

  • 조립 안내서: 트리톤을 처음부터 조립하기 위한 단계별 지침
  • 소프트웨어 설정: 개발 환경을 설정하기 위한 완전한 안내서
  • 코드 문서화: 명확한 설명이 달린 잘 주석 처리된 코드
  • 하드웨어 사양: 상세한 부품 목록, 배선도 및 PCB 설계
  • 문제 해결 가이드: 일반적인 문제와 그 해결책
  • 비디오 튜토리얼: Optitrack 보정 튜토리얼을 포함하여 교육용 동영상을 유튜브에 제작 및 업로드

나는 또한 향후 기여들이 조직적이고 접근 가능하도록 문서화 기준을 마련했습니다. 내가 만든 저장소 구조는 이후 연구실에서 수행된 모든 작업의 기반이 되었습니다.

기존 문서를 정리하는 것뿐만 아니라, 지식 기반의 중요한 공백을 채우는 여러 원본 가이드와 튜토리얼도 만들었습니다. 여기에는 신입 연구실 구성원을 위한 상세한 설정 지침, 포괄적인 문제 해결 가이드, 복잡한 절차의 비디오 연습 등이 포함됩니다.

그 영향은 즉각적이고 지속적이었습니다. 신입 학생들은 몇 주가 아니라 며칠 만에 속도를 낼 수 있었습니다. 내가 만든 문서 저장소는 내가 떠난 이후 수년이 지난 지금도 연구실에서 계속 사용되고 있습니다. 그것은 트리톤 프로젝트에 대한 단일 진실의 출처가 되었고, 미래의 연구원들에게 수많은 시간/일을 절약해 주었습니다.

멘토링 및 지식 이전

HCR 연구실에서 내가 가장 보람을 느낀 측면 중 하나는 다른 사람들을 멘토링하고 내가 얻은 지식을 공유할 수 있는 기회였습니다. 내 작업이 진행되고 트리톤 시스템에 더 익숙해짐에 따라 나는 신입 팀원을 교육하는 책임을 점점 더 많이 맡았습니다.

연구실 후임자 멘토링

나는 학위를 마무리하고 이베이에서의 업무에 집중하기 위해 결국 연구실을 떠날 준비를 하면서, 떠난 후 트리톤 프로젝트를 인계받을 두 사람을 철저히 교육했습니다. 이것은 단순히 작동 방법을 보여주는 것이 아니라, 그들이 계속해서 혁신할 수 있도록 기본 원리를 진정으로 이해하도록 보장하는 것이었습니다.

나는 그들과 몇 주 동안 밀착해서 다음을 함께 진행했습니다:

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

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

고등학교 멘토링 프로그램

아마도 더 보람 있었던 경험은 연구실의 아웃리치 프로그램을 통해 한 고등학생을 멘토링한 경험이었습니다. 이는 로봇공학, 컴퓨터 과학 및 연구를 교육적 형성 단계에서 소개할 수 있는 훌륭한 기회였습니다.

나는 다음을 포함하는 포괄적인 커리큘럼을 설계했습니다:

컴퓨터 과학 기초:

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

로봇공학 개념:

  • 센서의 작동 원리와 센서 인터페이스 방법
  • 액추에이터 제어 및 모터 시스템
  • 자율 시스템과 피드백 제어의 기초

ROS (로봇 운영 체제):

  • 퍼블리시/서브스크라이브 메시징 시스템 이해
  • 노드와 서비스 생성
  • 런치 파일과 파라미터 서버 사용

실습 프로젝트 작업:

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

이 멘토링이 특히 특별했던 점은 프로그래밍을 거의 모르는 상태에서 시작해 활발한 연구 프로젝트에 의미 있는 코드를 기여할 수 있을 정도로 발전하는 과정을 지켜본 것이었습니다. 그녀는 “변수가 무엇인가요?“라는 질문에서 독립적으로 ROS 통신 문제를 디버깅하고 자신의 서비스 구현을 작성하는 단계로 발전했습니다.

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

그 멘토링은 그녀만큼 나에게도 교육적이었다. 복잡한 개념을 소화하기 쉬운 조각으로 분해하고 우리가 하고 있는 일의 근본을 진지하게 생각하게 만들었다. 다른 사람을 가르치는 것은 나를 더 나은 엔지니어이자 연구자로 만들었다.

박사 연구와의 협업

내가 연구실에서 보낸 시간 중 직업적으로 가장 보람 있었던 측면 중 하나는 자율주행차 알고리즘을 연구하던 박사과정 학생 펑(펭)과 밀접하게 협력한 일이었다. 내가 Triton 시스템에 가한 소프트웨어 개선은 그의 박사 연구를 지원하는 데 도움이 되었다.

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

나의 기여는 펑의 연구에 여러 면에서 도움이 되었다:

교차로 관리 연구: 향상된 PID 제어기와 다중 로봇 협조 덕분에 펑은 여러 “차량”(트리톤)들이 그들의 움직임을 조율해야 하는 교차로 시나리오를 시뮬레이션할 수 있었다. 더 나은 타이밍과 위치 제어는 이러한 연구들을 더 현실성 있게 만들었다.

차량 대 차량 통신: 내가 개발한 다중 처리 프레임워크는 펑이 시뮬레이션된 차량들 간의 통신 프로토콜을 구현하고 테스트할 수 있게 했다. 각 트리톤은 다른 트리톤들과 조정하면서도 독립적으로 결정을 내릴 수 있었는데, 이는 자율주행차들이 작동해야 할 방식과 유사했다.

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

우리의 협업이 특히 가치 있었던 점은 단지 내가 그의 연구를 도운 것이 아니라 진정한 파트너십이었다는 것이다. 자율주행차의 이론적 측면에 대한 펑의 이해는 내 실무적 구현을 설계하는 데 많은 영감을 주었다. 그의 피드백과 요구사항은 내가 시스템을 더 견고하고 능력 있게 만드는 데 자극이 되었다.

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

내가 구축한 시스템들은 펑의 학위 논문 작업에 유용한 부분이 되었다. 내 실용적 공학 기여가 자율주행 기술 연구를 지원하는 것을 보는 것은 매우 보람 있었다. 이는 견고한 공학과 연구가 어떻게 함께 유용한 결과를 만들어낼 수 있는지를 내게 확신시켜주었다.

비록 내가 연구실을 떠난 이후에도 펑과 나는 연락을 유지했다. 내가 떠난 후에도 내 작업이 중요한 연구에 계속 기여하고 있다는 사실을 아는 것은 매우 보람 있었다.

관점: LLM 이전의 개발 시대

이 모든 작업은 소프트웨어 개발의 LLM 이전 시대에 이루어졌다는 점은 주목할 만하다. 이 모든 일은 2020년부터 2021년(주로 2021년) 사이에 일어났으며, ChatGPT, Claude, Perplexity 또는 Cursor IDE와 같은 AI 기반 개발 도구들이 존재하기 전의 일이었다.

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

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

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

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

기본 원리부터 학습하기: 로보틱스를 위한 Python의 다중 처리 구현 방법을 빠르게 물어볼 수 없었기 때문에, 나는 기저 개념을 깊이 이해해야 했다. 이는 동시성 프로그래밍, 제어 시스템, 컴퓨터 비전에 대한 탄탄한 기초를 쌓도록 강요했다.

문서화가 중요했다: 나중에 코드를 설명해 줄 AI에 의존할 수 없었기 때문에, 나는 매우 명확한 문서와 주석을 작성해야 했다. 이러한 규율은 지식을 다른 사람에게 전달할 때 매우 귀중했다.

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

떠나야 했던 어려운 결정

HCR 연구실에서 일하는 것이 얼마나 즐거웠는지와 관계없이, 2021년 말쯤 나는 많은 학생들이 겪는 어려운 결정에 직면했다: 여러 기회와 책임을 균형 있게 관리하는 문제였다. 나는 동시에 이베이에서 소프트웨어 엔지니어로 풀타임으로 일하고 있었고, 마인스에서 컴퓨터 과학 학위를 마무리하고 있었으며, HCR 연구실에 연구 기여를 하고 있었다.

이베이 기회는 의미가 컸다; 그것은 나의 첫 주요 소프트웨어 엔지니어링 직무였고, 귀중한 산업 경험을 제공했으며 안정적인 수입을 주었다. 그러나 풀타임으로 일하면서 학위를 완수하고 연구에 의미 있게 기여하려는 시도는 단순히 지속 불가능했다. 무엇인가를 포기해야 했다.

연구 부담을 줄여 연구실 일에 더 집중할 수 있는지 장 박사님께 여쭈었을 때, 그는 그것을 강력히 만류했다. 그의 이유는 타당했다: 학위를 마치는 것이 우선이어야 하고, 이베이에서의 산업 경험은 내 커리어 발전에 가치가 있을 것이라는 점이었다. 그는 수업을 줄이고 연구에 집중하는 것이 유혹적일 수는 있지만 장기적으로 최선의 결정이 아닐 수 있다고 느꼈다.

그래서 2021년 9월, 연구실에서 약 8개월간 집중적으로 일한 후, 나는 학위를 마치고 이베이에서의 업무에 집중하기 위해 연구 조교 역할에서 물러나는 어려운 결정을 내렸다. 당시 내가 내린 결정 중 가장 어려운 전문적 결정 중 하나였다.

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

회고와 되돌아보기

이제 2025년, 4년이 지난 지금, 나는 그 시간을 복합적인 감정으로 되돌아본다. 내 경력 경로는 웹 개발과 AI/ML 엔지니어링으로 깊이 들어갔고, 이 분야들은 매우 보람 있었고 성장과 영향의 큰 기회를 제공했다.

테이블 위 트리톤의 탑다운 뷰

그럼에도 불구하고 내 안에는 ‘만약에’라는 질문이 있다. 로보틱스는 그때나 지금이나 나의 진정한 열정이다. 물리적 시스템을 다루고, 코드가 실제 세계의 움직임과 행동으로 번역되는 것을 보는 데에는 웹 개발이나 심지어 AI 작업이 쉽게 대체할 수 없는 무언가가 있다.

나는 때때로 다른 길을 택했다면 어땠을까 궁금해한다. 만약 내가 로보틱스 연구에 남아 있을 방법을 찾았더라면? 학부를 마친 직후 바로 대학원에 진학했더라면? 연구실 일을 산업 경험보다 우선시했더라면?

그러나 모든 경로에는 트레이드오프가 있다는 것도 인식하고 있다. 내가 웹 개발과 AI에서 개발한 기술들은 엄청나게 가치 있었다. 산업 경험은 대규모 소프트웨어 엔지니어링, 사용자 경험 설계, 수백만 사용자가 사용하는 제품을 구축하는 데 따른 실무적 도전을 가르쳐주었다. 이러한 경험들은 전반적으로 나를 더 나은 엔지니어로 만들었다.

HCR 연구실에서 한 작업은 지금도 내가 문제에 접근하는 방식에 영향을 미친다. PID 제어 시스템에 필요한 체계적 사고는 소프트웨어 시스템에서 피드백 루프를 설계하는 방식에 나타난다. 내가 개발한 문서화 및 지식 보존 기술은 그 이후 맡은 모든 역할에서 매우 귀중했다. 멘토링과 가르침의 경험은 주니어 개발자들과 함께 일하고 팀 지식 공유에 기여하는 방식을 형성했다.

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

지속적인 영향

HCR 연구실 경험을 되돌아보면, 비교적 짧은 시간에 내가 얼마나 많은 것을 성취했는지에 놀란다. 내가 구축한 시스템들은 트리톤 플랫폼의 운영 방식을 근본적으로 바꿨고, 그 개선점들 중 많은 부분이 오늘날에도 여전히 사용되고 있다. 내가 만든 문서 저장소는 전체 프로젝트의 지식 기반이 되었고, 내가 맺은 멘토십 관계들은 함께 일했던 사람들에게 지속적인 영향을 미쳤다.

그러나 아마도 가장 의미 있었던 것은, 그 경험이 내가 진정으로 열정을 느끼는 문제에 매달렸을 때 무엇을 해낼 수 있는지를 보여주었다는 점이다. 그 8개월 동안, 나는:

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

이것은 단지 기술적 성취에 관한 것만은 아니었지만, 그 성취들은 나에게 의미가 있었다. 그것은 끈기와 체계적인 사고를 통해 학부생 신분일지라도 유용한 기여를 할 수 있다는 것을 배운 것이었다.

미래와 로봇공학

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

미래에 무엇이 기다리고 있을지는 누가 알겠는가? 내가 AI와 머신러닝에서 개발하고 있는 기술들은 점점 로봇공학과 더 관련이 깊어지고 있다. 내가 얻은 산업 경험은 견고하고 확장 가능한 시스템을 구축하는 방법을 가르쳐 주었다. 아마도 이러한 다양한 경험의 실들이 예상치 못한 방식으로 하나로 모이는 미래가 있을지도 모른다.

지금으로서는, HCR 연구실에서 보낸 시간과 그곳에서 얻은 경험들에 감사하고 있다. 그것은 나의 기술적 능력과 내가 가장 만족을 느끼는 업무 유형에 대한 이해를 형성한 형성기였다. 때때로 그것이 그리울 때도 있지만, 내가 배운 교훈과 개발한 접근 방식이 내가 하는 모든 일에 계속 영향을 미치고 있다는 것을 알고 있다.

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