지능 소프트웨어로봇 센서 인터페이스 개발로봇 센서 프로토콜 설계
출제기준 좌표4·3·2·2
4과목 · 지능 소프트웨어

통신 프로토콜 설계

로봇 센서 인터페이스 개발로봇 센서 프로토콜 설계
# 지능소프트웨어
01

📌 개요

  • 센서 데이터를 담아 나르는 메시지 규격을 직접 설계하는 방법 — 기존 표준(UART·CAN 등)이 "전선 위의 규칙"이라면 그 위에 얹는 계층
  • 자작 센서 보드·커스텀 장치와 통신할 때 반드시 필요한 기술
  • 출제 포인트: 프레임 구조(시작–ID–길이–데이터–체크섬), 오류 검출 수단의 강도 비교, 엔디안, 폴링 vs 스트리밍, 대역폭 계산
02

📖 핵심 개념

메시지 프레임의 표준 해부도 (시험 단골)

바이트 스트림에서 "어디부터 어디까지가 한 메시지인지"를 구분하는 구조:

필드 역할
시작 바이트(SOF) 프레임의 시작 표시 (예: 0xAA 0x55) — 스트림 중간에서도 동기화 회복
ID/주소 메시지 종류 또는 대상 장치 구분
길이(Length) 데이터부의 크기 — 어디까지 읽을지 알려 줌
데이터(Payload) 실제 측정값들
체크섬/CRC 전송 오류 검출 — 수신 측이 재계산해 대조
(종료 바이트) 프레임 끝 표시 (선택)

수신기는 "시작 바이트 탐색 → 길이만큼 수신 → 체크섬 검증 → 파싱"의 상태 기계로 구현된다 (→ 로봇센서 드라이버 구현).

오류 검출의 강도 사다리 (시험 단골)

  • 패리티 비트: 1의 개수의 홀짝 — 1비트 오류만 검출, 2비트 오류는 놓침 (가장 약함)
  • 체크섬(Checksum): 바이트 합 — 간단하지만 상쇄되는 오류 조합을 놓칠 수 있음
  • CRC(순환 중복 검사): 다항식 나눗셈 기반 — 연속(버스트) 오류까지 강력 검출, 산업 표준 (CAN·이더넷 내장) — 가장 강함
  • 검출 강도: 패리티 < 체크섬 < CRC. 오류 "정정"까지 하려면 ECC 계열이 필요하지만 센서 통신은 보통 검출 + 폐기/재요청으로 충분

데이터 인코딩의 결정 사항

  • 바이너리 vs ASCII(텍스트): 바이너리는 작고 빠름(같은 값을 적은 바이트로), ASCII는 사람이 읽기 쉬움(디버깅 용이) — 대역 제한 환경은 바이너리가 정석
  • 엔디안(Endianness) (시험 포인트): 다바이트 값의 바이트 순서 — 리틀 엔디안(하위 바이트 먼저) vs 빅 엔디안(상위 바이트 먼저, '네트워크 바이트 순서'). 양측이 다르면 0x1234가 0x3412로 읽힌다 — 프로토콜 문서에 반드시 명시
  • 스케일링(고정소수점): 실수 25.37 ℃를 정수 2537(×100)로 보내고 수신 측이 나눔 — 부동소수점 없이 소수 표현, 대역 절약
  • 부호(signed/unsigned)·단위(단위계 명시)도 문서화 대상

통신 방식의 설계

  • 폴링(Polling, 요청–응답): 마스터가 물을 때만 답함 — 흐름 통제 쉬움, 왕복 지연·오버헤드
  • 스트리밍(주기 송신): 센서가 정해진 주기로 계속 송신 — 지연 최소, 수신 측이 소화해야 함
  • 이벤트 구동: 값이 변할 때·문턱 초과 시만 송신 — 대역 절약, "무소식 = 정상인지 고장인지" 모호 → 하트비트(주기적 생존 신호) 병행 (시험 포인트)
  • 타임아웃·재시도: 응답 없음의 처리 규칙, 시퀀스 번호로 손실·중복 감지

대역폭 예산 계산 (계산 단골)

메시지 크기 × 전송 주기가 링크 용량 안에 들어야 한다.

  • 예: 20바이트 메시지를 100 Hz로 → 20 × 100 = 2,000 B/s = 16 kbps (스타트·스톱 비트 등 오버헤드 별도)
  • UART 115200 bps 링크라면 실효 대역의 일부만 사용 — 여유(마진)를 남기는 것이 원칙. 꽉 채우면 지터·손실이 생긴다

프로토콜의 문서화와 진화

  • 프로토콜 명세서 = 센서판 ICD (→ 로봇 시스템 통합 설계): 프레임 구조, 필드 정의(단위·스케일·엔디안), 시퀀스, 오류 처리 규칙
  • 버전 필드와 예약(Reserved) 필드: 미래 확장을 위해 미리 확보 — 버전 불일치 감지로 구버전 장치와의 혼선 방지
  • 설계 검증: 프로토콜 시뮬레이터·패킷 캡처로 문서와 구현의 일치 확인 (→ 로봇 시스템 평가절차)
03

📊 다이어그램 · 수식

메시지 프레임 구조

