테마 선택

📚 지식 노트

AI·하드웨어·주변기기·게임·컴퓨터 시스템·이론 컴퓨터 과학·수학·개발과 운영·보안·응용 분야에 대해 알아 두면 좋은 내용을 정리한 노트다. 위에서 분야를 고르고 아래에서 노트를 고른다.

로보틱스와 자율주행

로봇은 세상을 재고, 자기가 어디 있는지 추정하고, 갈 길을 정하고, 모터를 움직이는 고리를 쉬지 않고 돈다. 좌표 변환·기구학·칼만 필터·A*·PID를 작은 예로 직접 계산하며 따라가고, 같은 고리가 자동차 크기로 커진 자율주행과 그 안전 문제까지 살핀다.

목차 (15)
  1. 로봇의 구성: 센서, 계산, 구동기
  2. 좌표와 변환
  3. 순기구학과 역기구학
  4. 바퀴 로봇의 운동학: 차동 구동
  5. 센서: 엔코더, IMU, LiDAR, 카메라
  6. 센서 융합: 1차원 칼만 필터
  7. SLAM: 지도와 위치를 함께
  8. 경로 계획: A*와 RRT
  9. 제어: PID
  10. 행동 결정: 상태 기계와 행동 트리
  11. ROS 2
  12. 시뮬레이션과 현실 격차
  13. 자율주행: 레벨과 파이프라인
  14. 안전과 윤리
  15. 핵심 자료

로봇의 구성: 센서, 계산, 구동기

로봇을 아주 거칠게 나누면 세 부분이다. 세상을 재는 센서, 잰 값으로 무엇을 할지 정하는 계산, 실제로 힘을 내는 구동기(모터·유압·공압 실린더)다. 청소 로봇, 공장의 팔, 창고의 운반 로봇, 자율주행차가 모두 이 구조다. 차이는 얼마나 빨리, 얼마나 정확하게, 얼마나 위험한 환경에서 이 고리를 도느냐에 있다.

중요한 것은 이것이 닫힌 고리라는 점이다. 모터에 "1 m 가"라고 명령해도 바퀴는 미끄러지고 바닥은 기울어 있다. 그래서 움직인 결과를 다시 재고, 계획과 다르면 고친다. 이 노트의 거의 모든 절은 이 고리의 한 부분을 다룬다. 계산 쪽은 마이크로컨트롤러에서 GPU가 달린 컴퓨터까지 다양한데, 모터를 정해진 주기로 정확히 돌리는 낮은 층은 임베디드 노트의 실시간 제어와 같은 세계다.

센서, 계산, 구동기가 환경을 사이에 두고 고리를 이루는 로봇의 구성센서카메라·LiDAR·IMU계산위치 추정·계획·제어구동기모터·바퀴·관절측정값명령환경: 바닥·벽·사람·물체움직임빛·거리
로봇의 고리. 센서가 환경을 재고, 계산이 판단하고, 구동기가 환경을 바꾸면 그 결과를 다시 잰다.

좌표와 변환

로봇에는 좌표계가 여러 개 있다. 방 전체의 월드 좌표계, 로봇 몸체에 붙은 로봇 좌표계(보통 앞이 x, 왼쪽이 y), 그리고 센서마다 붙은 좌표계다. LiDAR는 "내 앞 1.5 m, 왼쪽 0.5 m에 뭔가 있다"고 자기 기준으로 말한다. 이것을 지도에 찍으려면 월드 좌표로 바꿔야 한다.

평면에서 바꾸는 방법은 회전한 뒤 이동하는 것이다. 로봇이 월드의 (xr, yr)에서 각 θ를 바라보면, 로봇 기준 점 (a, b)는 월드에서 (xr + a cos θ − b sin θ, yr + a sin θ + b cos θ)다. 회전과 이동을 3×3 행렬 하나로 묶는 동차 좌표, 3차원 회전의 쿼터니언은 게임에서 쓰는 수학과 똑같아 게임 수학 노트에 자세히 있다. 로봇 소프트웨어는 "월드 → 로봇 → LiDAR → 카메라"처럼 좌표계를 나무 모양으로 이어 두고, 어느 두 좌표계 사이든 변환을 곱해서 얻는다.

좌표 버그의 상당수는 축 방향 약속이 어긋나서 생긴다. ROS의 REP 103은 오른손 좌표계를 쓰고, 몸체 기준으로 x는 앞, y는 왼쪽, z는 위, 지구 위의 가까운 범위는 동·북·위(ENU)로 두며, 단위는 m와 라디안으로 정한다. 함정은 카메라다. 영상 처리 쪽 관례를 따르는 _optical 좌표계는 z가 앞, x가 오른쪽, y가 아래라서, 몸체 좌표계와 섞어 쓰면 장애물이 바닥이나 하늘에 찍힌다. 항공·해양처럼 북·동·아래(NED)를 쓰는 분야의 데이터를 받을 때도 같은 변환이 필요하다.

