# Teleoperation NAO

## Project description

This ROS package allows you to remotely control a NAO robot by standing in
front of a webcam and having two ArUco markers on the hands and one ArUco
marker on the chest.

You can move a NAO around using a "Human Joystick" approach and make NAO
imitate your arm motions. For more details, read our
[report](docs/report.latex) or watch our
[video](https://drive.google.com/file/d/1h1MZO6kPd4VyjMptRxQcwrqtgqMW1eyE/view)
.

Our package relies on the NAO being reachable from the computer and the
environment variable `NAO_IP` being set to the IP address of the NAO.

Our main code is written in Python and located in `script/` with the ArUco
detection and rviz GUI logic in C++ in `src/`.

## Requirements

* ROS Indigo on Ubuntu 14.04
* [aruco_ros](http://wiki.ros.org/aruco_ros)
* [nao_robot](http://wiki.ros.org/nao_robot)
* [nao_meshes](http://wiki.ros.org/nao_meshes)
* [usb_cam](http://wiki.ros.org/usb_cam)

We installed the dependencies by cloning them to our workspace and running
`catkin_make`, but `sudo apt install ros-indigo-package-name` should work even
better.

## Usage

Hang an ArUco #0 marker on the chest, take the #1 in the left hand and #2 in
the right hand. The markers should be 15cm high/wide. Then you can run

```sh
$ roslaunch teleoperation calibration.launch
```

The NAO will tell you what to do.

After that you can launch the teleoperation routine by running.

```sh
$ roslaunch teleoperation fulltest.launch
```

If you want our awesome GUI, run

```sh
$ roslaunch nao_bringup nao_full.launch
$ roslaunch teleoperation with_gui.launch
```

If any problems arise with the GUI, such as the NAO not getting properly
displayed, try pointing the rviz to the correct NAO `.urdf`, which should be
somewhere in the `nao_description` package.

This diagram depicts what you should expect from the teleoperation routine.

![State Machine](docs/figures/teleoperation_overview.png)

Since this package relies on the NAO voice recognition, you must be in the same
room with NAO, and the room must be quiet.