DIAGRAM
flowchart LR
    SOF["시작 바이트
0xAA 0x55"] --> ID["ID/주소"] --> LEN["길이"] --> PAY["데이터
(측정값·스케일링)"] --> CRC["체크섬/CRC"]

수신 파서의 상태 기계

DIAGRAM
flowchart LR
    W["시작 바이트 대기"] -- SOF 발견 --> H["헤더(ID·길이) 수신"] --> D["길이만큼 데이터 수신"] --> C{"체크섬 일치?"}
    C -- 예 --> P["파싱·발행"] --> W
    C -- 아니오 --> X["프레임 폐기·오류 계수"] --> W
04

🎯 핵심 요약 · 암기 포인트

익힘 0 / 11카드를 눌러 뒤집고, 앞면에서 아는지 표시하세요.
Q · 1
메시지 프레임의 표준 구성은?
A
시작 바이트(SOF) – ID/주소 – 길이 – 데이터 – 체크섬/CRC
Q · 2
시작 바이트(SOF)의 역할은?
A
프레임 경계 표시 — 스트림 중간에 끼어들어도 동기화 회복 가능
Q · 3
오류 검출 수단의 강도 순서는?
A
패리티 < 체크섬 < CRC — CRC는 연속(버스트) 오류까지 강력 검출
Q · 4
패리티 비트의 한계는?
A
1비트 오류만 검출 — 2비트 오류는 통과
Q · 5
리틀 엔디안과 빅 엔디안의 차이는?
A
리틀=하위 바이트 먼저, 빅=상위 바이트 먼저(네트워크 바이트 순서) — 불일치 시 값이 뒤집혀 읽힘
Q · 6
스케일링(고정소수점) 전송이란?
A
실수를 정수×배율(25.37→2537)로 보내 부동소수점 없이 소수 표현, 대역 절약
Q · 7
폴링과 스트리밍의 구분은?
A
폴링=요청 시에만 응답(통제 쉬움·지연 있음), 스트리밍=주기 자동 송신(지연 최소)
Q · 8
이벤트 구동 송신의 맹점과 대책은?
A
무소식이 정상인지 고장인지 모호 — 하트비트(주기 생존 신호) 병행
Q · 9
대역폭 계산 예: 20바이트 × 100 Hz는?
A
2,000 B/s = 16 kbps (오버헤드 별도) — 링크 용량에 마진을 남겨야 함
Q · 10
프로토콜 명세서에 반드시 담을 항목은?
A
프레임 구조, 필드 정의(단위·스케일·엔디안), 시퀀스, 오류 처리, 버전·예약 필드
Q · 11
바이너리 인코딩과 ASCII 인코딩의 선택 기준은?
A
바이너리=작고 빠름(대역 제한), ASCII=사람이 읽기 쉬움(디버깅)
05

✏️ 예상문제

1. 센서 메시지 프레임에서 수신 측이 "데이터부를 어디까지 읽어야 하는지" 알게 해 주는 필드는?

① 시작 바이트 ② 길이(Length) 필드 ③ 체크섬 ④ 예약 필드

정답 및 해설

정답: ② 길이 필드가 있어야 가변 길이 데이터의 끝을 알고 그 뒤의 체크섬 위치도 정해진다. 시작 바이트는 프레임 경계 동기화, 체크섬은 오류 검출 담당이다.

2. 오류 검출 능력이 강한 순서로 옳게 나열한 것은?

① 패리티 > 체크섬 > CRC ② CRC > 체크섬 > 패리티 ③ 체크섬 > CRC > 패리티 ④ 세 방식 모두 동일하다

정답 및 해설

정답: ② 패리티는 1비트 오류만, 합산 체크섬은 상쇄 조합을 놓칠 수 있고, 다항식 기반 CRC는 버스트 오류까지 강력하게 검출한다. CAN·이더넷이 CRC를 내장하는 이유다.

3. 16비트 값 0x1234를 리틀 엔디안으로 전송할 때 바이트 순서는?

① 0x12, 0x34 ② 0x34, 0x12 ③ 0x21, 0x43 ④ 0x43, 0x21

정답 및 해설

정답: ② 리틀 엔디안은 하위 바이트(0x34)를 먼저 보낸다. 상위 바이트 먼저(0x12, 0x34)는 빅 엔디안(네트워크 바이트 순서)이다. 송수신 측의 엔디안이 다르면 값이 뒤집히므로 프로토콜 문서에 반드시 명시한다.

4. 이벤트 구동(값 변화 시에만 송신) 방식의 센서에서 하트비트를 병행하는 이유는?

① 대역폭을 더 쓰기 위해 ② 값이 오래 안 변할 때 "정상 침묵"과 "고장 침묵"을 구별하기 위해 ③ 체크섬을 대신하기 위해 ④ 엔디안을 통일하기 위해

정답 및 해설

정답: ② 이벤트 구동의 맹점은 무소식의 해석이다. 주기적 생존 신호(하트비트)가 있으면 하트비트마저 끊겼을 때를 고장으로 판정할 수 있다 — 타임아웃 기반 고장 감지의 기초다.

5. 50바이트 메시지를 200 Hz로 전송하는 센서의 데이터율은? (오버헤드 무시)

① 1 kB/s ② 4 kB/s ③ 10 kB/s ④ 100 kB/s

정답 및 해설

정답: ③ 50 × 200 = 10,000 B/s = 10 kB/s (= 80 kbps). 링크 용량과 대조해 마진을 확인하는 것이 프로토콜 설계의 기본 산수다 — 용량을 꽉 채우면 지터와 손실이 생긴다.

06

🔗 관련 노트

로봇소프트웨어개발기사 필기 · 학습 교재출제기준 2025.1.1 – 2027.12.31