월드 좌표계 위에 놓인 로봇 좌표계와 장애물 좌표 변환0123450123월드 x (m)월드 yxryr로봇 (2, 1)장애물로봇 자세: (2, 1), 30°로봇이 본 위치: (1.5, 0.5)x = 2 + 1.5cos30° − 0.5sin30°y = 1 + 1.5sin30° + 0.5cos30°월드 위치: (3.05, 2.18)회전한 뒤 로봇 위치만큼 이동
좌표 변환. 30°를 바라보는 로봇이 자기 기준 (1.5, 0.5)에서 본 장애물은 월드 기준 약 (3.05, 2.18)이다. 수치는 변환 함수로 계산했다.

순기구학과 역기구학

로봇 팔은 링크(막대)와 관절의 사슬이다. 순기구학(forward kinematics)은 관절 각을 알 때 끝점(손, 그리퍼)이 어디 있는지 구한다. 앞 절의 회전·이동을 관절마다 이어 곱하면 되므로 답은 늘 하나다. 평면 2링크 팔이면 팔꿈치는 L1(cos θ1, sin θ1), 끝점은 거기에 L2(cos(θ1+θ2), sin(θ1+θ2))를 더한 곳이다.

관절 각 30도와 45도를 준 2링크 팔의 팔꿈치와 끝점 위치θ₁ = 30°θ₂ = 45°L₁ = 1 mL₂ = 0.8 m끝점팔꿈치 = L₁(cos θ₁, sin θ₁)= (0.87, 0.50)끝점 = 팔꿈치 +L₂(cos(θ₁+θ₂), sin(θ₁+θ₂))= (1.07, 1.27)각을 알면 위치는 하나로 정해진다
순기구학. 링크 1 m·0.8 m인 팔에 30°·45°를 주면 끝점은 약 (1.07, 1.27)이다.

실제로 필요한 것은 대개 반대다. "컵이 (1.2, 0.9)에 있다, 관절을 몇 도로 돌려야 하나?" 이것이 역기구학(inverse kinematics)이다. 2링크 팔은 코사인 법칙으로 풀리는데, 팔꿈치를 아래로 굽힌 자세와 위로 굽힌 자세 두 해가 나온다. 목표가 팔 길이의 합보다 멀면 해가 없고, 팔을 쭉 편 경계에서는 하나다. 관절이 여섯 개인 산업용 팔은 해가 여러 개이고 닫힌 식으로 안 풀리는 경우가 많아, 끝점 오차를 줄이는 쪽으로 관절을 조금씩 고치는 반복법(야코비안 이용)을 쓴다. 해 가운데 무엇을 고를지는 관절 한계, 장애물, 지금 자세에서 덜 움직이는 쪽 같은 기준으로 정한다.

같은 목표점에 닿는 2링크 팔의 두 역기구학 해와 작업 공간 경계닿는 한계 1.8 m목표 (1.2, 0.9)해 A해 B해 A(팔꿈치 아래)θ₁ = 7.3°, θ₂ = 67.6°해 B(팔꿈치 위)θ₁ = 66.4°, θ₂ = -67.6°cos θ₂ = (d² − L₁² − L₂²) / 2L₁L₂
역기구학의 두 해. 같은 끝점에 닿는 팔꿈치 아래(실선)·위(점선) 자세. 바깥 점선 호는 팔이 닿는 한계, 안쪽 호보다 가까운 곳에도 닿지 못한다.

바퀴 로봇의 운동학: 차동 구동

청소 로봇과 많은 운반 로봇은 좌우 바퀴를 따로 돌리는 차동 구동이다. 운전대가 없고, 두 바퀴 속도의 차이로 방향을 바꾼다. 바퀴 사이 거리를 b라 하면 몸체의 전진 속도는 두 바퀴의 평균 v = (vL + vR) / 2, 회전 각속도는 차이를 b로 나눈 ω = (vR − vL) / b다. 그림의 예(b = 0.5 m, 왼쪽 0.4·오른쪽 0.6 m/s)는 v = 0.50 m/s, ω = 0.40 rad/s로, 반지름 1.25 m의 원을 왼쪽으로 그린다.

이 식을 시간에 대해 쌓으면 바퀴 회전만으로 위치를 추정할 수 있다. 이것이 오도메트리다. 문제는 작은 오차도 쌓인다는 것이다. 바퀴 지름이 1%만 틀려도, 한 번 미끄러져도 그 뒤의 모든 위치가 틀어진다. 그래서 다음 절의 다른 센서와 섞는다. 자동차는 옆으로 미끄러지지 않는 앞바퀴를 꺾어 도는 구조라, 제자리 회전을 못 하고 최소 회전 반경이 있다. 이 제약이 주차 경로 계획을 어렵게 만든다.

