Where is my fucking car? (1)

오늘 퇴근길에도 주차장에서 내 차를 찾지 못했다. 이놈의 나쁜 기억력 때문에 자차 출근이 익숙해지다 보면 일상적으로 겪는 문제이다. 보통 건물 지하에 몇층 규모로 만들어져 있는 주차장에 매일같이 주차하다 보면 아침에 주차한 층이 몇층인지 퇴근길에 주차장으로 연결되는 건물 엘리베이터 버튼을 누르기 전에 고민하게 된다.

오늘은 내가 몇층에 주차했더라?

(c) Jim Pennucci
(c) Jim Pennucci

무엇이 필요한가?

정확한 주차 위치까지는 알려주지 않아도 좋다. 최소한 내가 몇층에 주차했는지 정도만 알려주어도 행복할 것 같다. 그렇다고 매번 주차하면서 기록하는 것도 무척이나 귀찮다. 알아서 기록해 뒀다가 내가 차를 찾으러 왔을 때 몇층에 주차했다고 알려주는 것으로 충분히 만족스러울 것 같다.

요구사항 정리

  • 출근하며 하는 주차는 비슷한 시각(조건1-1)에 항상 같은 위치의 주차장(조건1-2)에 주차한다
  • 주차가 완료되면(조건1-3) 자동으로 주차장 층수(조건1-4)를 기록해 줬으면 좋겠다(액션1)
  • 퇴근하는 시각은 불규칙하며(조건2-1) 주차장의 위치는 일정하다(조건2-2)
  • 주차장으로 이동했을 때(조건2-3) 자동으로 마지막 주차 층수(조건2-4)를 알려줬으면 좋겠다(액션2)

정리하고 보니 굉장히 간단한 요구 사항이지만 구현을 위해서 좀 더 자세히 들여다 보자

구현 가능 검토

  • 조건1-1) 비슷한 출근 시각
    • 매일 아침 8시에 wake up 후 아래 조건 판단
      • 월~금요일 오전 시각으로 rough하게 설정 (8:00~12:00)
      • 휴일은 제외
      • 해당 시간에 집인지 cell position을 기준으로 검사 후 cell position을 벗어나면 조건1-2 모니터링 시작
      • 해당 시간에 집인지 판단은 15분 주기로 wake up 후 판단
  • 조건1-2) 출근하며 하는 항상 같은 위치의 주차장
    • Geo fence API 이용
    • 위치 측위의 경우 배터리 소모가 클 수 있기 때문에 Geofence의 주기와 반경을 잘 조절해야 함
      • 반복적인 테스트로 적절한 튜닝 값을 찾는 걸로...
    • GPS 정보를 이용해 정밀 위치 측위가 가능하나 주차장 인근은 빌딩 숲으로 GPS accuracy가 떨어지는 문제에 대한 보완 방법 필요
  • 조건1-3) 주차의 완료
    • 주차가 완료되었다는 것이 알기 어려운 부분인데 생각해둔 사용 가능 방법은 다음과 같다
    • 차량의 Bluetooth signal이 lost되는 경우
      • 가장 쉽게 판단할 수 있는 근거가 될 수 있지만 BT 연결이 원활하지 않은 경우가 있어 보조 수단으로 사용할 것을 고려
      • 주차장 근처 위치에 있을 때도 차량 BT MAC address로 등록된 기기와 연결이 되어 있었다면 끊어지는 경우만 판단하면 됨
    • accelerometer 정보를 이용해서 거치해 둔 폰을 주머니에 넣는 동작에서 판단
      • accelerometer 정보가 보행자의 이동 외에도 차량 이동에도 영향을 받기 때문에 주머니에 넣는 동작의 패턴이 어떨지 검토 필요
    • Geofence 판단 이후 후 위 조건이 모두 만족하지 않는 경우라면 주차 완료로 봄 (무한히 대기하면 안됨)
  • 조건1-4) 주차장 층수
    • 조건 1-2에서 barometer를 이용해 실외 기압을 우선 측정
    • 주차장 진입하여 barometer가 반응하는 것을 보고 층이 내려가고 있다고 판단하여 1F, B1, B2, B3와 같이 카운팅 시작
    • 조건 1-3에서 주차 완료되었다고 판단되는 시점에 측정된 기압으로 층수 판단
    • 센서의 정밀도가 어느 정도 되느냐에 따라 카운팅이 가능한지 판단될 것이라 우선 센서 정밀도부터 검증

퇴근 시 차량을 찾는 flow는 졸리니까 나중에 다시 고민해보자.

Facebook Comments

Leave a Reply

Your email address will not be published. Required fields are marked *