hello, robot

게임 화면은 보통 1초에 60번, 한 프레임에 16밀리초 남짓으로 그려요. 익숙한 시간 단위였는데, 산업용 로봇의 제어 신호는 1밀리초마다 오간다는 걸 배웠어요. 익숙한 세계보다 16배 빠른 주기예요.

1ms 주기 안에서 일어나는 일

산업용 로봇의 모션 컨트롤러와 서보 드라이브는 1 kHz 주기로 지령과 피드백을 주고받아요. 서보 내부는 더 빠른 계층으로 나뉘어요.

어느 계층이 무엇을 맡나
바깥의 위치 루프가 통신 주기와 맞물려요.
ROS 2수십~수백 Hz · 소프트 실시간 · 계획·인지·감시필드버스 (EtherCAT 등)결정론적 · 1 ms 안에 반드시 도착을 보장위치 루프약 1 kHz · 통신 주기와 맞물림속도 루프더 빠름전류 루프수십 kHz"ROS 2로 1 ms 제어를 하나요?"의 답은 "아니요, 그건 아래층 일이에요"가 돼요.배우는 코드가 어느 계층에서 도는지 아는 것만으로 로봇 소프트웨어의 지도가 한 장 생겨요.

ROS 2는 소프트 실시간이라 토픽이 수십~수백 Hz로 돌고 지터 보장은 없어요. 1 ms 하드 실시간 루프는 ROS 2가 아니라 그 아래 드라이버·필드버스 계층이 담당하고, ROS 2는 그 위에서 계획·인지·감시를 맡아요.

지터가 실시간성을 좌우해요

처음엔 “요즘 네트워크면 1 ms쯤 되지 않나” 싶었는데, 문제는 속도가 아니라 지터(jitter), 즉 주기의 흔들림이었어요.

평균이 아니라 최악 지연이 기준이에요
그래서 로봇은 "1 ms 안에 반드시 도착"을 프로토콜 수준에서 보장하는 결정론적 필드버스를 써요.
결정론적 필드버스1 ms 안에 반드시 도착보장 없는 네트워크평균은 더 빠를 수도 있어요지연지연문제는 속도가 아니라 지터, 즉 주기의 흔들림이에요.평균이 아무리 빨라도 가끔 늦게 도착하는 패킷 하나가 제어를 진동과 궤적 오차로 무너뜨려요.게임의 프레임 드랍은 눈에 거슬리고 끝나지만, 로봇의 신호 드랍은 물리적 사고가 돼요.

BLDC 모터

로봇 관절을 돌리는 모터로 BLDC(브러시리스 DC 모터)를 배웠어요. 브러시(기계 접점)로 전류 방향을 바꾸는 대신, 드라이버가 회전자 위치를 읽어 전자적으로 정류해요.

브러시드BLDC
정류기계 접점드라이버가 전자적으로
수명·효율·정숙성브러시 마모 있음좋음 · 스파크 없음
비용낮음드라이버가 필수라 올라감
쓰임저가 취미용 서보산업·휴머노이드급 관절

산업급 관절은 BLDC와 감속기, 엔코더가 한 몸인 액추에이터 모듈이에요.

파일 입출력에서 남길 것 둘

  • open()"w"기존 내용을 지우는 모드예요. 로그처럼 쌓는 파일은 "a"(append)를 쓰고, Windows에서는 encoding="utf-8"을 명시하지 않으면 다른 환경에서 파일이 깨져요.
  • *args/**kwargs는 같은 기호가 정의부에서는 인자를 모으고 호출부에서는 풀어요. 래퍼 함수가 원본 함수의 인자를 그대로 전달할 때 써요.

전날 파이썬 재학습은 참조 시맨틱과 가변 기본값 — 다른 언어 쓰다 걸린 파이썬에, 다음 날 진짜 로봇 데이터로 드릴을 만든 이야기는 float32 비교와 import 실행 모델 — 파이썬이 조용히 틀리는 자리에 있어요.