바퀴 속도가 다른 차동 구동 로봇의 몸체 속도 계산과 원호 경로위에서 본 로봇(오른쪽을 바라봄)왼쪽 0.4 m/s오른쪽 0.6 m/sb0.5 mv = (v_L + v_R) / 2 = 0.50 m/sω = (v_R − v_L) / b = 0.40 rad/s회전 반경 R = v / ω = 1.25 m두 바퀴가 같으면 직진, 반대면 제자리 회전R출발8초 뒤
차동 구동. 오른쪽 바퀴가 더 빠르면 왼쪽으로 원을 그린다. 원호를 따라 정확히 적분한 8초 경로이고, 작은 원은 2초마다의 위치와 방향이다.

센서: 엔코더, IMU, LiDAR, 카메라

  • 휠 엔코더: 모터·바퀴 축이 몇 칸 돌았는지 센다. 빠르고 싸지만 미끄러짐을 모른다.
  • IMU(관성 측정 장치): 가속도계와 자이로스코프로 가속도와 회전 속도를 잰다. 바깥 도움 없이 혼자 재지만, 위치를 얻으려고 두 번 적분하면 작은 치우침이 빠르게 커진다(드리프트).
  • LiDAR: 레이저를 쏘고 돌아오는 시간으로 거리를 잰다. 회전하거나 여러 빔을 쓰면 주변이 점구름(point cloud)으로 나온다. 정확하지만 비·안개에 약하고, 유리나 검은 면은 빛을 잘 돌려주지 않는다.
  • 카메라: 싸고 정보가 가장 많다. 표지판 글자, 신호등 색, 사람의 자세까지 보인다. 대신 거리는 직접 재지 못해 두 대로 시차를 보거나(스테레오) 신경망으로 추정하며, 어둠과 역광에 약하다.

자동차에는 여기에 레이더(전파로 거리와 상대 속도를 재며 날씨에 강함), GNSS(위성 위치), 초음파(주차 거리)가 더해진다. 비행 시간·삼각 측량 같은 거리 측정 원리는 센싱 노트, 위성 항법은 위치 노트, 카메라 영상에서 물체를 찾는 방법은 컴퓨터 비전 노트에 있다.

휠 엔코더, IMU, LiDAR, 카메라가 재는 것과 강점·약점휠 엔코더바퀴 회전 → 이동 거리+ 빠르고 싸다− 미끄러지면 오차가 쌓인다IMU가속도·각속도+ 바깥 도움 없이 혼자 잰다− 적분하면 드리프트LiDAR레이저 왕복 시간 → 거리+ 정확한 3D 점군− 비·안개, 유리·검은 면카메라빛의 세기·색+ 표지·차선·사람 인식− 어둠·역광, 거리는 추정
로봇의 대표 센서 넷. 약점이 서로 다르다는 점이 중요하다. 그래서 한 센서를 고르는 대신 섞는다.

센서 융합: 1차원 칼만 필터

오도메트리는 부드럽지만 점점 틀어지고, GNSS나 랜드마크 측정은 틀어지지 않지만 들쭉날쭉하다. 둘을 어떤 비율로 섞어야 할까? 칼만 필터는 위치를 값 하나가 아니라 정규 분포(평균과 분산)로 들고 다니며 두 단계를 되풀이한다.

  1. 예측: 움직임 명령대로 평균을 옮기고, 움직임이 불확실한 만큼 분산 Q를 더한다. 믿음이 넓어진다.
  2. 갱신: 측정 z가 오면 칼만 이득 K = P⁻ / (P⁻ + R)만큼 측정 쪽으로 당긴다. R은 측정 노이즈의 분산이다. 예측이 불확실할수록(P⁻가 클수록) 측정을 더 믿는다. 분산은 (1 − K)P⁻로 줄어, 예측과 측정 어느 쪽보다도 작아진다.
1차원 칼만 필터의 예측, 측정, 갱신 세 번을 정규 분포 곡선으로 보여 주는 단계 그림0 m1 m2 m3 m4 m처음 믿음: 위치 0 m, 분산 0.5명령: 매번 1 m 앞으로1차 예측: x⁻ = 0.00 + 1 = 1.00P⁻ = 0.50 + Q(0.3) = 0.801차 측정: z = 1.4 m측정 노이즈 분산 R = 0.6K = 0.80 / (0.80 + 0.6) = 0.57갱신: x = 1.23, P = 0.342차 예측: x⁻ = 1.23 + 1 = 2.23P⁻ = 0.34 + Q(0.3) = 0.642차 측정: z = 1.8 m측정 노이즈 분산 R = 0.6K = 0.64 / (0.64 + 0.6) = 0.52갱신: x = 2.01, P = 0.313차 예측: x⁻ = 2.01 + 1 = 3.01P⁻ = 0.31 + Q(0.3) = 0.613차 측정: z = 3.3 m측정 노이즈 분산 R = 0.6K = 0.61 / (0.61 + 0.6) = 0.50갱신: x = 3.15, P = 0.30
1 / 10

