Skip to content

Commit e9dd7bf

Browse files
Upgrade receptionist (#1338)
Picovoice model updated to detect person names
2 parents 9294aa9 + 811b1ec commit e9dd7bf

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

challenge_receptionist/src/challenge_receptionist/learn_guest.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from robot_smach_states.human_interaction import Say
77
from robot_smach_states.human_interaction.human_interaction import WaitForPersonInFront, AskPersonName, AskPersonNamePicoVoice, LearnPerson, HearOptionsExtra, HearOptionsExtraPicoVoice
88
from robot_smach_states.reset import ResetArms
9+
from robot_smach_states.utility import CheckTries
910

1011
import robot_smach_states.util.designators as ds
1112
import smach
@@ -43,6 +44,7 @@ def __init__(self, robot,
4344
smach.StateMachine.__init__(self, outcomes=['succeeded', 'failed', 'aborted'])
4445

4546
self.drink_spec_des = ds.Designator(challenge_knowledge.common.drink_spec, name='drink_spec')
47+
reset_des = ds.VariableDesignator(resolve_type=bool).writeable
4648

4749
with self:
4850
smach.StateMachine.add('GOTO_DOOR',
@@ -131,10 +133,13 @@ def __init__(self, robot,
131133
else:
132134
smach.StateMachine.add('HEAR_DRINK_ANSWER',
133135
HearOptionsExtraPicoVoice(
134-
robot, "drinks", guest_drink_des.writeable, look_at_standing_person=True
135-
),
136+
robot, "receptionist", guest_drink_des.writeable, ["drinks"], look_at_standing_person=True),
136137
transitions={'heard': 'RESET_1',
137-
'no_result': 'DEFAULT_DRINK'})
138+
'no_result': 'CHECK_TRIES'})
139+
140+
smach.StateMachine.add("CHECK_TRIES",
141+
CheckTries(max_tries=3, reset_des=reset_des),
142+
transitions={"not_yet": "SAY_DRINK_QUESTION", "max_tries": "DEFAULT_DRINK"})
138143

139144
smach.StateMachine.add('DEFAULT_DRINK',
140145
DrinkNotHeard(guest_drink_des.writeable, default_drink=default_drink),

robot_smach_states/src/robot_smach_states/human_interaction/human_interaction.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,20 @@ def execute(self, userdata=None):
600600

601601
return 'succeeded'
602602

603+
@smach.cb_interface(outcomes=["succeeded", "failed"])
604+
def process_answer(_, context: Union[ds.Designator[str], str], answer_des, output_des):
605+
try:
606+
answer_val = answer_des.resolve()
607+
rospy.logdebug(f"{answer_val=}")
608+
semantic = answer_val.semantics[ds.value_or_resolve(context)]
609+
rospy.loginfo(f"Your answer is: '{semantic}'")
610+
output_des.write(semantic)
611+
612+
except KeyError as e:
613+
rospy.loginfo(f"KeyError resolving the semantic heard: {e}")
614+
return "failed"
615+
return "succeeded"
616+
603617

604618
class AskPersonNamePicoVoice(smach.StateMachine):
605619
"""
@@ -613,19 +627,6 @@ def __init__(self, robot, person_name_des, default_name="operator", nr_tries=2):
613627
reset_des = ds.VariableDesignator(resolve_type=bool).writeable
614628
answer = ds.VariableDesignator(resolve_type=HMIResult)
615629

616-
@smach.cb_interface(outcomes=["succeeded", "failed"])
617-
def process_answer(_, answer_des, output_des):
618-
try:
619-
answer_val = answer_des.resolve()
620-
rospy.logdebug(f"{answer_val=}")
621-
name = answer_val.semantics["name"]
622-
rospy.loginfo(f"This person's name is: '{name}'")
623-
output_des.write(str(name))
624-
except KeyError as e:
625-
rospy.loginfo(f"KeyError resolving the name heard: {e}")
626-
return "failed"
627-
return "succeeded"
628-
629630
with self:
630631
self.add(
631632
"WRITE_RESET_DES_TRUE", WriteDesignator(reset_des, True), transitions={"written": "SAY"}
@@ -642,12 +643,12 @@ def process_answer(_, answer_des, output_des):
642643
)
643644
self.add(
644645
"HEAR",
645-
HearOptionsExtraPicoVoice(robot, "askPersonName", answer.writeable),
646+
HearOptionsExtraPicoVoice(robot, "receptionist", answer.writeable, ["personName"]),
646647
transitions={"heard": "PROCESS_ANSWER", "no_result": "CHECK_TRIES"},
647648
)
648649
self.add(
649650
"PROCESS_ANSWER",
650-
smach.CBState(process_answer, cb_args=[answer, person_name_des]),
651+
smach.CBState(process_answer, cb_args=["name", answer, person_name_des]),
651652
transitions={"succeeded": "succeeded", "failed": "CHECK_TRIES"},
652653
)
653654
self.add(

0 commit comments

Comments
 (0)