로봇 팔을 제어하는 MCU와 PC가 TCP/IP 통신으로 연결되어 있으며, MCU가 Server, PC가 Client로 통신한다. MCU를 Server로 지정한 이유는 여러 유저가 로봇 팔을 제어하기 위해서다. 로봇 팔을 조작하고 싶은 유저는 개인 PC에서 MCU의 Server에 접속하여 로봇 팔을 제어할 수 있다. Client인 PC가 로봇 팔 제어 신호를 Server에 보내면 MCU는 그 신호에 따라 정해진 동작을 수행한다.
통신에 사용된 ChattingClient 프로그램은 Server의 IP주소로 Client가 접속할 수 있는 프로그램이다. MFC로 제작되었으며, 차동혁 교수님께서 제공한 프로그램이다.
TCP/IP: Robot Arm Control Protocol 정의
PC(Client)에서 MCU(Server)로 TCP/IP 통신으로 제어 신호를 보낼 때, 정해진 프로토콜 규격대로 문자열을 송신해야 한다. 그래야 MCU에서 제어 명령을 받아 드릴 수 있다.
PC(Client)에서 MCU(Server)로 보내는 메시지에 따라 tcp_echoserver_recv() 함수에서 변수 값이 설정되면, main함수의 while(1)문을 돌면서 해당 acting_flag에 대한 동작을 진행한다. acting_flag 변수는 main.c 파일에서 extern 처리 되어있다.
RAC Protocol (Robot Arm Control Protocol)은 다음과 같다. (10/26 기준 ver.0.91)
< RAC Protocol by HY >
Received msg | acting_flag | Transmitted msg | 비고 |
robot init | 100 | -< Robot Arm Control Process >- | 로봇 초기화 |
return base motion | 101 | >> Return Base Motion | 기본 모션으로 복귀 |
arm down | 1 | >> Arm Down | 축으로 부터 30cm 거리로 손을 뻗음 |
arm up | 2 | >> Arm Up | 손으로 물체를 집고나서 팔을 올림 |
grab | 3 | >> Hand Grab!! | 손 집기 |
release | 4 | >> Hand Release | 손 집기 풀기 |
arm rotate -90 | 10 | >> Arm Rotate angle [-90] degrees | acting_flag 10~20 팔 각도 조절 |
arm rotate -75 | 11 | >> Arm Rotate angle [-75] degrees | |
arm rotate -60 | 12 | >> Arm Rotate angle [-60] degrees | |
… | … | … | |
arm rotate 0 | 15 | >> Arm Rotate angle [0] degrees | |
arm rotate 30 | 16 | >> Arm Rotate angle [+30] degrees | |
… | … | … | |
arm rotate 90 | 20 | >> Arm Rotate angle [+90] degrees | |
hand rotate -90 | 30 | >> Hand Rotate angle [-90] degrees | acting_flag 30~40 손 각도 조절 |
hand rotate -75 | 31 | >> Hand Rotate angle [-75] degrees | |
hand rotate -60 | 32 | >> Hand Rotate angle [-60] degrees | |
… | … | … | |
hand rotate 0 | 35 | >> Hand Rotate angle [0] degrees | |
hand rotate 30 | 36 | >> Hand Rotate angle [+30] degrees | |
… | … | … | |
hand rotate 90 | 40 | >> Hand Rotate angle [+90] degrees | |
(others) | -1 | >> Please re-enter command again | 지정된 명령이 아니면 다시 입력 받음 |
- Received msg: MCU가 받은 문자열
- acting_flag: MCU내에서 수신받은 문자열에 따라 값이 설정되는 변수로, acting_flag 변수 값으로 모든 동작 제어가 이루어진다.
- Transmitted msg: 해당 Received msg에 따라 MCU가 PC로 보내주는 msg
팔과 손의 각도는 -90, -75- 60, -45, -30, 0, 30, 45, 75, 90도로 조절 가능하다.
지정되지 않은 문자열을 전송하면 Server에서 해당 Client에게 재입력을 받도록 한다. (acting_flag = -1)