Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| pepper-imitation:pepper-imitation [2018/06/28 18:51] – s4pepper2018 | pepper-imitation:pepper-imitation [2018/06/28 20:18] (current) – s4pepper2018 | ||
|---|---|---|---|
| Line 7: | Line 7: | ||
| The main goal was to simulate a well-known nursery rhyme used by Ms Collot' | The main goal was to simulate a well-known nursery rhyme used by Ms Collot' | ||
| - | The gestures currently used are show in the image below: | + | The gestures currently used are shown in the image below: |
| {{: | {{: | ||
| - | As such, the project is made up of two main pillars, namely: | + | As such, the project is built on top of two main pillars, namely: |
| - | * Body pose detection: Windows Kinect V1 was the sensor chosen for this task. | + | * **Body pose detection**: Windows Kinect V1 was the sensor chosen for this task. |
| - | * Robot control and synchronization. | + | * **Robot control and synchronization**. |
| Body pose detection was entirely done using publicly available software. Thus, the main focus of our work was to familiarize ourselves with the robot itself and synchronize all the tasks, as well as fine-tune everything, taking into account the nature of the project and the target subjects. | Body pose detection was entirely done using publicly available software. Thus, the main focus of our work was to familiarize ourselves with the robot itself and synchronize all the tasks, as well as fine-tune everything, taking into account the nature of the project and the target subjects. | ||
| - | The chosen framework was ROS (Robotics Operative System), written mainly in C++, with some parts in python. | + | The chosen framework was ROS (the only tested version was kinetic), written mainly in C++, with some parts in python. |
| + | |||
| + | ===== Installation and Set Up ===== | ||
| + | |||
| + | The code is fully available [[https:// | ||
| + | The repository above contains two ROS packages at the root folder level: | ||
| + | * **openni_tracker**: | ||
| + | * **pepper_imitation**: | ||
| + | |||
| + | Dependencies (and even ROS itself if not present in the system), can be installed running installDependencies.sh in pepper_imitation/ | ||
| + | |||
| + | ===== Running the game ===== | ||
| + | |||
| + | The game sequence can be started by running the roslaunch file pepper_imitation_game.launch. | ||
| + | The skeleton tracker and the kinect driver are to be run separately using the file pepper_imitation_kinect.launch. | ||
| + | |||
| + | Body pose checks can be disabled in pepper_imitation_node.launch, | ||
| + | |||
| + | ===== Architecture ===== | ||
| + | |||
| + | The system is made up of the following nodes: | ||
| + | * **pepper_audio_player_node**: | ||
| + | * **pepper_face_tracker_node**: | ||
| + | * **pepper_tts_node**: | ||
| + | * **pepper_tablet_node**: | ||
| + | * **pepper_imitation_node**: | ||
| + | * **pepper_teleop_joy_node**: | ||
| + | |||
| + | All these nodes can be run separately and commanded by publishing in their respective topics, allowing a Wizard of Oz-ish level of control. | ||
| + | The actual game and synchronization is achieved by means of a state machine, defined in " | ||
| + | |||
| + | ===== Game Flow ===== | ||
| + | |||
| + | The expected behaviour is as follows: | ||
| + | * Pepper says hi, welcome the users to IMT Atlantique, and invites them to click on the tablet to enter a name. | ||
| + | * When the user clicks, an input dialog will appear after a few seconds. | ||
| + | * After entering his name, the music starts playing and the game goes into its main loop. | ||
| + | * Pepper prompts the user to do as him, and assumes a given pose sync'd with the music. | ||
| + | * Now, two possible scenarios can follow: | ||
| + | * The player adopts a pose similar enough. Then Pepper will encourage him to keep going, and the song continues. | ||
| + | * The player does not make a similar pose, or the body pose is not detected properly. In this case, Pepper will ask the player to focus and try again, and the music will go back to the previous part. | ||
| + | * If no skeleton at all is found, Pepper will tell the user that it cannot find him. Two more additional sub-scenarios are possible here: | ||
| + | * The user is detected again after a while. Pepper informs the player and the game continues. | ||
| + | * If no skeleton is found after a while the game is stopped. | ||
| + | * When all the gestures are done and the music ends, Pepper thanks the user and the game goes back to its first state. The user can then click on the tablet again to re-start the game without having to input his name again. | ||
| + | |||
| + | ===== Known Issues and Limitations ===== | ||
| + | |||
| + | * The synchronization process is hardcoded. As such, correct synchronization will only be achieved if the same file is used (it is available in the robot' | ||
| + | * The way openni_tracker publish the skeleton information (using TF frames following the convention < | ||
| + | * As of now, only one person is tracked. However, adding multiple person' | ||
| + | |||
| + | ===== Future Work ===== | ||
| + | |||
| + | * The detection provided by the kinect and the openni libraries is not enough. The calibration phase is a limiting factor when interacting with the subjects. A possible solution to this would be to adopt body pose detection based on RGB data alone. An example of this would be [[https:// | ||
| + | * The concept of this game can be generalized a bit, using some simple config files. These files could define the audio file to be used and the time when each posture should be adopted. Postures may be defined here as well. | ||
| + | * Furthermore, | ||
| + | |||
| + | ===== Contact ===== | ||
| + | |||
| + | Álvaro Páez Guerra | ||
| + | |||
| + | paezguerraalvaro@gmail.com | ||