Pepper의 센서를 길게 눌러 이벤트 발화시키는 박스를 작성해 보았다
소개
이벤트 등에서 Pepper를 발표자로 부스 앞에 설치하는 것이 증가했습니다.
기본적으로는, 방문객이 자유롭게 Pepper와 커뮤니케이션을 받아, 방문자가 트리거(가슴 패널을 조작하거나)가 되어 제품의 소개를 Pepper가 합니다만,
운영 측의 타이밍에서 「손님이 눈치채지 못하는 방법으로 Pepper의 거동을 제어하고 싶다」 경우가 있거나 합니다.
그래서 다음의 요건을 충족하기 위한 구조를 생각해 보았습니다.
1. Pepper 자체는 손님에게 자유롭게 만져주고 싶다 (가슴 패널, 머리, 손 등)
2. 손님이 이야기에 붙어 왔을 때, 접객원이 명시적으로 Pepper의 데모를 제어하고 싶다
3. 접객원이 조작하고 있으면 모르는 방법이 기쁘다
4. 고객이 자유롭게 만져 줄 때 Pepper의 데모가 시작되지 않도록하십시오.
5. WiFi로 연결한 외부 기기에서의 조작은 통신 환경이 나쁘다. 안정된 조작을 원합니다.
6. 접객원에게 기억할 수 있는 방법으로 조작할 수 있도록 해 주었으면 한다(복잡한 조작은 할 수 없다)
7. Pepper의 데모 패턴은 3개
... 말하기 쉽다. .
몇가지 생각한 안에서 이번에는
"Pepper의 특정 센서를 길게 눌러 이벤트 발화시키는 박스"
만들기로 결정했습니다.
환경
파이썬 박스
입력
메소드 이름
인수
설명
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 )
로직은 매우 간단합니다.
파이썬 박스 코드
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 )
로직은 매우 간단합니다.
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 )
사이고에게
길게 누를 때 "Timeout (s)"이 경과했는지 여부를 눌린 상태에서 해제하지 않으면 모르기 때문에,
해제하는 타이밍을 전달하는 수단이 필요하다고 지적이 있었다.
하지만 그것은 또 다른 이야기. . . 그렇다면 다음에.
Reference
이 문제에 관하여(Pepper의 센서를 길게 눌러 이벤트 발화시키는 박스를 작성해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kakkey/items/6b48102379ab379321f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)