3.5 안전한 텔레오퍼레이션 루프

그림 3-3. 안전 계층을 포함한 Leader-Follower 제어 루프

3.5.1 안전 계층

안전은 하나의 if 문이 아니라 독립적인 방어층으로 구성한다.

계층검사실패 시 동작
입력 무결성이름, 길이, NaN/Inf, 타임스탬프프레임 폐기
캘리브레이션장치 ID, 버전, 관절 순서제어 시작 거부
위치 제한관절별 soft limitclamp 및 경고
속도 제한프레임 간 최대 변화slew-rate 제한
통신 워치독마지막 유효 명령의 나이hold 또는 torque off
데드맨 스위치조작자 지속 입력hold
독립 하드웨어전원 차단/E-stop모터 전력 차단

code/safe_teleop_core.py는 하드웨어와 분리된 순수 Python 예제다. JointSafetyFilter가 이름 기반 재정렬, 위치 clamp, 속도 제한, timeout을 적용한다. --dry-run과 같은 단계 없이 실물 송신 함수를 연결하지 않는다.

3.5.2 주기와 지연

목표 제어 주기가 50 Hz라면 한 주기는 20 ms다. 전체 지연은 대략

Tloop=Tread+Tmap+Tsafety+Twrite+TsleepT_{loop}=T_{read}+T_{map}+T_{safety}+T_{write}+T_{sleep}

이다. 평균뿐 아니라 최악 지연과 jitter를 기록해야 한다. 다음 원칙을 적용한다.

  • 단조 시계(monotonic clock)로 timeout을 판단한다.
  • 수신 메시지의 ROS time과 로컬 수신 시각을 모두 기록한다.
  • 늦은 명령을 한꺼번에 재생하지 않고 가장 최신 유효 상태만 사용한다.
  • 통신 실패 후 자동 재개하지 말고 재정렬/재승인을 요구한다.
이 장의 예제 코드·설정 파일 (6)

이 장의 자가 점검·가상실습