로봇은 처음에 자기가 0 m 근처에 있다고 믿는다. 곡선의 폭이 불확실성(분산)이다.

1차원 칼만 필터. 예측은 움직임 모델로 믿음을 옮기며 넓히고, 갱신은 측정과 합쳐 좁힌다. K는 두 분산의 비로 정해진다.

실제 로봇은 위치·방향·속도를 함께 담은 벡터와 공분산 행렬로 같은 일을 한다. 움직임이 회전 때문에 비선형이면 그 자리에서 선형으로 근사하는 확장 칼만 필터(EKF)나, 표본 점 몇 개를 비선형 함수에 통과시키는 UKF를 쓴다. 분포가 한 봉우리 모양이 아니면(복도 두 곳 가운데 어디인지 모를 때) 많은 입자(표본 위치)로 분포를 흉내 내는 파티클 필터를 쓴다. 지도 위에서 위치를 찾는 몬테카를로 위치 추정(AMCL)이 그 예다.

SLAM: 지도와 위치를 함께

위치를 알려면 지도가 있어야 하고, 지도를 그리려면 위치를 알아야 한다. 처음 가 본 건물에서는 둘 다 없다. SLAM(동시적 위치 추정 및 지도 작성)은 이 닭과 달걀 문제를 함께 푼다. 지금의 주류는 그래프 SLAM이다. 로봇이 지나간 자세를 점(노드)으로, "여기서 저기까지 오도메트리로 1 m"나 "이 자세에서 저 랜드마크가 2 m 앞에 보였다" 같은 측정을 점 사이의 용수철(제약)로 둔다. 그리고 모든 용수철이 가장 덜 늘어나는 배치를 최소제곱 최적화로 찾는다.

열쇠는 루프 클로저다. 한 바퀴 돌아 처음 본 곳을 다시 알아보면, 오도메트리로 쌓인 오차가 그 한 줄의 제약으로 드러나고 최적화가 경로 전체에 고르게 나눠 바로잡는다. 반대로 비슷하게 생긴 다른 복도를 같은 곳으로 착각하면 지도 전체가 구겨진다. 그래서 루프 클로저 후보는 엄격하게 검증한다. 센서에 따라 LiDAR SLAM, 카메라의 특징점을 쓰는 visual SLAM, IMU를 섞은 visual-inertial 방식이 있다.

오도메트리 드리프트로 틀어진 경로를 루프 클로저가 바로잡는 SLAM 그래프같은 곳을 다시 알아보면틀어진 끝이 처음과 이어진다최적화한 경로오도메트리만랜드마크루프 클로저지도와 위치를 함께추정하는 닭과 달걀 문제
그래프 SLAM의 개념. 오도메트리만 이은 경로(점선)는 끝으로 갈수록 틀어진다. 같은 곳을 다시 알아본 루프 클로저 제약이 생기면 최적화가 경로(실선)를 바로잡는다.

경로 계획: A*와 RRT

지도가 있으면 갈 길을 찾는다. 바닥을 격자로 나누고 장애물 칸을 막으면 경로 계획은 그래프의 최단 경로 문제가 된다. A*는 다익스트라에 "목표까지 남은 거리의 추정" h를 더해, f = g + h가 가장 작은 칸부터 꺼낸다. h가 실제 남은 거리를 넘지 않으면(맨해튼 거리는 벽을 무시하므로 늘 넘지 않는다) 찾은 경로는 최단이다. 아래 격자에서 A*는 11칸을 꺼내고 끝나지만, h를 0으로 둔 다익스트라는 35칸을 꺼낸다. 다익스트라와 우선순위 큐 자체는 알고리즘 › 그래프에 있다.

