Skip to content

[로보메이션] 브라우저 연결 기능 - 거북이 추가 - #3109

Open
RobomationRnD wants to merge 1 commit into
entrylabs:develop-hwfrom
RobomationRnD:submit/turtle-hwlite-1016
Open

RobomationRnD wants to merge 1 commit into
entrylabs:develop-hwfrom
RobomationRnD:submit/turtle-hwlite-1016

Conversation

@RobomationRnD

Copy link
Copy Markdown

어떤 하드웨어 인가요?

거북이 / (주)로보메이션. 브라우저 연결(하드웨어Lite), Web Serial + 전용 동글

변경 사항

  • 브라우저 연결(브라우저로 연결하기) 목록에 거북이 항목을 추가했습니다. 지금까지 거북이는 하드웨어 연결 프로그램(이하 연결 프로그램)으로만 쓸 수 있었습니다.
    • 연결 프로그램의 거북이와 같은 36블록을 같은 순서와 같은 문구(ko/en/jp/vn)로 넣었습니다.
    • 블록 타입은 turtlelite_*입니다. 연결 프로그램과 같은 이름을 쓰면 한 번들 안에서 기존 정의를 덮어쓰기 때문입니다(#3096의 햄스터S 항목과 같은 방식).
  • 블록이 쓰는 로봇 동작을 연결 프로그램(block_robomation.js의 TurtleRobot, entry-hw turtle.js)과 같게 구현했습니다. 로봇으로 나가는 패킷과 블록이 돌려주는 값을 연결 프로그램 코드와 바이트 단위로 대조해 맞췄습니다.
  • 연결은 연결 프로그램과 같은 순서(FF 질의, B0 보정값 응답, 70 시작)로 하고, 보정값(제자리 돌기, 바퀴 중심 돌기, 바퀴 간격)을 로봇에서 읽어 회전 블록에 반영합니다.

새 파일 세 개(block_turtle_lite.js, metadata_turtle_lite.json, images/hw_lite/turtlelite.png)만 추가했고 공용 파일은 건드리지 않았습니다.

검증

  • 연결 프로그램 코드를 같은 입력으로 함께 돌려 패킷과 반환값을 비교하는 자동 테스트(175개)로 36블록 전체, 송신 순서(정지 포함), 수신 처리, 완료 판정, 극단값 입력, 연결 중 로봇 교체와 거부를 확인했습니다. 테스트 코드는 이 PR에 넣지 않았습니다.
  • 실제 거북이와 동글로 확인한 것: 10cm 이동과 90도 회전, 주행 중 정지 후 재실행, 주행 중 USB를 뽑았다 꽂은 뒤 다시 연결, 주행 중 로봇 전원을 껐다 켠 뒤 다시 연결(5초 안에 켠 경우와 뒤에 켠 경우), 10cm 이동 5회 반복, 버튼 클릭 횟수 세기, 엔진 정지 중 센서값 갱신.

참고사항

연결 프로그램과 동작이 다른 곳은 아래와 같습니다. 그 밖에는 로봇으로 나가는 패킷과 블록 값이 같습니다.

연결 프로그램과 다른 동작

아래 항목 중 앞의 다섯 가지(명령 중첩, 움직임 신호 대기, 16비트 초과 펄스, 보정값 응답 검사, 긴 시간 대기)는 연결 프로그램 쪽도 추후 같은 동작으로 맞출 예정입니다. 나머지는 브라우저 연결의 연결 방식에서만 생기는 동작입니다.

  • 기다리는 블록이 끝나기 전에 같은 종류의 명령이 올 때 (예: 이동 중에 다른 이동): 앞 블록을 끝내고 다음으로 넘어갑니다. #3096과 같은 방식입니다.
  • 20펄스 이상 이동에서 로봇의 "움직이는 중" 신호가 오지 않을 때: 예상 소요 시간에 1초를 더한 뒤 로봇이 멈춰 있으면 블록을 끝냅니다.
  • 펄스가 16비트를 넘는 명령(약 614cm 이상 이동, 큰 반지름 원 돌기 등)과 환산 펄스가 0인 명령: 실행하지 않고 바로 넘어갑니다([로보메이션] 브라우저 연결 기능 - 햄스터S 블록을 설치형(하드웨어 연결하기)과 같게 수정 #3108(검토 중)과 같은 정책).
  • 보정값 응답: 길이와 주소를 검사해 깨진 응답은 버리고 다음 응답을 기다립니다.
  • 아주 긴 시간 대기(예: 수십억 박자 쉬기): 약 24.8일까지 기다립니다.
  • 연결 시간 제한: 로봇이 꺼져 있으면 5초 뒤 연결 실패 메뉴를 띄우고 포트를 닫아 "하드웨어 다시 연결"이 되게 합니다. 보정값 요청(B0)은 응답이 없으면 200ms마다 다시 보냅니다.
  • 연결 중 로봇이 바뀌거나 사라졌을 때: 동글은 로봇을 놓치면 센서 프레임 대신 짧은 줄을 보냅니다. 비정상 줄이 30번 이어지거나 다른 주소의 프레임이 2번 오면 다시 짝을 맞춥니다. 이때 진행 중이던 블록은 끝난 것으로 처리하고, 짝을 맞추는 동안 들어온 명령은 보내지 않습니다. 5초 안에 거북이가 돌아오면 바퀴, LED, 소리, 템포를 처음 값으로 되돌린 뒤 다음 블록부터 이어서 실행합니다. 돌아오지 않으면 작품을 정지시키고 연결 실패 메뉴를 띄웁니다. 거북이가 아닌 로봇(예: 햄스터)이면 안내 메시지를 띄우고 연결을 끊습니다.
  • 초 단위 이동이 끝날 때: 정지 명령을 바로 보냅니다.
  • 연결된 뒤 들어오는 보정값 응답: 무시합니다. 연결 중간에 보정값이 바뀌지 않게 하기 위해서입니다.
  • 작품을 정지할 때: 정지 명령을 한 번 보냅니다.

미미한 차이

  • 패킷을 만드는 시점: 브라우저 연결은 작품 실행 중 수신 루프마다 한 번, 연결 프로그램은 유효한 프레임을 받을 때마다 한 번입니다. 로봇이 받는 내용은 같습니다.
  • 연결 마지막 단계에서 센서 프레임을 첫 글자와 길이(53)로 확인합니다(연결 프로그램은 첫 글자만).
  • 하드웨어 모니터의 버튼 클릭 등 이벤트 값이 다음 프레임이 올 때까지 남습니다(연결 프로그램은 표시 직후 지웁니다).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants