작년에 로봇 동아리 활동을 하면서 로봇(모션 제어보드)과 보드 간의 통신 개발을 주로 담당했었다.
시간이 많이 흘렀지만, 지금이라도 작년에 내가 통신 개발을 하면서 공부했던 내용을 다시 살펴 보면서 그 내용들을 다시 한 번 점검하고 정리하는 시간이 필요할 것 같아
이번 "Raspberry Pi(라즈베리파이)"포스팅을 계획하게 되었다.
이번 포스팅에서는 라즈베리파이와 제어보드 간의 통신을 위해 사용한 개념인 "시리얼 통신(Serial Communication)"에 대해 다루어 보려고 한다.
시리얼 통신이란 직역하면 "직렬 통신"으로 "병렬 통신"과는 반대되는 통신 개념이다.
먼저, 병렬 통신의 개념부터 간략하게 살펴 보자.
- 병렬 통신(Parallel Communication)
여러 개의 병렬로 구성된 채널을 통해 동시에 여러 개의 데이터 신호를 보내는 방식
[사진 출처: 위키백과]
병렬 통신의 원리와 위 그림을 토대로 병렬 통신은 한 번에 여러 개의 데이터를 전송하기 때문에 속도가 빠르다는 점을 장점으로 꼽을 수 있다.
하지만, 송신자(Transmitting side)와 수신자(Receiving side) 간의 여러 개의 채널을 구성하거나 거리가 먼 경우 현실적으로 사용하기 어렵고 비용이 많이 든다는 점을 단점으로 꼽을 수 있다.
다음으로 직렬 통신에 대해 알아 보자.
- 직렬 통신(Serial Communication)
하나로 구성된 채널을 통해 순차적으로(연속적으로) 하나의 비트 단위로 데이터를 전송하는 방식
[사진 출처: 위키백과]
직렬 통신의 원리와 위 그림을 토대로 병렬 통신과 달리 직렬 통신은
송신자와 수신자 간의 채널을 구성하거나 거리가 멀더라도 사용하기 쉽고 드는 비용이 적다는 점을 장점으로 꼽을 수 있다.
하지만, 병렬 통신에 비해 한 번에 처리하는 데이터가 적기 때문에 속도가 느리다는 단점이 있다.
위 통신 원리를 토대로 동아리 활동 당시 시리얼 통신 원리를 이용하여 통신 개발을 진행하였다.
통신 개발은 로봇에 장착된 카메라를 통해 실시간으로 인식한 정보를 라즈베리파이를 통해 로봇의 모션을 제어하는 보드에 전달하도록 하는 프로토콜을 개발하는 것이다.
다시 말해, 라즈베리파이가 데이터를 전송하면 모션 제어보드는 그 데이터에 맞는 동작을 수행하고 동작이 종료되면 종료 신호 데이터를 라즈베리파이에 전송하는 방식의 프로토콜이다.
간단하게 그림으로 나타내면 다음과 같다.
이 프로토콜 원리를 기반으로 초기에 개발을 진행하였을 때 로봇이 동작을 수행하지 않거나 동작 수행 속도가 너무 느린 문제가 있었다.
원인을 찾기 위해 자료 조사를 하던 중
"동기(Synchronous)"와 "비동기(Asynchronous)" 개념을 알게 되었다.
각각의 개념은 다음과 같다.
- 동기(Synchronous) 통신
어떠한 요청을 보냈을 때 그 요청에 대한 응답을 받고 다음 요청을 보내는 통신 방식
- 비동기(Asynchronous) 통신
어떠한 요청을 보냈을 때 그 요청에 대한 응답을 받지 않고도 다음 요청을 보내는 통신 방식
동기 통신은 요청에 대한 응답이 올 때까지는 다른 요청을 보내지 못하고 대기해야 한다는 것으로 해석할 수 있다.
반대로, 비동기 통신의 개념은 요청에 대한 응답이 오지 않아도 다른 요청을 보낼 수 있기 때문에 대기하는 시간이 없다는 것으로 해석할 수 있다.
이 개념을 익히고 위에서 얘기했던 로봇이 동작을 수행하지 않거나 동작이 느린 원인을 다시 생각해 보았다.
😲 그렇다. 나는 동기식 통신 원리를 적용하여 개발을 했던 것이다.
카메라를 통해 실시간으로 인식한 정보를 라즈베리파이를 통해 보드에 전송하면 현재 동작을 모두 마친 후에야 다음 동작을 할 수 있었던 것이다.
(특정 동작은 여러 개의 구분 동작으로 이루어져 있다.)
또한, 모든 동작을 마칠 때까지 카메라를 통해 정보를 입력받지 않기 때문에 특정 구간에서 내가 원하는 동작을 하지 않고 넘어가는 경우도 발생했던 것이다.
이렇게 여러 번의 시행착오를 겪고 비동기 통신 개념을 적용하여 개발을 진행하게 되었다.
시리얼 통신에서 비동기 개념을 적용한 것을
"UART(Universal Asynchronous Receiver&Transmitter)"라 한다.
이번 포스팅에서는 여기서 마무리하고 다음 포스팅에서 UART 시리얼 통신에 대해 자세하게 알아 보도록 하자.