Skip to main content
Summary

로봇은 움직이는 수학이다

로봇을 처음 보면 먼저 눈에 들어오는 것은 바퀴, 모터, 카메라, 팔, 센서 같은 물리적인 부품입니다. 그래서 로봇공학은 기계나 전자 장치의 영역처럼 느껴집니다. 물론 맞습니다. 로봇은 실제 세계에서 움직이는 기계입니다. 하지만 로봇이 스스로 움직이고, 주변을 감지하고, 목표를 찾아가고, 실수를 줄이며 판단하려면 그 안쪽에서는 끊임없이 수학이 움직여야 합니다.

예를 들어 작은 바퀴 로봇이 방 안에서 목표 지점까지 이동한다고 생각해 봅시다. 사람에게는 "저기까지 가"라는 말 한마디면 충분해 보입니다. 하지만 로봇에게는 이 말이 훨씬 더 구체적인 질문으로 바뀝니다.

로봇은 먼저 자신이 어디에 있는지 알아야 합니다. 이것은 위치, 즉 좌표의 문제입니다. 목표가 어느 방향에 있는지 알아야 합니다. 이것은 벡터와 각도의 문제입니다. 몸을 돌릴 때는 회전을 계산해야 합니다. 이것은 행렬의 문제입니다. 속도를 내고 멈추는 과정은 시간에 따라 위치가 어떻게 바뀌는지 보는 일이므로 미분과 적분의 문제입니다. 센서값이 매번 조금씩 흔들린다면 그 흔들림을 해석해야 합니다. 이것은 확률의 문제입니다. 여러 경로 중 더 짧고 안전한 길을 고르려면 최적화가 필요합니다.

즉 로봇의 행동은 겉으로는 단순해 보여도, 안으로 들어가면 다음과 같은 수학 문제로 바뀝니다.

  • 이동은 좌표와 벡터의 문제다.

  • 회전은 각도와 행렬의 문제다.

  • 움직임의 변화는 미분과 적분의 문제다.

  • 센서의 흔들림은 확률과 추정의 문제다.

  • 더 좋은 경로 선택은 최적화의 문제다.

이 책에서 배우는 수학은 칠판 위에만 있는 수학이 아닙니다. 로봇이 바닥 위에서 한 칸 움직이고, 고개를 돌리고, 센서값을 받아들이고, 목표를 향해 조금씩 다가가는 데 필요한 수학입니다.

로봇 수학을 배우기 전에

공식보다 먼저 잡아야 할 감각

수학을 어렵게 느끼는 가장 큰 이유 중 하나는 공식을 먼저 만나기 때문입니다. 예를 들어 회전 행렬을 처음부터 다음과 같은 형태로 외우려 하면 부담스럽습니다.

[ cosθ  -sinθ ]
[ sinθ   cosθ ]

하지만 이 행렬이 하는 일을 그림으로 보면 훨씬 단순합니다. 어떤 점을 원점 주변으로 돌려 놓는 도구입니다. 로봇 앞쪽에 있던 점이 로봇이 회전하면 어느 방향으로 보이는지 계산해 주는 장치입니다. 즉 회전 행렬은 외워야 할 기호가 아니라, 좌표를 돌리는 손잡이입니다.

미분도 마찬가지입니다. 미분이라는 말은 어렵지만 로봇 관점에서는 "지금 얼마나 빠르게 변하고 있는가?"라는 질문입니다. 위치가 시간에 따라 변하면 속도입니다. 속도가 시간에 따라 변하면 가속도입니다. 바퀴 로봇이 천천히 출발해 점점 빨라지는 장면을 떠올리면 미분은 더 이상 추상적인 개념만은 아닙니다.

