Features

This section outlines the key features of the PuppyPi Cloud Robotics system.

Core Features

Feature Name

Description

Voice Command System

Allows control of the robot via vocal commands. Supports all basic movement commands from the original app - these include walking as well as all the Action Group files (‘Performance’ section of the app).

Cloud Integration

Enables remote control and monitoring through cloud services.

AI Prompt Control

Prompts ChatGPT to interpret spoken phrases into individual commands.

Extended Command Set

Adds new capabilities beyond the original app functionality, including chaining multiple commands together and command interruption.

Technical Features

Component

Description

On-startup running

When the robot is turned on, it automatically runs controller.py (you can turn this off)

Automatic github download

When the robot is turned on it automatically pulls from the github with updated code

Network interoperability

The robot can connect to various networks by going into the Raspberry Pi and connecting to the specific network via the terminal

PyAudio recording

Uses pyaudio library to record and edit audio files input by the user via the mic

Noise reduction

Uses vad python library to limit the amount of audio input to help get a clear command

Audio compression

Uses audio compression techniques to speed up sending audio files to the cloud

Silence/time based spoken command detection

After the robot hears silence for 1.5 seconds it will assume the user has finished saying the command. After 10 seconds, it hard stops to ensure background noise doesn’t make it record forever

Wake Word Detection

Uses picovoice python library to create a wake word (default = ‘PuppyPi’, can be edited by user) that detects when the word is said to initalize the prompting

Bluetooth mic

Optional external bluetooth mic/headset to greatly increase amount of correct audio transmitted to the PuppyPi (without this there is a large chance the motors drown out user’s voice)

Websocket

Uses an external websocket system to send information into the docker file to run specific commands, this way the code isn’t deleted on startup

Command queue

A queue called “command_queue” to store which commands to run in a specific order across threads. This allows for multicommand execution

Payload dictionary

A list of payloads connected via command_queue words (ex. “walk”) that tell ROS what to execute on the PuppyPi motors

Text transcription

Uses OpenAI Whisper to convert the user’s spoken phrase into text for the AI prompt.

AI prompt

A long string inside the lambda function that prompts gpt for a set of commands based on the user’s phrase (first turned audio into text for prompt). This can be changed for specific edge cases with additional prompting.

Continuous Command Duration Control

When asking the robot to do a continuous command such as “walk”, request a number of seconds for the program to run for

Automatic Stopping

When prompting the robot again while its executing commands it will stop its current command and delete all future commands

Speaker functionality

Plays a barking sound to alert user that the robot is listening

Multilingual

Able to understand commands in most languages, including Google Translated commands

Command generation

Ability to perform non-existing commands if the functionality could be created by a chain of current commands, such as “walk in a square” (walking and turning)

Face Detection

When this command is run the robot will wave its paw when it detects a face

Color Detection

When this command is run the robot will nod its head when a specific color is found (currently blue, red, green)

Visual Patrol/Line following

When this command is run the robot will follow a line of a specific color (black, red)

List of Current Voice-Executable Commands

Action

Description

Type

Parameters/Notes

Sample Command

Two leg stand

Make the PuppyPi stand on its two back legs

Rosservice, action group

N/A

“PuppyPi, can you stand on two legs?”

Bow

Make the PuppyPi do a bowing motion by lowering its head

Rosservice, action group

N/A

“PuppyPi, can you bow?”

Boxing

Make the PuppyPi stand on its hind legs and punch with its front legs

Rosservice, action group

N/A, boxing-main and boxing-alt do the same thing

“PuppyPi, do a boxing punch”

Grab

Make the PuppyPi grab the object in front of it with its detachable arm

Rosservice, action group

N/A, untested functionality, for grabber arm only

“PuppyPi, grab with your arm”

Jump

Make the PuppyPi “jump”

Rosservice, action group

N/A, does not jump high at all

“PuppyPi, jump for me”

Kick ball

Make the PuppyPi kick forward with its front feet

Rosservice, action group

Kick-ball-left or kick-ball-right, do not know what kick-ball-left-bak does

“PuppyPi, can you kick with your left/right foot”

Lie down

Make the PuppyPi lie down

Rosservice, action group

N/A

“PuppyPi, can you lie down?”

Look down

Make the PuppyPi look down

Rosservice, action group

look-down-short doesn’t seem to do anything different

“PuppyPi, can you look down?”

Moonwalk

Make the PuppyPi do the moonwalk - 4 sets of leg movements

Rosservice, action group

N/A

“PuppyPi, can you do the moonwalk?”

Nod

Make the PuppyPi nod its head up and down

Rosservice, action group

N/A

“PuppyPi, can you nod your head?”

Pee

Make the PuppyPi do a peeing motion

Rosservice, action group

N/A

“PuppyPi, can you pee on the floor?”

Push-up

Make the PuppyPi do 2 push ups

Rosservice, action group

N/A

“PuppyPi, can you do some push ups?”

