시리얼 통신으로 로봇 다루기



[시리얼 케이블 연결]


  • 아래 보이는 것처럼 시리얼 케이블을 PC와 연결합니다. 


  •  적절한 시리얼 통신 프로그램으로 연결합니다.



[아두이노 시리얼 모니터를 이용한 통]


  • 만약 적절한 통신 프로그램을 찾는데 고민하고 있다면 아두이노를 이용해볼 것을 권장합니다. 
  • 아두이노 프로그램 설치 : 아두이노 공식 홈페이지


  • 그리고 난 후, 시리얼 모니터를 실행합니다. 


  • 이 상태에서 로봇의 전원을 켜게 되면 아래와 같은 메세지가 나타납니다. 



[로봇 정보 확인]


  • Firmware Version 확인 - FIRMV

                               $qFIRMV                              

  • R1mini는 로봇으로 보내는 명령 중 로봇의 상태를 확인하는 종류의 모델은 $기호에 이어서 q를 붙여서 전송하면 됩니다.


  • 본 매뉴얼을 작성하던 시점(2020년 12월 말)에 R1mini의 펌웨어 버전은 r1m_r9_01_03입니다.
  • 그리고 R1mini에서는 명령에 대해 응답이 필요할 때 전송되는 데이터는 항상 기호 #이 붙어서 시작합니다.


  • 모터 회전당 엔코더 펄스 수 확인 - ENCNT

                                   $qFIRMV                              


현재 설정된 모터 1회전당 엔코더의펄스 수를 확인할 수 있습니다. 이 설정은 sENCNT 명령으로 다른 값을 인가할 수 있지만, 모터의엔코더 종류가 변하는 것이 아니라면 이 설정을 변경하는 것은 권장하지 않습니다.


실행 결과는 아래와 같이R1mini의 현재 엔코더 설정은 모터 기준 한 회전당 44펄스 입니다.


                                   $qENCNT                              

                                   #ENCNT ,44                          



  • 로봇 바퀴와 바퀴 사이의 거리 - TRACK
  • 로봇의 이동 거리와 방에 따라 계산하는 로봇 Odometry 정보를 알기 위해서는 위 그림에 표시된 바퀴 간 접지 중점의 거리가 필요합니다. 

                                   $qTRACK                               

                                  #TRACK , 170.9                     


  • 위와 같이 q를 붙여서 $qTRACK라고 명령을 전송하면 #이 붙어서 TRACK은 170mm라고 응답이 오는 것을 확인할 수 있습니다.
  • 로봇 기어비 확인 - GEAR
  • 보통 모터는 기어와 함께 장착됩니다. R1mini의 기어비를 확인하는 명령은 GEAR입니다.

                                   $qGEAR                                 

                                  #GEAR , 21.3                          


  •  $qGEAR라는 명령으로 확인한 기어비는 21.3입니다. 
  • 그러므로 모터 1회전당 44펄스가 나타나니, 바퀴 기준으로 보면 44*21.3으로 937.2펄스가 한 바퀴당 엔코더에서 나오는 펄스입니다.   
  • 바퀴 지름 확인 - WHLD
  • 로봇의 이동 거리를 모터에 장착된 엔코더에서 나오는 펄스의 숫자로 확인하고자 한다면 바퀴의 지름이 필요합니다.
  • R1mini에서 바퀴의 지름을 확인하는 명령은 WHLD입니다.

                                   $qWHLD                                

                                  #WHLD , 67.5                         


  •  위 명령의 결과를 보면 R1mini의 바퀴 지름은 67.5mm


[로봇 상태]


  • 배터리 확인 - BAT

                                   $qBAT                                     

                                  #BAT , 127 , 100, 5                 


  • 로봇의 배터리 상태를 확인하는 명령은  BAT입니다. 위 코드와 그림처럼 $qBAT라는 명령을 시리얼 통신으로 보내면  #BAT,volt,SOC,current로 응답이 옵니다. 
  • qBAT에 대한 응답인 #BAT의 각 인자의 의미는 아래와 같습니다.          
                 
    volt : V 단위에 10을 곱한 값입니다. 위 그림의 예시에 따르면 127은 12.7Volt입니다. 

                            SOC : State Of Charge로 충전 상태로 위 그림의 예시에서는 100% 충전입니다. 

                            current : mA 단위입니다. 위 그림의 예시에서는 5mA로 0.005A입니다.


  • 로봇 LED 깜빡임 - BREATH

깜빡임 주기 확인하기

  • 위 그림에 보이는 정면의 OMO라는 글자와 뒷 쪽의 LED는 같은 색상으로 같은 주기로 깜빡거립니다. 이 LED의 깜빡임 주기를 확인할 수 있는 명령입니다. 

                                   $qBREATH                                        

                                  #BREATH , 500 , 100 , 50               


  •  위 코드처럼 $qBREATH라고 명령을 보내면 현재 설정된  값이 보입니다. 
  • 여러분들의 로봇은 위 그림과 코드의 결과와 다른 색상이나 깜빡임을 가질 수 있습니다. 
  • BREATH의 각 인자는 아래와 같습니다. 

                  첫 번째 전체 주기 ms : ON/OFF를 합친 전체 주기를 설정합니다.

                  두 번째 ON 시간 ms : LED가 On되는 시간을 설정합니다.

                  세 번째 OFF 시간 ms : LED가 Off 되는 시간을 설정합니다.


  • 위 예시에 따르면 500ms의 시간 동안 100ms의 on 시간과 50ms의 off 시간을 가지고 깜빡거리는 것입니다. 
  • 여기서 100ms와 50ms를 더해서 500ms가 되지 않는 상황이 의문일 수 있지만, 완전 off되는 시간이 50ms이고 그 사이는 부드럽게 꺼지도록 하는 시간으로 채워집니다. 


깜빡임 주기 변경하기

  • 앞서 설명한 인자들을 이용해서, 5000ms의 주기에 500ms의 On 타임과 50ms의 Off 타임을 가지도록 설정하는 명령은 아래와 같습니다. 

                                   $cBREATH,5000,500,50                                  



[로봇 LED 구동]


  • 현재 LED 설정 값 확인하기

                                   $cCOLOR,0,0,255                                             


  • 위 코드와 같이 제어 명령을 의미하는 c를 붙여서 cCOLOR 명령으로 완전 파란색인 0,0,255를 명령으로 지정합니다. 
  • 그러면 아래 그림처럼 전방 LED와 보드 뒷 편에 있는 LED가 모두 0,0,255의 색상 값인 BLUE로 변경됩니다.  


  • LED 설정 값 저장하기
  • 그러면 아래 그림처럼 전방 LED와 보드 뒷 편에 있는 LED가 모두 0,0,255의 색상 값인 BLUE로 변경됩니다. 

                                   $sCOLOR,200,0,50                                         


  • 위와 같이 명령을 주면 현재 LED의 설정도 변경되고 전원을 끊었다가 다시 기동해도 LED의 설정이 변경되지 않습니다. 
  • 명령 앞에 prefix로 's'를 붙일 수 있는 옵션은 이렇게 전원 여부와 관계없이 저장할 수 있는 명령입니다.