Lab 2: Wizard-of-Oz GUI for Nao


Learning Goals


Slides

Here's a link to the slides from today's lab.

Getting Started


Preparing Your Files

Please organize your Lab 2 files the same way as Lab 1 so that your imports work correctly and the teaching team can debug issues more easily.

  1. Create your Lab 2 folder with this exact name: Inside EECS690_HRI_Lab, create a folder named lab_2_nao_woz_gui.
    cd EECS690_HRI_Lab
    mkdir lab_2_nao_woz_gui
  2. Name your main Lab 2 file exactly: The Python file for this lab should be named nao_woz_gui.py.
    touch lab_2_nao_woz_gui/nao_woz_gui.py
    This filename matters because the lab instructions and example run command assume this exact name.
  3. Design and implement your own interface in that file: You will not be given starter GUI code. Instead, you should create your own Wizard-of-Oz interface and decide how to organize the controls, layout, and interaction flow.
  4. Activate your virtual environment before running anything: Each time you start working on this lab, cd EECS690_HRI_Lab and run source venv/bin/activate. (When you're done, run deactivate).
  5. Use this folder structure: To make debugging easier, everyone should organize their files in the same way:
    EECS690_HRI_Lab/
    ├── venv/
    ├── lab_1_hello_nao/
    │   └── nao_introduction.py
    └── lab_2_nao_woz_gui/
        └── nao_woz_gui.py
    Important:
    • Your Lab 2 folder should also be directly inside EECS690_HRI_Lab
  6. How to run: With your virtual environment activated and while inside lab_2_nao_woz_gui, run:
    python3 nao_woz_gui.py <NAO-IP-ADDRESS>
    Replace <NAO-IP-ADDRESS> with your robot's IP address.

Lab 2 Overview


In this lab, you will design and build your own GUI interface that allows a human to control Nao during a live human-robot interaction. The goal is to simulate Nao's conversational abilities and non-verbal behaviors in a controlled setting while giving you practice making interface design decisions yourself.

The interface will include:

Here is an example GUI made with tkinter to help you envision the kind of layout you might build:

Example Wizard-of-Oz GUI layout

Designing Your Own Interface


For this lab, we will not be providing you with starter GUI code. Instead, you should research how to build a Python-based interface for Nao and then create your own Wizard-of-Oz system from scratch in nao_woz_gui.py.

You should decide what kind of interface will work best for a Wizard who needs to control Nao quickly and clearly during the interaction. For example, you might research tkinter, PySide6, PyQt6, wxPython, or another lightweight approach that you can run locally. The key requirement is that your design is usable in real time and successfully controls the robot.

As part of this process, you should:

Note: Because you are designing the interface yourselves, you may need to look up documentation or tutorials for the GUI toolkit you choose. Keep your design simple and practical. A clear, reliable interface is much better than an overly complex one.

A useful starting point for comparing GUI libraries is this overview page: Which Python GUI library should you use?

Working in Groups


You will work with a different group for all of the robot programming labs (Labs 1-3). Each individual will turn in their own set of deliverables for their GUI design.

Lab 2 Deliverables & Submission


Your GUI must include:

We ask you to turn in the following:

Example requirements.txt

pillow==12.3.0
qi==3.1.5

When the teaching team receives your requirements.txt, we will recreate your environment by activating our course virtual environment and running pip install -r requirements.txt from within EECS690_HRI_Lab.

You can get the requirements.txt for your virtual environment by running pip freeze > requirements.txt in your terminal with your venv active.

Important: The teaching team needs to be able to run your GUI when grading. If your submitted code does not include enough information for us to reproduce your software environment, or if we cannot run your GUI because dependencies are missing or unclear, you may receive deductions.

Submit everything to Canvas by Thursday, September 10, 2026 at 11:59pm.

"Three Good Things" Interaction Flow


As we introduced in Lab 1, you will be programming the Nao robot to act as a facilitator of a positive psychology exercise called the "Three Good Things." This exercise is a well-known positive psychology intervention that has been shown to improve overall mental health and well-being. In this exercise, both the robot and the participant will take turns sharing three things that they are grateful for that have happened to them in the past week. Here's how the interaction should flow between the robot and human participant and which parts should be pre-scripted vs. dynamic for the wizard:

Tips & Resources


Extra Challenge


For an additional challenge, consider adding:

Common Errors & Troubleshooting


Before reaching out to the teaching team for help, please read through this section. Many Lab 2 issues come from the same setup and import problems that appeared in Lab 1.

Nao Connection Errors

If your GUI runs but Nao does not respond, or if you see a connection error when trying to send a command to the robot, first check the following:

Module Not Found Errors

Even after installing packages, you might still see errors like these:

ModuleNotFoundError: No module named 'PySide6'
ModuleNotFoundError: No module named 'PyQt6'
ModuleNotFoundError: No module named 'qi'

For this lab, the most common causes are:

The same debugging process from Lab 1 applies here, so confirm you are running the Python interpreter that has your GUI toolkit installed and that the toolkit is listed in requirements.txt.

Important: Lab 2 depends on the same environment setup as Lab 1. If you run into import problems, go back to the Module Not Found Errors troubleshooting steps from Lab 1 and apply the same process here.

Instructor AI Usage Acknowledgment: This lab was partially created using Gemini AI to do the following things: