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

해당 페이지는 R1mini의 통신 명령 요약표에 따라 작성되었습니다.


본 페이지에서는 R1mini의 모터를 구동하는 부분은 없습니다. 시리얼 명령으로 R1mini의 모터를 구동하는 하는 명령은 있지만, 원격으로 구동되는 로봇의 특성 상 일정 시간 내에 연속해서 구동 명령이 인가 되지 않을 경우 timeout 에러가 납니다. 모터를 직접 구동하는 명령은 다음 장부터 다루게 됩니다.


시리얼 케이블 연결 #

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

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


아두이노 시리얼 모니터를 이용한 통신 #

만약 적절한 통신 프로그램을 찾는데 고민하고 있다면 아두이노를 이용해볼 것을 권장합니다.

다운 받은 프로그램을 실행하고 R1mini를 PC와 연결한 후에 포트를 R1mini를 지정합니다.

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

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

$qFIRMV
  • R1mini는 로봇으로 보내는 명령 중 로봇의 상태를 확인하는 종류의 모델은 $기호에 이어서 q를 붙여서 전송하면 됩니다.
  • 본 매뉴얼을 작성하던 시점(2020년 12월 말)에 R1mini의 펌웨어 버전은 r1m_r9_01_03입니다.
  • 그리고 R1mini에서는 명령에 대해 응답이 필요할 때 전송되는 데이터는 항상 기호 #이 붙어서 시작합니다.

모터 회전당 엔코더 펄스 수 확인 – ENCNT #

$qENCNT
  • 현재 설정된 모터 1회전당 엔코더의 펄스 수를 확인할 수 있습니다. 이 설정은 sENCNT 명령으로 다른 값을 인가할 수 있지만, 모터의 엔코더 종류가 변하는 것이 아니라면 이 설정을 변경하는 것은 권장하지 않습니다.
  • 실행 결과는 아래와 같이 R1mini의 현재 엔코더 설정은 모터 기준 한 회전당 44펄스입니다.
$qENCNT
#ENCNT,44

로봇 바퀴와 바퀴 사이의 거리 – TRACK #

  • 로봇의 이동 거리와 방에 따라 계산하는 로봇 Odometry 정보를 알기 위해서는 위 그림에 표시된 바퀴 간 접지 중점의 거리가 필요합니다.
$qTRACK
#TRACK,170.0
  • 위와 같이 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 설정 값 확인하기 #

$qCOLOR
#COLOR,128,0,255
  • LED의 설정 값을 알고 싶다면 질의어(q)를 붙여서 COLOR라고 명령을 보내면 됩니다.
  • 그러면 위와 같이 #이 달려서 응답이 예를 들어 128,0,255라고 옵니다. 숫자는 순서대로 R, G, B의 값을 의미합니다.

LED 설정값 변경하기 #

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

LED 설정 값 저장하기 #

  • LED 설정 값을 변경해도 전원을 다시 인가하면 해제됩니다. 전원을 다시 인가해도 이전의 설정을 유지하게 하는 방법은 저장 명령인 s를 이용해서 저장하는 것입니다.
$sCOLOR,200,0,50
  • 위와 같이 명령을 주면 현재 LED의 설정도 변경되고 전원을 끊었다가 다시 기동해도 LED의 설정이 변경되지 않습니다.
  • 명령 앞에 prefix로 ‘s’를 붙일 수 있는 옵션은 이렇게 전원 여부와 관계없이 저장할 수 있는 명령입니다.