벽이 있는 격자에서 A*가 칸을 하나씩 꺼내며 최단 경로를 찾는 단계 그림6868꺼낸 칸 1 / 11현재 (2, 1)g 0 + h 6 = f 6열린 칸 4개 · 닫힌 칸 1개86868꺼낸 칸 2 / 11현재 (3, 1)g 1 + h 5 = f 6열린 칸 5개 · 닫힌 칸 2개8688꺼낸 칸 3 / 11현재 (3, 2)g 2 + h 4 = f 6열린 칸 4개 · 닫힌 칸 3개8888꺼낸 칸 4 / 11현재 (2, 2)g 1 + h 5 = f 6열린 칸 4개 · 닫힌 칸 4개8888꺼낸 칸 5 / 11현재 (3, 0)g 2 + h 6 = f 8열린 칸 4개 · 닫힌 칸 5개8888꺼낸 칸 6 / 11현재 (4, 0)g 3 + h 5 = f 8열린 칸 4개 · 닫힌 칸 6개88888꺼낸 칸 7 / 11현재 (5, 0)g 4 + h 4 = f 8열린 칸 5개 · 닫힌 칸 7개8888108꺼낸 칸 8 / 11현재 (6, 0)g 5 + h 3 = f 8열린 칸 6개 · 닫힌 칸 8개888810108꺼낸 칸 9 / 11현재 (6, 1)g 6 + h 2 = f 8열린 칸 7개 · 닫힌 칸 9개888810101010꺼낸 칸 10 / 11현재 (6, 2)g 7 + h 1 = f 8열린 칸 9개 · 닫힌 칸 10개888810101010꺼낸 칸 11 / 11현재 (6, 3)g 8 + h 0 = f 8열린 칸 8개 · 닫힌 칸 11개A*: 경로 8칸꺼낸 칸 11개다익스트라(h = 0)꺼낸 칸 35개 · 경로 8칸A*는 11개로 같은 답SG어두운 칸: 벽 · 점선 칸: 열린 목록색칠한 칸: 닫힌 목록(꺼낸 칸)4방향 이동, 한 칸 비용 1
1 / 13

1번째로 꺼낸 칸 (2, 1): g = 0, h = 6, f = 6. 시작 칸이다. 이웃을 열린 목록(점선 칸)에 넣고, 칸 안 숫자는 f다.

격자 A*. g는 시작에서 지금까지 온 칸 수, h는 목표까지의 맨해튼 거리(벽을 무시한 낙관적 추정), f = g + h. h가 실제 거리를 넘지 않으면 찾은 경로가 최단임이 보장된다.

격자는 2차원 바닥에는 좋지만, 관절이 여섯 개인 팔처럼 차원이 높으면 칸 수가 폭발한다. 그때는 공간을 무작위로 찍어 보는 표본 기반 계획을 쓴다. 대표인 RRT(빠르게 퍼지는 무작위 트리)는 무작위 점을 하나 찍고, 트리에서 가장 가까운 노드로부터 그쪽으로 한 걸음 가지를 뻗되 충돌하면 버리기를 되풀이한다. 빈 공간 쪽으로 빠르게 퍼져 길은 잘 찾지만 경로가 구불구불해, 다듬기를 하거나 가지를 계속 다시 이어 붙여 최적에 다가가는 RRT* 같은 변형을 쓴다. 찾은 경로는 다시 로봇이 실제로 따라갈 수 있는 매끄러운 궤적(속도·가속도 한계 포함)으로 바꾼다.

제어: PID

계획한 궤적이나 목표 각도를 실제로 따라가게 하는 것이 제어다. 가장 널리 쓰는 것이 PID다. 오차 e = 목표 − 측정에 대해 명령 u = Kpe + Ki∫e dt + Kd de/dt를 낸다.

  • P(비례): 오차에 비례해 민다. 세게 하면 빨라지지만 출렁인다. 이 그림의 대상처럼 버티는 힘(용수철)이 있으면 오차가 0이 되기 전에 힘이 균형을 이뤄, 정상 상태 오차가 남는다. P만 쓰면 최종값이 0.86에서 멈췄다.
  • I(적분): 남은 오차를 시간에 걸쳐 쌓아 끝내 밀어낸다. 정상 상태 오차가 0이 되지만, 쌓인 값 때문에 오버슈트가 28%에서 39%로 커졌다. 모터가 한계에 걸린 동안 적분이 계속 쌓이는 와인드업을 막는 장치가 필요하다.
  • D(미분): 변화 속도에 브레이크를 건다. 오버슈트가 19%로 줄고, 2% 안에 들어오는 시간도 5.7초에서 4.0초로 짧아졌다. 다만 측정 노이즈도 미분해 키우므로 거르고 쓴다. 이 그림은 목표가 계단으로 바뀌는 순간의 튐(미분 킥)을 피하려고 오차 대신 측정값을 미분했다.
P, PI, PID 제어기의 단계 응답 곡선과 오버슈트, 정상 상태 오차 비교00.511.50246810시간(초)목표 1PKp 6 · Ki 0 · Kd 0오버슈트 28% · 최종 0.86정착(±2%) 4.0초PIKp 6 · Ki 4 · Kd 0오버슈트 39% · 최종 1.00정착(±2%) 5.7초PIDKp 6 · Ki 4 · Kd 2오버슈트 19% · 최종 1.00정착(±2%) 4.0초
같은 대상(y″ + 2y′ + y = u)을 목표 1로 움직일 때의 단계 응답. P는 모자라게 멈추고, I를 더하면 목표에 닿지만 더 출렁이며, D를 더하면 출렁임이 준다. 수치는 시뮬레이션으로 계산했다.