확률도 마찬가지입니다. 로봇의 센서는 완벽하지 않습니다. 초음파 센서가 벽까지의 거리를 1.0m라고 말할 때도 있고, 바로 다음 순간 1.03m라고 말할 때도 있습니다. 둘 중 하나가 반드시 거짓이라기보다, 센서에는 흔들림이 있습니다. 확률은 이 흔들림 속에서 "어느 값을 더 믿을 것인가?"를 정하는 언어입니다.

따라서 이 책에서 가장 중요하게 여기는 것은 공식 암기가 아닙니다. 먼저 감각을 잡는 것입니다. 점이 어디에 있는지, 방향이 어떻게 바뀌는지, 시간이 지나며 값이 어떻게 변하는지, 불확실한 센서값을 어떻게 받아들일지 몸으로 이해하는 것이 먼저입니다. 공식은 그다음에 붙여도 늦지 않습니다. 오히려 감각이 생긴 뒤에 공식을 보면, 기호들이 갑자기 의미를 갖기 시작합니다.

로봇의 행동을 수학으로 번역하기

로봇공학 수학을 배운다는 것은 현실의 행동을 숫자와 계산으로 번역하는 법을 익히는 일입니다. 처음에는 이 번역 과정이 낯설지만, 몇 가지 대표적인 장면을 보면 흐름이 보입니다.

로봇이 현재 위치에서 목표 지점으로 가려면 두 위치를 숫자로 표현해야 합니다. 현재 위치가 (x, y) = (1, 2)이고 목표 위치가 (4, 6)이라면, 로봇은 목표가 오른쪽으로 3만큼, 위쪽으로 4만큼 떨어져 있다는 사실을 계산할 수 있습니다. 이때 (3, 4)는 목표를 향하는 벡터입니다. 벡터의 크기는 거리이고, 벡터의 방향은 로봇이 바라봐야 할 방향입니다.

로봇이 몸을 돌리는 일은 회전으로 표현됩니다. 로봇이 정면을 기준으로 오른쪽 30도 방향을 바라보게 만들고 싶다면, 각도를 숫자로 다루어야 합니다. 센서가 로봇 몸체에 붙어 있다면 센서가 본 물체의 위치를 로봇 중심 기준으로 바꾸어야 하고, 다시 세상 전체 좌표 기준으로 바꾸어야 합니다. 이때 행렬이 등장합니다. 행렬은 여러 좌표 변환을 깔끔하게 묶어 주는 도구입니다.

로봇이 움직이는 동안 위치는 계속 변합니다. 1초 전 위치와 지금 위치가 다르다면 속도를 계산할 수 있습니다. 속도 명령을 계속 적용하면 다음 위치를 예상할 수 있습니다. 이 과정에는 미분과 적분의 감각이 들어 있습니다. 어려운 기호를 쓰지 않아도, 핵심은 간단합니다. 변화량을 시간으로 나누면 속도이고, 작은 이동을 계속 더하면 이동 경로가 됩니다.

센서는 로봇에게 세상을 알려 주지만, 센서값은 늘 조금씩 틀립니다. 바퀴가 미끄러지면 엔코더가 계산한 이동거리와 실제 이동거리가 달라질 수 있습니다. IMU는 회전을 감지하지만 시간이 지나면 오차가 쌓일 수 있습니다. 카메라는 조명이나 물체의 모양에 영향을 받습니다. 그래서 로봇은 하나의 숫자를 그대로 믿기보다, 여러 정보의 신뢰도를 따져 더 그럴듯한 상태를 추정해야 합니다. 이때 확률과 베이즈 추정, 칼만 필터 같은 개념이 필요해집니다.

마지막으로 로봇은 선택해야 합니다. 왼쪽으로 돌아갈지, 오른쪽으로 돌아갈지, 장애물을 얼마나 멀리 피할지, 목표까지 얼마나 빠르게 갈지 결정해야 합니다. 이 선택을 수학적으로 표현하면 비용 함수가 됩니다. 비용 함수는 어떤 선택이 얼마나 좋은지 또는 나쁜지 숫자로 평가하는 방법입니다. 로봇은 비용이 작은 방향, 즉 더 안전하고 효율적인 방향을 찾습니다. 이것이 최적화의 출발점입니다.

