Skip to content

Receptionist

Description

The robot has to take two new guests to the living room to introduce them and offer a free place to sit. (5 min limit)

Main Goal: The robot welcomes and assists two newcomers at a party while maintaining appropriate gaze direction during conversation (at person speaking, direction of navigation).

Optional Goals: 1. Open the entrance door for each arriving guest. 2. Describe the first guest for the second guest before reaching the living room 3. Identify similarities between the guests and the host and incorporate them into the conversation.

Possible points

Category Action Score
Main Goal Show the guest around (navigate to the beverage area and living room) 2×30
Look in the direction of navigation or at the navigation goal 2×15
Confirm favorite drink 2×20
Confirm interest of guest 2×20
Tell position of favorite drink 2×20
Offer a free seat to the new guest 2×100
Look at the person talking 2×75
Introduce both guests to each other 75
Bonus Rewards Open the entrance door for a guest 2×200
State a shared interest between two or more persons 50
Describe the first guest to the second guest (per correct attribute) 4×30
Penalties Wrong guest information was memorized (continue with wrong name or drink) 2×–50
Interest was not or wrongly memorized 2×–50
Persistent inappropriate gaze (away from conversational partner) –50
Persistent gaze not in the direction of navigation while moving –25
Describe the first guest to the second guest (per incorrect attribute) 4×–30
Wrongly stating a similarity –30
Deus Ex Machina Alternative HRI 2×–75
Not recognizing people 2×–200
Special Penalties & Bonuses Not attending (see sec. 3.9.1) –500
Outstanding performance (see sec. 3.9.3) 120
Total Score (excluding special penalties & standard bonuses) 1205


Tasks per Area

Move to a predefined position (entrance, beverage_area, living_room)

Args

  • position: to be defined but should represent predefined locations

Return

  • None

Manipulation

move_to_position

Move the arm to predefined positions:

Navigation: Arm should be pointing to the navigation direction.

Gaze: Arm should be positioned at an angle to see guest faces of potentially different heights.

Table: Arm should be pointed to a table top-view to identify items.


Args

  • position: string, int or enum (find best option), representing positions

Return:

  • None

pan_to

Move the arm horizontally at gaze level given an angle to allow the camera to have a different field of view for seat detection.

Subtask Manager

Args

  • angle: int (in degrees, where 0 is the center, - is to the left and + is to the right)

Return

  • None

follow_face

Follow the face of a person with the arm. The vision topic will always be publishing the Point of the face to be tracked, so for manipulation, there should be a service to start following the face with the arm when requested or to stop following.

Subtask Manager

Args

  • follow: bool (True to follow the face, False to stop following)

Return

  • None

open_door

For extra points the robot should open the door :o

HRI

say

Say text provided

hear

The robot should listen and be prepared for varying responses in order to identify: name, favorite drink and interests

Return

  • value: string (either name, drink or interest)

is_positive

The robot will sometime need to ensure it heard something correctly, so it will ask for confirmation. Hence a function is necessary to identify if the response is positive (yes) or not.

Args

  • statement: str (guest response, eg: yes, that's right, wrong, etc)

Return

  • result: bool

common_interest

Given the common interest and name of two people, find something in common and return a message such as: X is interested in soccer and Y in basketball, so you both like team sports.

Args

  • person1: tuple (name: str, interest: str)
  • person2: tuple (name: str, interest: str)

Return

  • common_message: string

Vision

find_drink

Check if there is a beverage available in a table and return its approximate position.

Subtask Manager

Args

  • drink: string (could be any type of drink)

Return

  • status: int (success, execution error, terminal error or target not found ENUM)
  • found: bool (if the drink is available or not)
  • position: string (aproximate position on the table: left, right, center, top, bottom)

find_seat

Find an available seat.

Subtask Manager Args

  • None

Return

  • position: Point (normalized)

save_face_name

Save the name of a guest and associate it to a face.

Subtask Manager Args

  • name: string

Return

  • status: int (success, execution error, terminal error or target not found ENUM)

follow_face

A node should publish the coordinates of the largest face available so that the arm can follow it.

detect_person

Return true when a person is detected or stop when timeout is reached.

Args:

  • timeout: float (time limit)

Return:

  • None

detect_guest

There should be a service to change the person's face to be followed to a specific guest instead of publishing largest face and vice-versa. Additionally, when following by name, the service should only return true when the person is detected or a timeout is reached.

Args:

  • name: str (either person name or "largest_face")
  • timeout: float? (time limit)

Return:

  • result: bool (return true when the person is detected)

describe_guest

Given the image of the guest, provide a description of the person.

Args:

  • None

Return:

  • description: string



Main states

Wait for guest

  • Wait for a guest to be in front of the robot

Greeting

  • Greet the new guest
  • Ask for name
  • Associate name to face
  • Guide guest to beverage area

Beverages

  • Ask for favorite drink
  • Check if the drink is available
  • Ask for interest
  • Guide guest to living room area

Find seat

  • Find an available seat
  • Point to seat
  • Ask guest to take a seat

Introduction

  • Gaze at the host and introduce him to the new guest
  • If available, gaze at other guest and repeat
  • Go back to the entrance