게임 화면은 보통 1초에 60번, 한 프레임에 16밀리초 남짓으로 그려요. 익숙한 시간 단위였는데, 산업용 로봇의 제어 신호는 1밀리초마다 오간다는 걸 배웠어요. 익숙한 세계보다 16배 빠른 주기예요.
1ms 주기 안에서 일어나는 일
산업용 로봇의 모션 컨트롤러와 서보 드라이브는 1 kHz 주기로 지령과 피드백을 주고받아요. 서보 내부는 더 빠른 계층으로 나뉘어요.
어느 계층이 무엇을 맡나
바깥의 위치 루프가 통신 주기와 맞물려요.
ROS 2는 소프트 실시간이라 토픽이 수십~수백 Hz로 돌고 지터 보장은 없어요. 1 ms 하드 실시간 루프는 ROS 2가 아니라 그 아래 드라이버·필드버스 계층이 담당하고, ROS 2는 그 위에서 계획·인지·감시를 맡아요.
지터가 실시간성을 좌우해요
처음엔 “요즘 네트워크면 1 ms쯤 되지 않나” 싶었는데, 문제는 속도가 아니라 지터(jitter), 즉 주기의 흔들림이었어요.
평균이 아니라 최악 지연이 기준이에요
그래서 로봇은 "1 ms 안에 반드시 도착"을 프로토콜 수준에서 보장하는 결정론적 필드버스를 써요.
BLDC 모터
로봇 관절을 돌리는 모터로 BLDC(브러시리스 DC 모터)를 배웠어요. 브러시(기계 접점)로 전류 방향을 바꾸는 대신, 드라이버가 회전자 위치를 읽어 전자적으로 정류해요.
| 브러시드 | BLDC | |
|---|---|---|
| 정류 | 기계 접점 | 드라이버가 전자적으로 |
| 수명·효율·정숙성 | 브러시 마모 있음 | 좋음 · 스파크 없음 |
| 비용 | 낮음 | 드라이버가 필수라 올라감 |
| 쓰임 | 저가 취미용 서보 | 산업·휴머노이드급 관절 |
산업급 관절은 BLDC와 감속기, 엔코더가 한 몸인 액추에이터 모듈이에요.
파일 입출력에서 남길 것 둘
open()의"w"는 기존 내용을 지우는 모드예요. 로그처럼 쌓는 파일은"a"(append)를 쓰고, Windows에서는encoding="utf-8"을 명시하지 않으면 다른 환경에서 파일이 깨져요.*args/**kwargs는 같은 기호가 정의부에서는 인자를 모으고 호출부에서는 풀어요. 래퍼 함수가 원본 함수의 인자를 그대로 전달할 때 써요.
전날 파이썬 재학습은 참조 시맨틱과 가변 기본값 — 다른 언어 쓰다 걸린 파이썬에, 다음 날 진짜 로봇 데이터로 드릴을 만든 이야기는 float32 비교와 import 실행 모델 — 파이썬이 조용히 틀리는 자리에 있어요.