사용자가 로봇과 대화한 텍스트를 Prompt를 이용해 1-5 범위의 Score를 받으면, 로봇은 이에 맞는 Action을 수행합니다.
- Client(javascript)는 API-Gateway의 ‘/control’ API을 통해 REST로 요청합니다.
- Lambda-control이 MQTT로 Iot Core에 메시지를 전송합니다. 이때, thingName과 client의 ID는 같은 값을 이용하여야 합니다.
- Request type으로 message와 action을 지정하여 동작을 다르게 합니다.
Controller에 전달되는 정보는 아래와 같습니다.
- user_id: 사용자 아이디, thingName과 같음. 예) AI-Dancing-Robot-000
- request_id: 로깅용
- type: “text” or “action
- message: type이 “text”일때 전달되는 메시지
- score: type이 “action”일때 전달되는 점수
점수를 이용하여 action을 정의는 관련 코드을 참조합니다. 아래의 점수별로 show, move, seq에 대한 정의가 되면 업데이트 하겠습니다.
score = event['score']
print('score: ', score)
if score == '5':
show = 'HAPPY'
move = 'seq'
seq = ["MOVE_FORWARD", "SIT", "MOVE_BACKWARD"]
elif score == '4':
show = 'NEUTRAL'
move = 'seq'
seq = ["TURN_LEFT", "SIT", "TURN_RIGHT"]
elif score == '3':
#show = 'NEUTRAL'
#move = 'seq'
#seq = ["LOOK_LEFT","LOOK_RIGHT", "LOOK_LEFT"]
isAction = False
elif score == '2':
show = 'SAD'
move = 'seq'
seq = ["MOVE_BACKWARD", "SIT", "MOVE_FORWARD"]
elif score == '1':
show = 'ANGRY'
move = 'seq'
seq = ["LOOK_LEFT","LOOK_RIGHT", "LOOK_LEFT", "LOOK_RIGHT"]
else:
show = 'NEUTRAL'
move = 'seq'
seq = ["LOOK_LEFT","LOOK_RIGHT", "LOOK_LEFT", "LOOK_RIGHT"]
payload = json.dumps({
"show": show,
"move": move,
"seq": seq
})
MQTT를 이용해 Robo에 전달되는 값은 아래와 같습니다.
-
사용자가 입력한 메시지는 Robot에서 Polly를 이용해 재생합니다.
-
리엑션 점수에 따라 Robot은 아래와 같은 동작을 수행합니다.