Run

Make the PuppyPi run - version of the “walk” command with faster linear x velocity

Rostopic publish to /cmd_vel geometry_msgs/Twist

N/A

“PuppyPi, can you run?”

Shake hands

Make the PuppyPi lift its front foot up and “shake”

Rosservice, action group

N/A

“PuppyPi, can you shake my hand?”

Shake head

Make the PuppyPi shake its head side to side

Rosservice, action group

N/A, if there is servo deviation this can make the PuppyPi tip over

“PuppyPi, shake your head no”

Shake head

Make the PuppyPi sit

Rosservice, action group

N/A

“PuppyPi, sit down for me”

Spacewalk

Make the PuppyPi “spacewalk” - a smoother version of moonwalk

Rosservice, action group

N/A

“PuppyPi, please spacewalk”

Stand

Make the PuppyPi stand up on 4 legs

Rosservice, action group

N/A, has “stand with arm” and “stand short” not sure what they do if they do anything at all

“PuppyPi, stand up”

Stretch

Make the PuppyPi “stretch” by leaning forward

Rosservice, action group

N/A

“PuppyPi, please stretch out”

Turn around

Make the PuppyPi turn 180 degrees around

Rostopic publish to /cmd_vel geometry_msgs/Twist, alters the angular velocity of z

N/A

“PuppyPi, turn around”

Turn left

Make the PuppyPi execute a 90 degree turn left

Rostopic publish to /cmd_vel geometry_msgs/Twist, alters the angular velocity of z

N/A

“PuppyPi, turn left”

Turn right

Make the PuppyPi execute a 90 degree turn right

Rostopic publish to /cmd_vel geometry_msgs/Twist, alters the angular velocity of z

N/A

“PuppyPi, turn right”

Up stairs

Make the PuppyPi attempt to go up raised blocks in a stair step format

Rosservice, action group

There are many different versions of this and all of them work very poorly - PuppyPi likely to fall over

“PuppyPi, go up some stairs”

Wave

Make the PuppyPi do a body wave

Rosservice, action group

N/A

“PuppyPi, do the wave”

Walk

Make the PuppyPi walk forward

Rostopic publish to /cmd_vel geometry_msgs/Twist, alters the linear velocity of x

Can be customized with a length of time such as “walk forward for 5 seconds” otherwise defaults to 2.5 seconds

“PuppyPi, walk forward”

Walk backwards

Make the PuppyPi walk backwards

Rostopic publish to /cmd_vel geometry_msgs/Twist, alters the linear velocity of x (negative direction)

Can be customized with a length of time such as “walk forward for 5 seconds” otherwise defaults to 2.5 seconds

“PuppyPi, walk backwards”

Face detection

Make the PuppyPi attempt to detect a face using front camera. When it does it will perform the “shake hands” action

Rosservice, not an action group

N/A, we have it working for 10 second increments and then the stop command is automatically sent. If the stop command is not sent it will perform indefinitely

“PuppyPi, find my face”

Line following

Make the PuppyPi attempt to follow a line on the ground

Rosservice, not an action group

Will follow black or red lines. We have it working for 10 second increments and then the stop command is automatically sent. If the stop command is not sent it will perform indefinitely

“PuppyPi, follow the black/red line”

Color detection

Make the PuppyPi detect colors - LED changes for blue, green, and red. Theoretically other colors can be created in the Lab Tool we just never got there.

Rosservice, not an action group

Nods head for red, shakes head for others. We have it working for 10 second increments and then the stop command is automatically sent. If the stop command is not sent it will perform indefinitely

“PuppyPi, perform color detection”

Apriltag detection

Make the PuppyPi detect apriltags and perform the action it is told. Can only detect tags 1,2,3 from tag36h11 group - not sure if there are more but these are all that worked for us.

Rosservice, not an action group

N/A, We have it working for 10 second increments and then the stop command is automatically sent. If the stop command is not sent it will perform indefinitely

“PuppyPi, detect some apriltags”

Lidar

Make the PuppyPi use the lidar for various features sensing its environment. Requires Lidar to be attached to the PuppyPi.

Rosservice, not an action group

3 modes - obstacle avoidance, tracking, guarding. We have it working for 10 second increments and then the stop command is automatically sent. If the stop command is not sent it will perform indefinitely

“PuppyPi, do lidar avoidance/tracking/guarding”

Future Features

Note

These are planned features under consideration for future development

  • Advanced gesture recognition

  • Multi-robot coordination system

  • Utilizing the arm that comes with the PuppyPi to pick up and grab objects

  • More advanced computer vision techniques, allowing PuppyPi to dynamically interact with its environment

  • Ability to run python programs on PuppyPi through the websocket instead of individual ROS commands one by one

  • Final app functionalities - color tracking

  • Advanced command generation - ability to extrapolate and move PuppyPi creatively

  • Allowing face detection, line following, color detection, & lidar to be interrupted with a call to the wake word