시리얼 통신으로 로봇 다루기
해당 페이지는 R1mini의 통신 명령 요약표에 따라 작성되었습니다.
Last updated
해당 페이지는 R1mini의 통신 명령 요약표에 따라 작성되었습니다.
Last updated
본 페이지에서는 R1mini의 모터를 구동하는 부분은 없습니다. 시리얼 명령으로 R1mini의 모터를 구동하는 하는 명령은 있지만, 원격으로 구동되는 로봇의 특성 상 일정 시간 내에 연속해서 구동 명령이 인가 되지 않을 경우 timeout 에러가 납니다. 모터를 직접 구동하는 명령은 다음 장부터 다루게 됩니다.
아래 보이는 것처럼 시리얼 케이블을 PC와 연결합니다.
적절한 시리얼 통신 프로그램으로 연결합니다.
만약 적절한 통신 프로그램을 찾는데 고민하고 있다면 아두이노를 이용해볼 것을 권장합니다.
아두이노 프로그램 설치 : 아두이노 공식 홈페이지
다운 받은 프로그램을 실행하고 R1mini를 PC와 연결한 후에 포트를 R1mini를 지정합니다.
그리고 난 후, 시리얼 모니터를 실행합니다.
이 상태에서 로봇의 전원을 켜게 되면 아래와 같은 메세지가 나타납니다.
R1mini는 로봇으로 보내는 명령 중 로봇의 상태를 확인하는 종류의 모델은 $기호에 이어서 q를 붙여서 전송하면 됩니다.
본 매뉴얼을 작성하던 시점(2020년 12월 말)에 R1mini의 펌웨어 버전은 r1m_r9_01_03입니다.
그리고 R1mini에서는 명령에 대해 응답이 필요할 때 전송되는 데이터는 항상 기호 #이 붙어서 시작합니다.
현재 설정된 모터 1회전당 엔코더의 펄스 수를 확인할 수 있습니다. 이 설정은 sENCNT 명령으로 다른 값을 인가할 수 있지만, 모터의 엔코더 종류가 변하는 것이 아니라면 이 설정을 변경하는 것은 권장하지 않습니다.
실행 결과는 아래와 같이 R1mini의 현재 엔코더 설정은 모터 기준 한 회전당 44펄스입니다.
로봇의 이동 거리와 방에 따라 계산하는 로봇 Odometry 정보를 알기 위해서는 위 그림에 표시된 바퀴 간 접지 중점의 거리가 필요합니다.
위와 같이 q를 붙여서 $qTRACK라고 명령을 전송하면 #이 붙어서 TRACK은 170mm라고 응답이 오는 것을 확인할 수 있습니다.
보통 모터는 기어와 함께 장착됩니다. R1mini의 기어비를 확인하는 명령은 GEAR입니다.
$qGEAR라는 명령으로 확인한 기어비는 21.3입니다.
그러므로 모터 1회전당 44펄스가 나타나니, 바퀴 기준으로 보면 44*21.3으로 937.2펄스가 한 바퀴당 엔코더에서 나오는 펄스입니다.
로봇의 이동 거리를 모터에 장착된 엔코더에서 나오는 펄스의 숫자로 확인하고자 한다면 바퀴의 지름이 필요합니다.
R1mini에서 바퀴의 지름을 확인하는 명령은 WHLD입니다.
위 명령의 결과를 보면 R1mini의 바퀴 지름은 67.5mm입니다.
로봇의 배터리 상태를 확인하는 명령은 BAT입니다. 위 코드와 그림처럼 $qBAT라는 명령을 시리얼 통신으로 보내면 #BAT,volt,SOC,current로 응답이 옵니다.
qBAT에 대한 응답인 #BAT의 각 인자의 의미는 아래와 같습니다.
volt : V 단위에 10을 곱한 값입니다. 위 그림의 예시에 따르면 127은 12.7Volt입니다.
SOC : State Of Charge로 충전 상태로 위 그림의 예시에서는 100% 충전입니다.
current : mA 단위입니다. 위 그림의 예시에서는 5mA로 0.005A입니다.
위 그림에 보이는 정면의 OMO라는 글자와 뒷 쪽의 LED는 같은 색상으로 같은 주기로 깜빡거립니다. 이 LED의 깜빡임 주기를 확인할 수 있는 명령입니다.
위 코드처럼 $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 타임을 가지도록 설정하는 명령은 아래와 같습니다.
그 결과는 위 그림처럼 됩니다.
LED의 설정 값을 알고 싶다면 질의어(q)를 붙여서 COLOR라고 명령을 보내면 됩니다.
그러면 위와 같이 #이 달려서 응답이 예를 들어 128,0,255라고 옵니다. 숫자는 순서대로 R, G, B의 값을 의미합니다.
위 코드와 같이 제어 명령을 의미하는 c를 붙여서 cCOLOR 명령으로 완전 파란색인 0,0,255를 명령으로 지정합니다.
그러면 아래 그림처럼 전방 LED와 보드 뒷 편에 있는 LED가 모두 0,0,255의 색상 값인 BLUE로 변경됩니다.
LED 설정 값을 변경해도 전원을 다시 인가하면 해제됩니다. 전원을 다시 인가해도 이전의 설정을 유지하게 하는 방법은 저장 명령인 s를 이용해서 저장하는 것입니다.
위와 같이 명령을 주면 현재 LED의 설정도 변경되고 전원을 끊었다가 다시 기동해도 LED의 설정이 변경되지 않습니다.
명령 앞에 prefix로 's'를 붙일 수 있는 옵션은 이렇게 전원 여부와 관계없이 저장할 수 있는 명령입니다.