Python으로 확인하며 배우기

수학을 머릿속으로만 이해하려 하면 금방 막힙니다. 특히 로봇 수학은 움직임과 관계가 깊기 때문에 직접 그려 보고 움직여 보는 것이 중요합니다. 이 책에서 Python을 사용하는 이유가 여기에 있습니다.

Python은 복잡한 계산을 짧은 코드로 표현할 수 있고, 결과를 바로 그림으로 확인하기 좋습니다. NumPy를 사용하면 벡터와 행렬 계산을 쉽게 할 수 있습니다. Matplotlib을 사용하면 로봇의 위치, 방향, 경로를 2D 평면에 그릴 수 있습니다. 나중에는 센서 노이즈를 임의로 만들고, 추정 결과가 어떻게 좋아지는지도 눈으로 확인할 수 있습니다.

예를 들어 로봇의 위치 업데이트는 아주 단순한 코드로 시작할 수 있습니다.

x = x + vx * dt
y = y + vy * dt

여기서 x, y는 로봇의 위치이고, vx, vy는 각 방향의 속도이며, dt는 아주 짧은 시간 간격입니다. 이 두 줄은 단순해 보이지만 로봇 시뮬레이션의 중요한 뼈대입니다. 시간이 조금 지났을 때 위치가 얼마나 바뀌는지 계산하는 것이기 때문입니다.

처음에는 점 하나가 화면에서 움직이는 정도로 시작합니다. 그러다 방향 화살표를 붙이고, 목표 지점을 추가하고, 센서값에 노이즈를 넣고, 추정 알고리즘을 적용합니다. 마지막에는 로봇이 목표를 향해 움직이며 자신의 경로를 남기고, 센서 오차 속에서도 위치를 추정하는 2D 시뮬레이터로 확장됩니다.

중요한 것은 코드를 많이 외우는 것이 아닙니다. 코드가 수학의 의미를 보여 주는 작은 실험 장치가 되도록 사용하는 것입니다. 공식을 보고 끝내지 않고, 숫자를 바꾸고, 그래프를 보고, 로봇이 이상하게 움직이면 왜 그런지 생각해 보는 과정에서 진짜 이해가 생깁니다.

이 책에서 만들 것들

앞으로 우리는 거창한 로봇 운영체제나 복잡한 하드웨어를 바로 다루지 않습니다. 먼저 작은 2D 세계를 만들고, 그 안에서 로봇이 어떻게 움직이는지 차근차근 관찰합니다. 실제 로봇을 다루기 전의 연습장이라고 생각하면 됩니다. 이 연습장에서 수학적 개념을 안전하게 실험할 수 있습니다.

가장 먼저 Python 개발 환경을 준비하고, NumPy와 Matplotlib으로 숫자와 그림을 다루는 법을 익힙니다. 그다음 로봇의 위치를 점으로 표현하고, 속도에 따라 위치가 바뀌는 간단한 시뮬레이터를 만듭니다. 이때부터 수학은 더 이상 추상적인 설명이 아니라 화면 위에서 움직이는 점과 선이 됩니다.

이후에는 좌표와 벡터를 이용해 목표 방향을 계산합니다. 로봇이 목표 지점을 향해 고개를 돌리고, 일정한 속도로 다가가고, 목표에 가까워지면 멈추도록 만들어 봅니다. 이 과정에서 거리, 각도, 단위 벡터, atan2 같은 개념이 자연스럽게 등장합니다.

행렬을 배우는 부분에서는 좌표 변환을 다룹니다. 로봇 기준으로 앞에 있는 물체가 세상 기준으로는 어디에 있는지, 센서가 로봇 몸체에 붙어 있을 때 센서 좌표를 로봇 좌표로 어떻게 바꾸는지 살펴봅니다. 2D 회전 행렬과 동차 좌표계를 배우면 이동과 회전을 하나의 변환으로 묶을 수 있습니다.

