[태그:] 레고

  • Lego MindStorm EV3 제어기

    Lego MindStorm EV3 제어기

    조종기 다음으로 Lego 마인드스톰으로 모터 제어기를 만들었다.

    기본개념이 아래 그림에 표시되어 있다.

    조종기의 역할

    • 서버.
    • 휴대폰 기울기를 확인하여, 공을 기울기 방향으로 이동.
    • 공이 화면 구석으로 이동하면, 기울기가 공 위치를 변경하지 않음
    • 공 위치를 135도 회전 후, 수평 이동시켜
      “Left;…, Right:…” 형식으로 소켓으로 전송

    Lego Mindstorm의 역할
    (전에 만들었던 부분을 재활용 하여, 지저분함.)

    • 클라이언트.
    • 링 버퍼를 만든 후, Left, Right 이동 위치를 버퍼에 저장.
    • Thread가 Socket으로 안드로이드 폰에 connect, receive, close.
    • 이 과정을 반복
    • 수신 데이터(“Left:….,Right:….”)에서
      “Left:”, “,Right:”의 위치를 찾음.
    • 숫자를 추출, trim 후 integer로 변경.
    • 변경된 integer만큼, Left, Right 모터를 이동.

    EV3를 lejos 베타 버전을 사용해서인지, socket의 utf-8로 데이터가 전송되지 않았다. ascii로 변경, 전송하여 시간 좀 걸렸다.

    중요한 사실이

    • 내가 생각한 만큼 잘 움직이지 않는다.
      차량 바퀴를 4개로 만들다 보니, Left 모터를 -방향, Right 모터를 +방향으로 돌리면, 확 돌아야 되는데, 지 몸체에 걸려 안돈다!!!
      또한 제품이 무거워서인지, 바퀴가 헛도는 경우가 많다.
    • 실행 순서에 따라, NullPointException이 너무 많다.
      try, throw로 도배를 해야 할 듯한데, 시간이 또 한없이 갈 듯하다.
    • 안드로이드 폰의 좌표 설정 문제.
      화면의 공이 디스플레이 중앙에 있는데, EV3이 후진한다.
      보정을 해야 하는데, 귀찮다.
    • 안드로이드 폰 화면이 꺼지면, 동작이 멈춰야 하는데 그렇지 않다. 링 버퍼에서 다 사용하면, 0으로 이동이 맞아 보이는데..계속 움직인다.

    더 중요한 사실이,

    • 애가 별로 재미없어 한다!!
      차가 빨랑 빨랑 움직여야 하는데, 지정 위치로 가다 보니, 너무 느리다. 파워로 수정하려니 귀찮고.

    누가 소켓을 잘 정리하여 인터넷에 올렸다.
    여기여기.
    DataInputStream을 그냥 사용했는데, 별 목적이 없으면 사용하지 않는게 맞아 보인다.
    DataInputStream으로 안드로이드 폰과 EV3이 통신이 되지 않는다.
    누가 이미 작성한 코드를 쓰다 보니, socket을 어떻게 쓰는지 정리되지 않아는데, 위 사이트가 정리하는데 도움을 줬다.