PID는 대상의 수학 모델 없이도 이득만 조정해 쓸 수 있다는 점이 강점이다. 로봇 팔처럼 관절끼리 힘이 얽히거나, 자동차처럼 미래 경로를 내다보며 제약(차선, 최대 조향각)을 지켜야 하면 모델로 몇 초 앞을 예측해 매 순간 최적의 명령을 푸는 모델 예측 제어(MPC)를 쓴다. 보통은 위층에서 MPC나 경로 추종이 목표 속도를 정하고, 아래층의 모터마다 PID가 그 속도를 맞추는 식으로 층을 나눈다.

행동 결정: 상태 기계와 행동 트리

"배터리가 낮으면 충전하러 가고, 사람이 보이면 따라가고, 아니면 순찰한다" 같은 높은 층의 결정은 어떻게 짤까? 고전적인 방법은 유한 상태 기계(FSM)다. 상태와 상태 사이의 전이를 그린다. 작을 때는 명쾌하지만 상태가 늘면 전이가 거미줄처럼 얽히고, "어느 상태에서든 배터리가 낮으면" 같은 규칙을 상태마다 되풀이해 적어야 한다.

행동 트리(behavior tree)는 게임 AI에서 로봇으로 건너왔다. 트리를 주기적으로 위에서부터 훑는다(tick). 선택(?) 노드는 자식을 차례로 시도해 하나라도 성공하면 멈추고, 순서(→) 노드는 자식이 모두 성공해야 성공한다. 잎은 조건 검사나 행동이다. 위에 둔 가지가 우선순위가 높으므로 "배터리 낮음" 가지를 맨 위에 두면 어느 상황에서든 먼저 걸린다. 가지 하나를 떼어 다른 로봇에 붙이기도 쉽다. ROS 2의 내비게이션 스택 Nav2가 계획·제어·복구 동작을 행동 트리로 엮는다.

순찰 로봇의 행동을 상태 기계와 행동 트리로 각각 나타낸 그림상태 기계순찰추적충전사람 보임놓침배터리 낮음충전 끝상태가 늘면 화살표가 제곱으로 는다행동 트리?선택: 성공하는 자식이 나올 때까지 위에서부터→배터리 낮음?충전하러 가기→사람 보임?따라가기순찰→ 순서: 앞이 성공해야 다음점선: 조건 · 색칠: 행동 · 가지를 붙였다 뗐다 한다
같은 순찰 로봇. 상태 기계는 전이를 하나하나 그리고, 행동 트리는 우선순위 순으로 가지를 쌓는다.

ROS 2

로봇 소프트웨어는 드라이버·위치 추정·인지·계획·제어가 서로 다른 속도로 동시에 돈다. ROS(Robot Operating System)는 이름과 달리 운영체제가 아니라, 이런 부품을 따로 짜서 잇게 해 주는 라이브러리와 도구 모음이다. 각 부품은 노드(따로 도는 프로그램)이고, 노드끼리는 이름 붙은 토픽에 메시지를 발행·구독한다. 요청과 응답이 필요하면 서비스, "저 문까지 가" 같이 오래 걸리고 중간 진행 상황과 취소가 필요한 목표는 액션을 쓴다. 노드는 같은 메시지 형식만 맞추면 되니, LiDAR를 다른 회사 제품으로 바꿔도 드라이버 노드 하나만 바꾸면 된다.

ROS 2는 1편의 한계(중앙 마스터 하나에 의존, 실시간·보안 부족)를 고치려고 바닥부터 다시 만든 판이다. 통신은 산업용 발행·구독 표준인 DDS 같은 미들웨어 위에서 돌고, 서비스 품질(QoS) 설정으로 "센서 값은 늦으면 버려도 됨", "지도는 꼭 전달" 같은 차이를 준다. 녹화(rosbag)와 시각화(RViz), 시뮬레이터 연동 같은 도구가 함께 있어 실제 로봇 없이도 같은 코드를 돌려 볼 수 있다. 마이크로컨트롤러 쪽은 micro-ROS로 ROS 2 그래프에 붙는다.

ROS 2에서 드라이버, 위치 추정, 인지, 내비게이션 노드가 토픽으로 이어진 그래프LiDAR 드라이버/scan카메라 드라이버/image휠·IMU 드라이버/odom위치 추정장애물 인지/pose/obstacles내비게이션(Nav2)/cmd_vel모터 드라이버둥근 상자: 노드(따로 도는 프로그램) · 각진 상자: 토픽(발행하면 구독자 모두가 받음)요청·응답은 서비스, "저기까지 가" 같은 오래 걸리는 목표는 진행 상황을 돌려주는 액션
ROS 2 노드 그래프의 예. 드라이버가 /scan·/image·/odom을 발행하고, 위치 추정·인지가 구독해 내비게이션에 넘기면, 내비게이션이 /cmd_vel(속도 명령)을 발행한다.

시뮬레이션과 현실 격차