미분과 적분을 배우는 부분에서는 위치, 속도, 가속도의 관계를 시뮬레이션합니다. 로봇이 시간에 따라 어떻게 움직이는지, 작은 시간 간격을 너무 크게 잡으면 어떤 오차가 생기는지, 속도 명령을 누적하면 경로가 어떻게 만들어지는지 확인합니다.

확률을 배우는 부분에서는 센서 노이즈를 직접 만들어 봅니다. 같은 위치를 측정해도 값이 흔들리는 상황을 만들고, 평균과 분산, 표준편차로 그 흔들림을 설명합니다. 그런 다음 베이즈 추정과 칼만 필터의 기본 아이디어를 이용해 측정값과 예측값을 결합하는 방법을 살펴봅니다.

마지막으로 최적화에서는 더 좋은 선택을 찾는 법을 배웁니다. 로봇이 지나갈 경로를 평가하고, 짧으면서도 부드럽고 장애물과 너무 가깝지 않은 경로를 고르는 문제를 생각해 봅니다. 최종 프로젝트에서는 앞에서 배운 좌표 변환, 목표 추종, 센서 노이즈, 위치 추정, 경로 시각화를 하나로 묶어 2D 로봇 시뮬레이터를 완성합니다.

ROS2, SLAM, 제어, 비전으로 가기 전의 수학 지도

많은 사람이 로봇을 배우기 시작하면서 ROS2, SLAM, 제어, 컴퓨터 비전 같은 단어를 먼저 만납니다. 이 주제들은 흥미롭고 강력하지만, 기초 수학 없이 들어가면 금방 안개 속에 들어선 느낌을 받을 수 있습니다. 메시지는 오가는데 좌표가 왜 뒤집히는지 모르겠고, SLAM 예제는 실행되는데 로봇 위치가 왜 흔들리는지 설명하기 어렵고, 제어기는 값을 넣었는데 로봇이 왜 진동하는지 감이 잡히지 않습니다.

이때 필요한 것은 모든 수학을 깊이 파고드는 것이 아니라, 로봇 문제를 읽을 수 있는 최소한의 지도입니다. 이 책에서 다루는 지도는 다음과 같이 연결됩니다.

  • 좌표와 벡터는 로봇, 센서, 목표, 장애물의 위치를 표현하는 기초다.

  • 행렬과 좌표 변환은 로봇 좌표계, 월드 좌표계, 카메라 좌표계를 이어 주는 언어다.

  • 미분과 적분은 위치, 속도, 가속도, 제어 입력의 관계를 이해하게 해 준다.

  • 확률과 추정은 노이즈가 있는 센서값 속에서 로봇의 상태를 더 믿을 만하게 계산하게 해 준다.

  • 최적화는 경로 계획, 보정, 추정, 학습에서 더 좋은 해를 찾는 기본 원리다.

ROS2를 사용할 때도 좌표계 변환을 이해해야 합니다. SLAM을 배울 때도 로봇의 위치와 센서 관측이 확률적으로 결합된다는 감각이 필요합니다. 제어를 공부할 때도 오차, 변화율, 시간 응답을 이해해야 합니다. 비전을 다룰 때도 카메라 좌표와 로봇 좌표 사이의 변환을 알아야 합니다.

따라서 이 책의 목표는 독자를 수학자로 만드는 것이 아닙니다. 로봇 문제를 만났을 때 "이건 좌표 변환 문제구나", "여기서는 오차가 누적되고 있구나", "이 센서값은 확률적으로 봐야겠구나", "이 경로는 비용 함수로 비교할 수 있겠구나" 하고 알아차릴 수 있게 만드는 것입니다. 이 감각이 생기면 더 어려운 기술을 배울 때도 길을 잃지 않습니다.

작은 세계에서 시작하기

