Pepper의 센서를 길게 눌러 이벤트 발화시키는 박스를 작성해 보았다

7205 단어 NAOqiPepper

소개



이벤트 등에서 Pepper를 발표자로 부스 앞에 설치하는 것이 증가했습니다.
기본적으로는, 방문객이 자유롭게 Pepper와 커뮤니케이션을 받아, 방문자가 트리거(가슴 패널을 조작하거나)가 되어 제품의 소개를 Pepper가 합니다만,
운영 측의 타이밍에서 「손님이 눈치채지 못하는 방법으로 Pepper의 거동을 제어하고 싶다」 경우가 있거나 합니다.

그래서 다음의 요건을 충족하기 위한 구조를 생각해 보았습니다.
1. Pepper 자체는 손님에게 자유롭게 만져주고 싶다 (가슴 패널, 머리, 손 등)
2. 손님이 이야기에 붙어 왔을 때, 접객원이 명시적으로 Pepper의 데모를 제어하고 싶다
3. 접객원이 조작하고 있으면 모르는 방법이 기쁘다
4. 고객이 자유롭게 만져 줄 때 Pepper의 데모가 시작되지 않도록하십시오.
5. WiFi로 연결한 외부 기기에서의 조작은 통신 환경이 나쁘다. 안정된 조작을 원합니다.
6. 접객원에게 기억할 수 있는 방법으로 조작할 수 있도록 해 주었으면 한다(복잡한 조작은 할 수 없다)
7. Pepper의 데모 패턴은 3개

... 말하기 쉽다. .
몇가지 생각한 안에서 이번에는

"Pepper의 특정 센서를 길게 눌러 이벤트 발화시키는 박스"

만들기로 결정했습니다.

환경


  • Pepper for Biz (NAOqi OS 2.4.3.28)
  • Choregrape 2.4.3.28 (windows7 환경)

  • 파이썬 박스





    입력




    메소드 이름
    인수
    설명


    onStart
    다이나믹
    터치 이벤트 반환


    출력




    메소드 이름
    인수
    설명


    onStopped
    다이나믹
    0 : 터치 센서가 눌린 1 : 길게 누름 상태가 "Timeout (s)"를 만족하지 않고 터치 센서 누름 상태가 해제 된 2 : 긴 누름 상태가 "Timeout (s)"을 초과하여 터치 센서 누름 상태가 해제됨


    매개변수






    변수
    금형
    설명


    memkey_tatch_start
    문자열
    센서를 터치할 때 타임스탬프를 저장하는 메모리 키

    Timeout (s)
    정수
    길게 누르는 시간(초)

    CallBackEventKey
    문자열
    긴 누름 경과 후 발화하는 이벤트 키


    흐름





    파이썬 박스 코드


    def onInput_onStart(self, p):
        import datetime
        try:
            ret = 0
            date = datetime.datetime.now()
            #コールバックイベントキー
            callBackEventKey = self.getParameter("CallBackEventKey") 
            #トリガー時間
            waitTime = self.getParameter("Timeout (s)") 
            #メモリー保存用キー
            memoryKey = self.getParameter("memkey_tatch_start") 
            if( int(p) == 1):
                #タッチした日時をメモリーへ保存
                self.memory.insertData(memoryKey, date.strftime("%Y/%m/%d %H:%M:%S"))
                ret = 0
            else:
                memDate = datetime.datetime.strptime(self.memory.getData(memoryKey),"%Y/%m/%d %H:%M:%S")
                #日時の差を秒で取得
                diffSecond = (date - memDate).total_seconds()
                if( diffSecond >= waitTime):
                    self.memory.raiseEvent(callBackEventKey,p)
                    ret = 2
                else :
                    ret = 1
            self.onStopped(ret)
        except Exception, e:
            self.logger.error( e )
    

    로직은 매우 간단합니다.
  • "이벤트 추가"에서 터치 센서 이벤트 발화를 기다립니다 (이번에는 왼발 범퍼 "LeftBumperPressed")
  • 왼발 범퍼를 누르면 "1.0"이 인수로 오므로 누르면 타임 스탬프를 메모리 키 (memkey_tatch_start로 설정된 메모리 키)에 저장합니다.
  • 왼발 범퍼가 눌린 상태에서 해제되었을 경우 「1.0」이외가 오므로, 해제되었을 때의 타임 스탬프와 메모리 키(memkey_tatch_start로 설정한 메모리 키)에 보존하고 있는 타임 스탬프의 차이 비교
  • 타임 스탬프의 차이가 "Timeout (s)"로 설정된 길게 누르는 시간을 초과하면 "CallBackEventKey"로 설정된 이벤트 키가 발화됩니다.
  • 타임 스탬프의 차이가 "Timeout (s)"로 설정된 길게 누르는 시간을 초과하지 않으면 아무 것도하지 않습니다.

    사이고에게



    길게 누를 때 "Timeout (s)"이 경과했는지 여부를 눌린 상태에서 해제하지 않으면 모르기 때문에,
    해제하는 타이밍을 전달하는 수단이 필요하다고 지적이 있었다.
    하지만 그것은 또 다른 이야기. . . 그렇다면 다음에.
  • 좋은 웹페이지 즐겨찾기