Dynamic Dance Routine Generation with ROBOTIS-OP3 Humanoid Robot
Project Description
The BoogieBot is a project designed over the course of 10 weeks, employing the ROBOTIS-OP3 humanoid robot to generate dynamic dance routines. This system analyzes music files to identify the track using shazamio and leverages Spotipy to determine the song's tempo. Utilizing this information, the BoogieBot choreographs dance sequences by aligning pre-designed movements to the rhythm of the music. The foundation of this system is built on a multi-docker framework, allowing for functionality across all components. Additionally, the project utilizes the ROS1 bridge, facilitating communication between the ROS1 and ROS2 frameworks.

Description of image 1

ROBOTIS dances to Linus and Lucy by Vince Guaraldi Trio.
Unmute to listen!

Description of image 2

ROBOTIS dances to I Like To Move It by will.i.am
Unmute to listen!

Description of image 3

ROBOTIS dances to I Like To Move It by will.i.am
Unmute to listen!


Core Features:

Using shazamio and Spotipy:
The song artist and title are identified by inputting a .wav audio file into shazamio's `recognize_song` function. The song and artist are then utilized by the Spotipy `search` function, to retrieve the Spotify track id. Finally, the Spotify track id can be put into Spotipy's `audio_feature` function, which returns the song's tempo.

Docker Systems:
This project utilizes specialized Docker containers, designed to combine different ROS environments. The first container hosts ROS1 Noetic on Ubuntu 20.04, specifically chosen to satisfy a Python 3.8 requirement. The second container integrates ROS1 Noetic with ROS2 Galactic, operating on Ubuntu 20.04, allowing communication using the ROS1 bridge between different ROS versions. Both Dockers are able to communicate with eachother and the host computer. Custom Dockerfiles configure this system, ensuring that each component interacts smoothly within the ROBOTIS ecosystem. The use of Docker in this project is shown below.
Description of full-page image

ROS1 Bridge:
This project incorporates the ROS1 bridge, an essential component for communication between ROS1 and ROS2 systems. Deployed within a Docker container, the bridge is constructed using a multi-stage Dockerfile. The first stage creates the ROS1 environment (Noetic), the second stage creates the ROS2 environment (Galactic), and the third stage creates the ROS1 bridge environment (ROS2 Galactic), by combining the necessary components of the previous stages. The different stages allow for the ROS1, ROS2, and ROS1 bridge environments to be built properly. In this project, the bridge is used to send a custom message type from ROS2 Galactic to ROS1 Noetic.

State Machine:
Unless specified otherwise, all nodes are developed using ROS Kinetic and programmed in C++.