실제 로봇은 복잡합니다. 바퀴는 미끄러지고, 센서는 흔들리고, 카메라는 빛에 민감하고, 모터는 명령한 대로 정확히 움직이지 않습니다. 처음부터 이 모든 복잡함을 한꺼번에 다루면 핵심을 보기 어렵습니다. 그래서 우리는 작은 세계에서 시작합니다.

처음 세계는 2D 평면입니다. 로봇은 점 하나일 수도 있고, 방향을 가진 작은 삼각형일 수도 있습니다. 목표 지점은 또 다른 점입니다. 장애물은 원이나 사각형으로 표현할 수 있습니다. 이 단순한 세계에서도 로봇공학의 중요한 질문은 거의 모두 등장합니다. 어디에 있는가, 어디로 가야 하는가, 얼마나 빨리 움직이는가, 센서값을 얼마나 믿을 수 있는가, 어떤 경로가 더 좋은가.

작은 세계에서 원리를 이해하면, 실제 세계로 확장할 준비가 됩니다. 2D 위치는 3D 위치로 확장되고, 평면 회전은 3D 회전으로 이어지며, 간단한 노이즈는 실제 센서 모델로 발전합니다. 목표 지점 하나를 따라가는 로봇은 여러 경유점을 지나는 로봇이 되고, 단순한 위치 추정은 SLAM의 기초 감각으로 이어집니다.

그러니 처음부터 어려운 공식을 완벽히 이해하려고 애쓰지 않아도 됩니다. 먼저 점을 찍고, 선을 그리고, 방향을 바꾸고, 조금씩 움직여 봅시다. 로봇 수학은 손으로 직접 움직여 볼수록 쉬워집니다. Python은 그 실험을 빠르게 반복하게 해 주는 좋은 도구입니다.

앞으로의 학습 방법

이 책을 읽을 때는 "왜 이런 공식이 나오지?"보다 "이 계산이 로봇의 어떤 행동을 설명하지?"라고 질문하는 편이 좋습니다. 수학 기호가 나오면 바로 겁먹지 말고, 그것이 위치인지, 방향인지, 변화인지, 불확실성인지 먼저 구분해 보세요. 대부분의 로봇 수학은 이 네 가지 감각 위에 놓여 있습니다.

코드를 실행할 때는 결과 그림을 유심히 보는 것이 중요합니다. 로봇이 목표와 반대 방향으로 움직인다면 각도 계산이나 좌표계 방향이 잘못되었을 수 있습니다. 경로가 덜덜 떨린다면 시간 간격이나 속도 명령이 너무 클 수 있습니다. 추정 결과가 센서값을 너무 따라가면 측정값을 과하게 믿는 것일 수 있고, 반대로 너무 둔하게 움직이면 모델을 과하게 믿는 것일 수 있습니다. 이런 현상 하나하나가 수학을 이해하는 단서입니다.

앞으로 각 장에서는 개념을 설명한 뒤, Python으로 작게 실험하고, 결과를 그림으로 확인하는 흐름을 따라갑니다. 처음에는 느리게 느껴질 수 있지만, 이 방식은 뒤로 갈수록 힘을 발휘합니다. 좌표와 벡터를 제대로 이해하면 행렬이 쉬워지고, 위치와 속도의 관계가 익숙해지면 시뮬레이션이 자연스러워지며, 센서 노이즈를 직접 만들어 보면 확률과 추정이 덜 낯설어집니다.

로봇은 결국 현실 세계에서 움직이는 존재입니다. 그래서 로봇 수학도 움직임 속에서 배울 때 가장 잘 이해됩니다. 이제 숫자로 위치를 표현하고, 코드로 움직임을 만들고, 그림으로 결과를 확인하면서 로봇의 기초 수학을 하나씩 쌓아 갈 준비를 해 봅시다.

책 목록

로봇을 위한 수학과 Python: 좌표에서 시뮬레이터까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기