Stanford AA274A Principles of Robotic Autonomy
Quick Summary
스탠퍼드 AA274A의 상태 기계 강의는 로봇 자율성을 구현하기 위해 입력 이력을 상태로 요약하고, 최소화·계층화·모듈화와 실패 대응으로 행동의 복잡성을 관리하는 방법을 설명한다.
영상 보기
클릭 전까지는 가벼운 미리보기만 먼저 불러옵니다.
🖼️ 인포그래픽

🖼️ 4컷 인포그래픽

💡 한 줄 결론
스탠퍼드 AA274A의 상태 기계 강의는 로봇 자율성을 구현하기 위해 입력 이력을 상태로 요약하고, 최소화·계층화·모듈화와 실패 대응으로 행동의 복잡성을 관리하는 방법을 설명한다.
📌 핵심 요점
- 상태는 행동에 필요한 이력의 요약이다. 상태 기계는 현재 입력뿐 아니라 과거 입력에 따라 출력이 달라지는 시스템을 표현한다. 상태·입력·출력 집합, 초기 상태, 상태 전이 함수와 출력 함수를 정의하는 모델링 틀이다.
- 정상 동작만 정의하면 실제 실패를 놓친다. 주차장 차단기에서 센서 무응답, 모순된 관측, 앞차에 붙어 진입하는 차량을 고려하지 않으면 위험한 동작이 생길 수 있다. 시험으로 누락된 상황을 찾고 상태·입력·출력을 보완해야 한다.
- 최소화는 같은 행동을 더 적은 상태로 표현한다. 출력과 전이 대상의 차이에 따라 동등성 클래스를 반복 분할한다. 강의의 010·110 검출 예제는 같은 입출력 행동을 네 상태로 줄이며, 세 번째 입력을 처리하면 초기 상태로 돌아간다. 유한 상태 기계는 무한한 계수 기억이 필요한 작업까지 표현할 수는 없다.
- 계층화와 모듈화는 구조 이해와 검증을 돕는다. 여러 상태를 상위 상태로 묶고 작은 상태 머신을 직렬·병렬·피드백으로 합성한다. 직렬 연결은 앞 머신의 출력과 다음 머신의 입력이 맞아야 하며, 병렬 연결은 같은 입력을 받아 결과를 결합한다.
- 구현에서는 상태 동작과 전이 정책을 명시하고 관찰해야 한다. PX4 사례는 전이도와 코드의 일치가 과제임을 보여준다. SMACH는 상태 실행 결과인 outcome을 전이와 연결하며, Viewer는 현재 상태와 전이를 관찰해 디버깅과 공유를 돕는다. 내비게이션에는 대기·계획·추종뿐 아니라 실패 감지와 복구도 필요하다.
🧩 배경과 문제 정의
- 로봇의 추론과 의사결정에는 현재 입력뿐 아니라 이전 입력의 이력까지 반영하는 모델이 필요하다. 상태 기계는 이력을 상태로 요약해 행동을 결정하는 기본 도구다.
- 상태 기계는 개념적으로 단순하지만, 실제 로봇에서는 누락된 예외 상황과 복잡한 전이 때문에 예상하지 못한 행동이 생길 수 있다.
- 필요한 행동을 유지하면서 상태 수를 줄이고, 계층화와 모듈화를 통해 이해와 정확성 검증을 쉽게 만드는 것이 핵심 설계 과제다.
🕒 시간순 섹션별 상세정리
1. 단순한 개념과 어려운 실무 디버깅
- 상태 기계는 로봇에 기본적인 추론 능력을 부여하는 도구지만, 복잡해지면 원치 않는 행동을 일으켜 산업 현장에서 디버깅에 많은 시간이 들 수 있다. [00:47]
- 기본 설계 기법과 패턴은 오류가 발생하기 쉬운 구조를 줄이는 데 도움이 된다. 개념을 이해하는 일과 실제 로봇에서 제대로 작동하게 만드는 일 사이에는 상당한 차이가 있다. [01:09]
2. 입력 이력에 의존하는 시스템의 모델
- 일반적인 함수는 주어진 입력을 출력으로 변환하지만, 상태 기계는 출력이 전체 입력 이력에 의존하는 시스템을 모델링한다. 입력의 과거가 동작에 영향을 준다는 점이 핵심이다. [02:06]
- 상태 기계 자체는 알고리즘이 아니라 모델링 틀이다. 마르코프 의사결정 과정이나 확률 모델처럼 문제를 표현하며, 이를 다루는 알고리즘은 별도로 설계해야 한다. [02:52]
3. 제어 프로그램 작성, 실패 분석, 다른 행위자 예측
- 상태 기계로 자동화 장치의 프로그램을 구성할 수 있다. ATM에서는 카드 감지, 카드 수용, 정보 읽기와 후속 작업의 순서를 상태 기계로 표현한다. [03:29]
- 자율주행차와 보행자의 상호작용을 상태 기계로 모델링하면, 자율 에이전트의 제어 알고리즘이 어떤 실패를 일으킬 수 있는지 분석할 수 있다. [04:08]
4. 정확성 증명과 데이터 학습으로 이어지는 연구
- 상태 기계는 실무의 제어·분석·예측뿐 아니라 정확성을 증명하거나 데이터에서 모델을 학습하는 연구의 대상이기도 하다. [05:30]
- 오래된 주제이지만 연구는 계속되고 있다. 2019년 크리스 매닝의 연구는 학습과 상태 기계를 결합하는 사례로 드러난다. [06:03]
5. 전체 이력을 압축하는 상태와 수학적 구성
- 가능한 입력 이력마다 출력을 직접 지정하면 이력의 경우의 수가 지수적으로 증가한다. 상태는 출력 예측에 필요한 이력의 정보를 간결하게 담아 이 문제를 줄인다. [06:31]
- 상태 기계는 상태 집합, 입력 집합, 출력 집합과 두 함수로 구성된다. 상태 전이 함수는 현재 상태와 입력을 다음 상태로, 출력 함수는 현재 상태와 입력을 출력으로 대응시킨다. [07:30]
6. 주차장 차단기가 만족해야 할 동작
- 차단봉의 물리적 위치는 위쪽, 아래쪽, 이동 중인 중간 위치로 구분한다. 센서는 차량의 진입 대기와 통과 여부를 감지하고, 장치는 차단봉 올리기·내리기·아무 동작도 하지 않기를 수행한다. [10:37]
- 무료 주차장으로 들어오는 차량의 유입 속도를 조절한다는 가정 아래, 차량이 진입하려 하면 차단봉을 올리고 통과할 때까지 열린 상태를 유지한 뒤 내려야 한다. [11:16]
7. 차단기의 상태·입력·출력 선택
- 같은 동작도 여러 상태 기계로 표현할 수 있다. 상태 수가 적으면 메모리를 덜 사용하며, 특히 구조를 이해하고 정확성을 검증하기 쉬워진다. [11:54]
- 차단기 제어 상태는 차량 대기, 차단봉 상승 중, 상승 완료, 하강 중의 네 가지로 나눈다. 필요한 동작을 만드는 최소한의 상태와 입력 표현을 찾는 데에는 설계상의 선택이 따른다. [12:26]
8. 정상 입력만으로는 표현되지 않는 이상 상황
- 센서를 반복해서 확인하는 구조에서는 센서가 값을 반환하지 않는 경우도 고려해야 한다. 이 상황을 표현하려면 단순한 차단기 예제에 없는 별도의 이상 상태가 필요하다. [13:59]
- 관측 결과가 서로 모순되는 경우도 처리 대상이다. 기본 동작을 설명하는 상태 기계는 이러한 예외를 생략하므로, 실제 시스템에 필요한 모든 상황을 담고 있지는 않다. [14:33]
9. 센서 입력에 따른 차단기의 정상 전이
- 그래프의 노드는 상태이고, 화살표에는 전이를 일으키는 입력과 대응 출력이 붙는다. 대기 중 차량이 없으면 동작 없이 머물고, 차량이 감지되면 올리기 출력을 내며 상승 상태로 이동한다. [14:48]
- 상승 중에는 차단봉 각도를 확인한다. 상단에 도달하지 않았으면 계속 올리고, 상단에 도달하면 상승 완료 상태로 전이한다. [15:24]
10. 뒤따르는 차량이 드러내는 실패와 반복 설계
- 앞차에 바짝 붙어 진입한 차량을 센서가 감지하지 못하면, 차량이 통과하는 도중 차단봉이 내려갈 수 있다. 기본 상태 기계에는 이 상황을 처리할 규정이 없다. [16:01]
- 상태 기계 설계는 시험 과정에서 빠뜨린 실패 유형을 찾고, 필요한 상태·입력·출력을 추가하는 반복 작업이다. 처음 설계할 때 예상하지 못한 상황이 구조를 복잡하게 만든다. [16:17]
11. 유한한 상태로 표현할 수 있는 행동의 한계
- 길이에 제한이 없는 문자열에서 여는 괄호와 닫는 괄호의 수가 균형을 이루는지 판별하려면, 괄호 수의 차이를 계속 구별해야 한다. 이 작업에 필요한 상태 수는 무한해질 수 있어 유한 상태 기계의 제약과 충돌한다. [17:08]
- 유한 상태 기계의 계산적 표현력은 튜링 기계보다 제한적이다. 모든 작업을 표현할 수는 없지만, 여전히 다양한 실용적 행동을 지정하는 데 널리 쓰인다. [18:13]
12. 복잡성과 정확성을 다루는 세 가지 설계 접근
- 상태 최소화는 원하는 행동을 잃지 않으면서 중복 상태를 제거한다. 입력 상태 기계와 같은 행동을 하는 더 적은 상태의 기계를 만드는 알고리즘을 사용한다. [18:54]
- 계층적 분해는 여러 상태를 상위 상태로 묶는다. 정보를 잃지 않으면서 전체 시스템의 행동을 이해하기 쉽게 만드는 접근이다. [19:58]
13. 동등 상태를 찾는 반복 분할
- 동등한 상태는 같은 입력에 같은 출력을 내며, 모든 입력 조합에서 같은 상태 또는 동등한 상태로 전이한다. 이런 상태를 합치면 행동을 유지하면서 상태 기계의 크기를 줄일 수 있다. [20:43]
- 단순한 최소화 방법은 모든 상태를 하나의 동등성 클래스로 묶는 가정에서 시작한다. 이후 출력이 다른 상태들을 서로 다른 클래스로 나눈다. [21:19]
14. 010과 110을 검출하는 기본 상태 기계
- 입력은 0과 1의 열이며, 세 번째 숫자를 읽었을 때 입력이 010 또는 110이면 1을, 다른 세 자리 조합이면 0을 출력해야 한다. [22:32]
- 직관적인 구성은 초기 상태에서 첫 입력에 따라 갈라지고, 두 번째 입력에 따라 다시 갈라지는 트리 구조다. 세 번째 입력까지 처리하면 검출 성공 여부와 관계없이 초기 상태로 돌아간다. [23:24]
15. 중복 분기를 합쳐 네 상태로 축소
- 기본 트리 구조는 상태 수가 최소가 아니다. 첫 입력이 0인지 1인지에 따라 나뉜 S1과 S2는 같은 역할을 하므로 동등 상태로 합칠 수 있다. [26:33]
- 전체 상태를 한 클래스로 묶은 뒤 출력이 다른 S4·S6를 먼저 분리한다. 이어 전이 대상을 비교하면 S1의 전이가 서로 다른 클래스에 도달하므로 추가 분할이 필요하다. [27:08]
16. 축소한 상태 머신의 시퀀스 인식 동작
- 축소된 상태 머신에서도 입력
010의 마지막0에서 출력이1이 되어 해당 시퀀스를 인식한다. [30:43] - 입력
110도 마지막0에서 출력이1이 된다. 두 시퀀스 이외의 입력은 인식하지 않는 동작을 확인한다. [31:00]
17. 최소화 알고리즘의 다항 시간 기준
- 알고리즘의 다항 시간 복잡도는 상태 수를 기준으로 하며, 구체적으로 상태 집합을 분할하는 횟수에 관한 설명이다. 앞서 사용한 트리를 생성하는 과정은 이 알고리즘에 포함되지 않는다. [31:33]
- 최소화 알고리즘의 정당성에는 증명이 필요하며, 상태 머신을 입력받아 최소 상태 수의 상태 머신을 만드는 도구도 존재한다. [31:46]
18. 계층화와 모듈 합성으로 큰 상태 머신 구성
- 여러 상태를 상위 상태로 묶고 상위 상태 사이의 전이를 정의하는 계층적 분해는 시스템의 구조를 이해하기 쉽게 만든다. [32:14]
- 작은 상태 머신들을 직렬로 연결하려면 앞 머신의 출력 집합이 다음 머신의 입력 집합과 맞아야 한다. 병렬 연결에서는 두 머신이 같은 입력 집합을 사용하고, 출력은 두 결과를 이어 붙인다. [33:04]
19. 선택적 도구 사용과 객체 지향 구현 패턴
- 기존 상태 머신 도구를 반드시 사용할 필요는 없다. 다만 일반적인 구현 패턴을 익히면 Zoox나 Waymo 같은 조직의 큰 코드베이스에서 상태 머신을 찾아 구조를 파악하는 데 도움이 될 수 있다. [35:55]
- 흔한 구현은 클래스로 상태 머신을 추상화하고, 현재 상태를 멤버 변수로 유지하는 방식이다. 일정 주기로 실행하는 메서드가 입력을 얻고 상태와 전이를 갱신한다. [36:35]
20. PX4의 비행 모드와 실제 전이 코드
- 드론용 오픈소스 비행 소프트웨어인 PX4는 착륙 완료, 착륙 중, 공중 대기 같은 비행 모드를 상태 전이도로 표현한다. 전이도와 실제 코드가 서로 일치하도록 관리하는 데 주의가 필요하다. [37:58]
commander.cpp의 반복 루프는 일정 주기로 실행되며 상태 전이를 처리한다. 전이 보조 함수는 acro 모드 요청 같은 입력에 따라 기체 상태를 갱신하고, 실제 전이는 그 밖의 여러 동작도 유발한다. [39:21]
21. 내비게이터의 조건문을 상태 머신으로 인식하기
- 과제의
navigator.py도 상태 머신이다.run함수의 조건문은 현재 모드에 따라 정렬 여부나 목표 근접 여부를 확인하고 다음 모드로 전환한다. [40:51] - ROS 도구를 활용하려면 문제를 도구가 요구하는 형식으로 표현해야 한다. 상태와 전이를 명시하는 SMACH를 사용하면 구현을 추상화하고, 상태 머신을 시각화·관찰하거나 다른 사람과 공유할 수 있다. [42:14]
22. 상태 구현의 핵심은 실행 결과 정의
- SMACH의 주요 구성 요소는 상태와 컨테이너다. 상태는
smach.State를 상속해 생성자와execute를 구현하며,execute는 실행 결과인 outcome을 반환해야 한다. [43:26] - 생성자에서는 가능한 outcome을 선언한다. 성공과 실패처럼 상태 실행의 결과를 구분하면 각 결과를 서로 다른 전이에 연결할 수 있다. [44:17]
23. 컨테이너에 상태와 전이 규칙 연결
- 컨테이너는 상태 머신을 구성하는 추상화다. 컨테이너를 만든 뒤 개별 상태를 추가하고, 상태의 outcome에 대응하는 전이를 지정한다. [44:34]
- Foo와 Bar 예제에서는 특정 outcome이 Bar로의 전이를 일으킨다. 상태의 결과를 다른 상태로 연결할 수도 있고, 컨테이너 자체의 결과로 연결할 수도 있다. [45:34]
24. 컨텍스트 안에서 상태를 추가하고 실행하기
- 기본 예제는 ROS 노드를 초기화한 뒤 상태 머신 컨테이너와 전체 머신의 outcome을 정의한다. [47:17]
- Python의
with구문은 설정과 정리를 수행하는 실행 문맥을 만든다. SMACH에서는 그 블록 안에서 추가하는 상태들이 어느 상태 머신에 속하는지 지정하는 역할을 한다. [48:28]
25. 멈춘 로봇을 복구할 실패 대응 상태
- 내비게이터를 SMACH로 다시 구성한 예제는 가능한 구현 중 하나이며, 기존의 모든 상태를 포함하지는 않는다. 더 복잡한 프로젝트에서 상태를 구성하는 방식으로 활용할 수 있다. [50:26]
- 과거 프로젝트에서는 로봇이 구석에 갇히거나 EKF와 센서에 문제가 생겨도 이를 감지하지 못해 상태 머신이 멈추곤 했다. 위치 추정을 초기화하고 필요하면 조금 후진한 뒤 재개하는 복구 상태 같은 실패 대응을 넣는 것이 도움이 될 수 있다. [51:05]
26. 대기·계획·추종으로 나눈 내비게이션 동작
- 대기 상태는 명령을 기다리면서 구동기에 속도
0을 보내 로봇을 정지시킨다. [51:31] - 계획 상태의 outcome은 계획 계산 성공과 실패, 새 목표 명령 수신, 새 지도 수신, 계산 오류 등을 구분한다. 새 지도는 재계획이 필요할 수 있음을 뜻한다. [52:04]
27. 상태 동작과 전이 정책을 분리하기
- 상태별 동작을 추상화하면 전이 규칙을 적은 코드로 표현할 수 있어 변경과 테스트가 쉬워진다. 대기 중 아무 일도 없으면 대기를 유지하고, 새 명령을 받으면 계획 상태로 이동하도록 정의할 수 있다. [53:15]
- 계획에 성공하면 추종 상태로 이동하고, 실패하면 유효한 계획이 없으므로 멈춰서 기다리는 전이를 구성할 수 있다. [53:30]
28. SMACH Viewer로 실행 중인 상태와 전이 관찰
- 수정한 내비게이터와 시뮬레이션을 실행한 뒤
smach_viewer를 사용하면 상태 머신 구조를 시각화할 수 있다. SMACH 형식으로 구현한 구조를 활용하므로 별도의 시각화 작업 부담이 작다. [55:18] - 새 계획을 주면 계획 상태를 빠르게 거쳐 추종 상태로 이동하고, 이후 대기 상태로 돌아오는 과정을 화면에서 확인할 수 있다. [56:12]
29. 실패 모드와 디버깅을 고려한 구현 규율
- SMACH에는 오픈소스 소프트웨어 특유의 자잘한 문제가 있을 수 있지만, 전반적으로 활용할 만한 도구로 평가된다. Viewer를 통한 시각화와 모니터링도 함께 얻을 수 있다. [56:59]
- 실패 모드를 빠뜨린 단순한 설계와 거대한
navigator.py는 프로젝트 마감 압박 속에서 오류와 문제 전이를 찾기 어렵게 했다. 더 체계적으로 프로그래밍하는 것이 수업의 학습 목표이며, SMACH는 시간이 허락하면 시도할 만한 비교적 쉽고 강력한 도구로 권장된다. [58:02]
30. 불확실성을 반영한 의사결정으로 확장
- 이후에는 위치 추정과 지도 작성에서 다루던 불확실성을 의사결정 계산에 반영하는 문제로 확장한다. 다음 주제는 마르코프 의사결정 과정, 동적 계획법, 근사 동적 계획법이다. [58:32]
- 추수감사절 이후 마지막 강의에서는 강화학습을 다룰 예정이다. 이는 후속 과목 274B의 학습 기반 인지와 제어를 미리 살펴보는 수준으로 드러난다. [58:50]
🧾 결론
- 상태 기계의 실용성은 필요한 이력을 적절한 상태로 표현하고, 입력에 따른 행동을 명확하게 정의하는 데 있다.
- 상태 최소화는 행동을 보존하면서 중복을 줄이는 작업이다. 계층화와 모듈화는 큰 구조를 이해하고 검증하기 쉽게 만든다.
- 로봇에서 제대로 작동하는 설계는 정상 경로와 함께 센서 이상, 계획 실패, 정체와 복구 경로를 다뤄야 한다.
- 도구 사용 자체가 필수는 아니다. 상태·전이·실행 결과를 명시하고 실제 동작을 관찰할 수 있는 구현 규율이 중요하다.
📈 투자·시사 포인트
- 로봇·자율주행 기술을 검토할 때 정상 시연과 함께 실패 감지, 복구 전이, 예외 상황 시험을 확인하는 기술 평가 관점을 얻을 수 있다.
- 모듈 교체와 개별 동작 검증이 가능한 구조인지 살펴보면, 시스템 변경과 유지보수를 어떻게 다루는지 이해하는 데 도움이 된다.
- 전이도·코드의 일치와 실행 상태 관찰 기능은 복잡한 로봇 소프트웨어의 디버깅 체계를 평가할 구체적인 항목이다.
- 강의는 기업 가치나 수익성을 분석하지 않는다. PX4·Zoox·Waymo의 언급은 구현 사례와 코드 구조 설명의 맥락으로 읽어야 한다.
⚠️ 불확실하거나 확인이 필요한 부분
- 주차장 차단기의 기본 상태 기계는 센서 무응답과 모순된 관측 등을 생략한 예제다. 제시된 정상 전이만으로 실제 장치의 안전성을 판단할 수 없다.
- PX4의 미해결 이슈 수와 구현 논쟁은 2019년 강의 당시의 설명이다. 현재 프로젝트 상태를 나타내는 수치로 사용하려면 별도 확인이 필요하다.
- 최소화 알고리즘의 다항 시간 설명은 주어진 상태 기계의 상태 수를 기준으로 한다. 예제의 초기 트리를 생성하는 비용까지 포함한 설명은 아니다.
- 자막 기반 정리: 타임스탬프가 있는 자막을 기준으로 정리했으며, 고유명사·수치·인용은 원문 확인 필요 시 별도 검증한다.
- 영상 속 주장: 발표자의 해석·전망·비교는 확인된 외부 사실이 아니라 영상 속 주장으로 분리해 읽는다.
- 검증 필요: 수치, 기업 실적, 정책·시장 전망은 발행 전 최신 자료로 별도 검증이 필요하다.
✅ 액션 아이템
- 구현할 로봇 동작의 상태·입력·출력·초기 상태를 나열하고, 상태 전이와 출력 규칙을 표로 정리한다.
- 센서 무응답, 모순된 관측, 연속 차량 진입, 계획 실패와 로봇 정체를 시험 시나리오에 포함한다.
- 출력과 후속 전이가 동등한 상태를 찾아, 요구한 입출력 행동을 유지하면서 합칠 수 있는지 확인한다.
- 대기·계획·추종의 동작과 전이 정책을 분리하고, 실패 시 대기·재계획·복구 중 어느 경로로 이동할지 명시한다.
❓ 열린 질문
- 어떤 입력 이력까지 상태에 보존해야 요구 동작을 유지하면서 상태 수를 줄일 수 있을까?
- 센서 이상이나 계획 만료가 발생했을 때, 복구·재계획·정지 대기를 선택하는 기준은 어떻게 정할까?
- 계층화와 모듈 합성 이후에도 전체 시스템이 원하는 행동을 유지한다는 것을 어떻게 검증할까?