로봇 소프트웨어는 실물에 올리기 전에 시뮬레이터에서 먼저 돌린다. 실물은 비싸고 부서지며, 넘어지는 장면을 수천 번 되풀이할 수 없기 때문이다. ROS와 함께 흔히 쓰는 Gazebo는 물리 엔진과 센서 모형을 갖춰, 같은 ROS 토픽으로 가상의 LiDAR·카메라 값을 내보내고 속도 명령을 받는다. 노드 코드는 그대로 두고 아래만 실물과 바꿔 끼운다.

문제는 시뮬레이터가 세상을 단순하게 만든다는 것이다. 마찰·바닥의 미끄러움·모터의 지연과 포화·센서 잡음·조명과 질감이 실제와 다르면, 시뮬레이터에서 완벽하던 제어기와 인지 모델이 실물에서 무너진다. 이 차이를 현실 격차(reality gap)라 한다. 2017년 토빈 등은 시뮬레이터의 렌더링을 일부러 마구 바꿔(현실과 닮지 않은 무작위 질감 등) 학습시키면 현실이 모델에게 “또 하나의 변형”으로 보인다는 도메인 무작위화를 제안했고, 현실 사진 없이 시뮬레이터 영상만으로 학습한 물체 위치 추정기가 실제에서 1.5cm 정확도를 냈다고 보고했다(Domain Randomization). 그래도 마지막 확인은 실물로 한다. 시뮬레이션에서 통과한 것은 실물 시험을 시작해도 된다는 뜻이지 끝내도 된다는 뜻이 아니다.

자율주행: 레벨과 파이프라인

자율주행차는 지금까지의 모든 것을 시속 수십 km로, 사람 곁에서 해내야 하는 로봇이다. 얼마나 자동인지는 미국 자동차공학회(SAE)의 J3016이 정한 레벨 0–5로 말한다. 2014년에 처음 나왔고 이후 개정되어 왔다. 핵심은 "누가 운전하나"와 "문제가 생기면 누가 받나"다. 레벨 1은 조향이나 속도 하나만, 레벨 2는 둘 다 시스템이 맡지만 주변 감시와 책임은 여전히 사람에게 있다. 시중의 차로 유지·차간 거리 유지를 함께 하는 기능 대부분이 레벨 2다. 레벨 3부터 정해진 조건에서는 시스템이 운전하며, 레벨 3은 시스템이 요청하면 사람이 넘겨받아야 하고, 레벨 4는 사람이 응하지 않아도 스스로 안전하게 멈춘다. 레벨 5는 어떤 조건에서든 운전한다.

레벨 1–4는 모두 운행 설계 영역(ODD) 안에서만 작동한다. "고속도로, 낮, 맑음, 시속 얼마 이하" 같은 조건이다. 레벨 3 이상은 ODD를 벗어나는 것(공사 구간, 폭우)을 스스로 알아채고 대비해야 한다. 그래서 레벨은 기술의 우열이 아니라 역할 분담의 이름이다. 좁은 도시 구역에서만 도는 무인 택시가 레벨 4이고, 고속도로 어디서나 도는 보조 기능은 레벨 2다. 상용화는 조심스럽게 나아간다. 위키백과의 정리로는 메르세데스-벤츠가 고속도로 정체 구간에서 시속 40마일(64 km)까지 레벨 3을 제공하다가 2026년 1월에 다가올 레벨 2 기능으로 바꾸며 내렸다. 국제적으로는 UNECE가 이 체계를 바탕으로 한 UN 규정 157호(2021년 1월 발효)를 두었다.

SAE J3016 운전 자동화 레벨 0부터 5까지 역할 분담 표운전자 지원: 사람이 운전한다자동 운전: 시스템이 운전한다0자동화없음1운전자보조2부분자동화3조건부자동화4고도자동화5완전자동화조향·속도사람하나만 시스템둘 다 시스템시스템시스템시스템주변 감시사람사람사람시스템시스템시스템비상 대처사람사람사람요청받은 사람시스템시스템운행 범위–제한제한제한제한제한 없음
SAE J3016 레벨. 레벨 2와 3 사이에서 운전과 감시의 주체가 사람에서 시스템으로 넘어간다. 레벨 5만 운행 범위의 제한이 없다.

소프트웨어는 전통적으로 단계를 나눈다. 인지가 카메라·LiDAR·레이더로 차·보행자·차선·신호를 찾고 고정밀 지도와 대조해 위치를 잡는다. 예측이 주변 참가자가 몇 초 뒤 어디 있을지 여러 가능성으로 내다본다. 판단·계획이 양보할지 차선을 바꿀지 정하고 안전한 궤적을 만든다. 제어가 그 궤적을 조향·가속·제동으로 따라간다. 단계를 나누면 각각을 따로 시험하고 고장 원인을 찾기 쉽다. 최근에는 여러 단계를 큰 신경망 하나로 묶어 센서에서 바로 궤적을 내는 엔드투엔드 방식도 시도된다. 단계 사이에서 정보를 잃지 않는 대신, 왜 그렇게 판단했는지 보이기 어렵고 드문 상황을 검증하기가 어렵다.

