Skip to content

[로보메이션] 브라우저 연결 기능 - 치즈 스틱 추가 - #3111

Open
RobomationRnD wants to merge 1 commit into
entrylabs:develop-hwfrom
RobomationRnD:submit/cheese-hwlite-1026-r3
Open

RobomationRnD wants to merge 1 commit into
entrylabs:develop-hwfrom
RobomationRnD:submit/cheese-hwlite-1026-r3

Conversation

@RobomationRnD

Copy link
Copy Markdown

어떤 하드웨어 인가요?

치즈 스틱 / (주)로보메이션. 브라우저로 연결하기, Web Serial + 전용 동글

변경 사항

  • 브라우저 연결(브라우저로 연결하기) 목록에 치즈 스틱 항목을 추가했습니다. 지금까지 치즈 스틱은 하드웨어 연결 프로그램(이하 연결 프로그램)으로만 쓸 수 있었습니다.
    • 연결 프로그램의 치즈 스틱과 같은 101블록을 같은 순서와 같은 문구(ko/en/jp/vn)로 넣었습니다.
    • 블록 타입은 cheeselite_*입니다. 연결 프로그램과 같은 이름을 쓰면 한 번들 안에서 기존 정의를 덮어쓰기 때문입니다(#3096의 햄스터S 항목과 같은 방식).
  • 블록이 쓰는 로봇 동작은 연결 프로그램 코드(block_robomation.js의 CheeseRobot, entry-hw cheese.js)를 그대로 가져와 썼습니다. 로봇으로 보내는 내용과 블록이 돌려주는 값을 연결 프로그램 코드와 바이트 단위로 대조해 맞췄습니다.
  • 연결은 연결 프로그램과 같은 FF 질의로 하고, 응답의 모델 번호로 치즈 스틱인지 확인합니다. 다른 로봇이면 안내 메시지를 띄우고 연결하지 않습니다.

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

검증

  • 연결 프로그램 코드를 같은 입력으로 함께 돌려 로봇으로 보내는 내용과 반환값을 비교하는 자동 테스트 99개로 다음을 확인했습니다. 테스트 코드는 이 PR에 넣지 않았습니다.
    • 101블록 전체의 정의와 번역, 블록마다 로봇으로 보내는 명령 줄(정지를 끼운 순서 포함)
    • 수신 처리: 무작위 센서 프레임 600개를 넣어 블록이 읽는 값 비교
    • 완료 판정, 극단값 입력, 연결 중 로봇 교체와 다른 모델 거부
    • 코드 일부를 일부러 바꾼 36가지 변형을 만들어 위 테스트가 모두 잡아내는지 확인
  • 실제 치즈 스틱과 동글로 확인한 것(본체): 연결, 센서 수신(초당 약 50줄), 소리 반복 중 정지 20회(매번 바로 멈춤), 기울기 6방향, 두드림, 낙하, 배터리와 온도와 신호 세기, 소리 끝까지 재생 후 완료, 두 스크립트 동시 실행, 템포 120에서 박자와 쉼, 작품 정지 중 송신 없음, 연결된 상태에서 로봇 전원을 껐다 켠 뒤 다시 연결(2~3초 안에 켠 경우 자동으로 이어짐, 10초 뒤 켠 경우 연결 실패 메뉴 후 다시 연결), 동글을 뽑았다 꽂은 뒤 다시 연결, 연결 중 다른 로봇(삐오)으로 바뀌었을 때 안내 메시지와 함께 연결 해제, 처음 연결할 때 다른 로봇이면 거부.
  • 실제 부품으로 확인한 것: 가변저항(아날로그 입력, 입력 범위 2종과 3구간, 전압), 버튼 모듈(눌림, 클릭, 길게 누름, 디지털 입력 풀업과 풀다운), 서보 모터(각도 정하기와 바꾸기, 끄기, 0~180 밖의 값), RGB LED(색, RGB 값, 밝기 3단계, 끄기), L 포트 디지털 출력과 PWM 출력, 조이스틱 PID-13(두 축, 버튼 2개의 클릭과 길게 누름), 5x5 LED 매트릭스 HAT-010(도형, 글자, 점 켜기, 밝기, 스크롤, 스프라이트, 버튼 A와 B).

참고사항

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

연결 프로그램과 다른 동작

아래 항목 중 앞의 다섯 가지(명령 중첩, 스텝 0 이동, 정지 때 네오픽셀 끄기, 정지 뒤 첫 시리얼, PID, HAT 명령, 긴 시간 대기)는 연결 프로그램도 추후 같은 동작으로 맞출 예정입니다. 나머지는 브라우저 연결의 연결 방식에서만 생기는 동작입니다.

  • 기다리는 블록이 끝나기 전에 같은 종류의 명령이 올 때 (예: 사이렌을 끝까지 재생하는 중에 다른 소리): 앞 블록을 끝내고 다음으로 넘어갑니다. #3096과 같은 방식입니다. 박자를 정해 음을 내던 블록이 이렇게 끝날 때 새로 시작한 음은 끊지 않습니다.
  • 스텝 모터를 0 스텝(빈 칸, 문자, 음수 포함)으로 회전할 때: 로봇으로 보내는 내용은 같고, 로봇이 완료 신호를 보내지 않으므로 블록을 바로 끝냅니다.
  • 작품을 정지할 때 네오픽셀: 정지할 때마다 끄기 명령을 보냅니다.
  • 정지한 뒤 다시 실행할 때 첫 시리얼 쓰기, 첫 PID 명령, 첫 HAT 시작: 이전 실행과 상관없이 항상 로봇으로 보냅니다.
  • 아주 긴 시간 대기(예: 수십억 박자 쉬기): 약 24.8일까지 기다립니다.
  • 연결 완료 조건: FF 응답 뒤 같은 로봇의 센서 프레임이 한 번 들어와야 연결을 마칩니다.
  • 연결 시간 제한: 로봇이 꺼져 있으면 5초 뒤 연결 실패 메뉴를 띄우고 포트를 닫아 "하드웨어 다시 연결"이 되게 합니다.
  • 연결 중 로봇이 바뀌거나 꺼졌을 때: 동글은 로봇을 놓치면 센서 프레임 대신 짧은 줄을 보내고, 같은 동글에 다른 로봇이 붙기도 합니다. 비정상 줄이 50번 이어지거나 다른 주소의 프레임이 2번 오면 다시 짝을 맞춥니다. 이때 진행 중이던 블록은 끝난 것으로 처리합니다. 다시 짝을 맞추는 동안에도 작품은 계속 실행되지만, 그동안 실행된 블록의 명령은 로봇으로 보내지 않습니다. 5초 안에 치즈 스틱이 돌아오면 포트 모드, 출력, 시리얼 설정, 템포 등을 처음 값으로 되돌린 뒤 그다음 블록부터 다시 로봇으로 보냅니다. 앞에서 정한 설정이나 짝을 맞추는 동안 실행된 블록의 명령은 다시 보내지 않으므로, 필요하면 스크립트에서 다시 설정해야 합니다. 돌아오지 않으면 작품을 정지시키고 연결 실패 메뉴를 띄웁니다. 치즈 스틱이 아닌 로봇이면 안내 메시지를 띄우고 연결을 끊습니다.
  • 작품을 정지할 때 보내는 명령: 정지 명령을 몇 번(최대 8줄) 보낸 뒤 멈춥니다. 연결 프로그램은 정지 상태 프레임을 계속 보냅니다. 보내는 순서는 같습니다.
  • 송신 간격: 12ms 안에 두 줄을 보내지 않습니다. 동글이 한 줄을 받는 동안(약 4.8ms) 들어온 다음 줄을 버리는 것을 실측으로 확인했고(5ms 간격은 3회 중 0회, 8ms 간격은 10회 중 10회 수신), 한 번만 보내는 명령(HAT, 네오픽셀, 시리얼 등)이 사라지지 않게 하기 위해서입니다.

미미한 차이

  • 로봇으로 보낼 명령 줄을 만드는 시점: 브라우저 연결은 작품 실행 중 수신 루프마다 한 번, 연결 프로그램은 유효한 프레임을 받을 때마다 한 번입니다. 로봇이 받는 내용은 같습니다.
  • 새로 연결할 때마다 소리와 확장 명령의 내부 번호를 0부터 셉니다. 연결 프로그램은 프로그램을 켜 둔 동안 이어서 셉니다. 연결 직후 첫 프레임의 번호 비트가 다를 수 있지만 동작은 같습니다.

알려진 제한

  • 블록이 로봇의 동작 완료를 기다리는 중에 동글을 뽑으면, 연결 실패 메뉴는 뜨지만 작품은 계속 실행되고, 그 블록은 정지 버튼을 누를 때까지 계속 기다립니다. 브라우저로 연결하기의 공용 연결 처리가 연결이 끊긴 것을 장치 모듈에 알려 주지 않기 때문입니다.
  • 이 블록들은 아직 파이썬(텍스트) 모드 변환을 제공하지 않습니다. 연결 프로그램의 치즈 스틱 블록은 파이썬 모드를 지원하므로, 거북이 항목([로보메이션] 브라우저 연결 기능 - 거북이 추가 #3109)과 함께 별도 PR로 추가할 예정입니다.
  • 처음 연결할 때 치즈 스틱이 아닌 다른 로봇이 연결되어 있으면, 실패 안내가 두 번(치즈 스틱 모듈의 안내와 공용 안내) 나옵니다.

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