자율주행의 인지, 예측, 판단과 계획, 제어 네 단계와 엔드투엔드 방식카메라·LiDAR·레이더·GNSS·IMU·지도 →인지객체·차선·신호등위치 추정(지도 대조)예측다른 차·보행자가어디로 갈지판단·계획차선 변경·양보안전한 궤적 생성제어조향·가속·제동궤적 따라가기엔드투엔드: 센서 입력 → 큰 신경망 하나 → 조향·가감속단계 사이 손실은 줄지만, 왜 그렇게 했는지 설명하고 검증하기가 어렵다
모듈형 자율주행 파이프라인. 판단·계획(색칠)이 가장 많은 규칙과 사회적 판단을 담는다. 아래 점선은 단계를 하나로 묶는 엔드투엔드 방식이다.

안전과 윤리

로봇은 화면 속 프로그램과 달리 버그가 몸으로 나타난다. 그래서 안전은 기능을 다 만든 뒤 덧붙이는 것이 아니라 설계의 출발점이다. 자동차 업계는 부품이 고장 났을 때의 위험을 다루는 기능 안전 표준과, 고장이 없어도 인지가 상황을 잘못 읽을 때의 위험을 다루는 SOTIF(의도한 기능의 안전) 표준을 함께 따른다. 핵심 원칙은 몇 가지로 모인다. 고장이나 ODD 이탈을 감지하면 최소 위험 상태(감속해 갓길에 정차 등)로 물러난다. 주 계산기와 따로 도는 단순한 안전 장치(비상 정지, 속도·힘 제한, 감시 타이머)를 둔다. 도로 주행만으로는 드문 상황을 충분히 겪을 수 없으니, 시뮬레이션에서 위험한 장면을 대량으로 만들어 시험한다.

사람 곁에서 일하는 협동 로봇은 부딪쳐도 다치지 않게 힘과 속도를 제한하고, 사람이 다가오면 느려진다. 윤리 문제도 있다. 흔히 거론되는 "트롤리 딜레마"보다 실제로 더 자주 부딪치는 것은 일상의 문제다. 사고가 나면 책임은 운전석의 사람, 제조사, 소프트웨어 공급자 가운데 누구에게 있나. 카메라를 단 로봇이 거리와 집 안을 돌며 모으는 영상은 누구의 것인가. 인식 모델이 특정 피부색이나 체형의 보행자를 덜 잘 찾는다면 그 위험은 공평한가. 레벨 2 기능을 "자율주행"처럼 광고하면 사람이 감시를 놓친다. 기술 설명과 마케팅 이름을 구별하는 것도 안전의 일부다.

평소 운행에서 이상을 감지하면 최소 위험 상태로 물러나는 흐름과 독립 안전 장치평소 운행운행 범위(ODD) 안센서·계산 정상이상 감지센서 고장·통신 끊김ODD를 벗어남최소 위험 상태감속해 갓길 정차또는 사람에게 넘김주 시스템과 따로 도는 안전 장치비상 정지 버튼 · 속도·힘 제한 · 감시 타이머(워치독) · 충돌 직전 자동 제동
안전 설계의 흐름. 이상을 감지하면 최소 위험 상태로 물러나고, 주 시스템과 독립된 단순한 장치가 마지막을 지킨다.

핵심 자료

카메라 영상에서 물체를 찾는 방법은 컴퓨터 비전 노트, 모터와 센서를 직접 다루는 마이크로컨트롤러 쪽은 임베디드 노트에 있다.

자료종류요지링크
Modern Robotics: Mechanics, Planning, and Control교재(무료 PDF)Lynch·Park(2017). 좌표 변환·순기구학·역기구학·동역학·궤적·제어를 한 흐름으로 다룬다. 강의 영상과 코드도 함께 있다.Northwestern
Planning Algorithms교재(무료)LaValle(2006). 격자 탐색부터 RRT 같은 표본 기반 계획, 미분 제약이 있는 계획까지 경로 계획의 표준 참고서.lavalle.pl
Nav2문서ROS 2의 모바일 로봇 내비게이션 프레임워크. 계획·제어·코스트맵 서버를 행동 트리로 엮는 실제 구조를 볼 수 있다.nav2.org
BehaviorTree.CPP라이브러리로봇 행동 트리의 대표 C++ 구현. 트리를 XML로 적고 동작은 C++로 짠다. 시각 편집기 Groot2가 있다.behaviortree.dev
ROS 2저장소로봇 소프트웨어용 라이브러리·도구 모음의 본 저장소. 배포판과 문서로 가는 입구다.GitHub