Conservation of Angular Momentum Locomotion Robot (Fluffbot)

From Mech
Jump to navigationJump to search
Fluff Bot 1.jpg


Flufbot uses conservation of angular momentum to move forward or backward, by controlling the acceleration of a momentum wheel and the angle of a steering wheel.

Some videos:

Fluffbot with seal casing 1

Fluffbot seal-on-land

Fluffbot seal-in-water

Fluffbot seal-on-ice

Fluffbot seal-on-land reverse

Fluffbot bottom view of momentum and steering wheel

Fluffbot with seal casing 2

Fluffbot with seal casing 3

Team Members

Johnson - Pentelovitch - Yu
  • Tyler Johnson - Mechanical Engineer - Class 2011
  • Noah Pentelovitch - Mechanical Engineer - Class 2010
  • Ren Chung (RC) Yu - Electrical Engineer - Class 2010

Concept Overview

Fluffbot Motion

Instead of using motors to directly drive its motion forward, Fluffbot uses the basic principal of conservation of angular momentum. When an object with a high moment of inertia is accelerated about an axis, angular momentum in the direction of motion is immediately created. When this happens, angular momentum in the opposing direction is also produced. The resulting motion from this "reaction" momentum can be transferred to ground through a rigid fixture, or this resulting motion could be controlled and channeled into a desirable form as shown with Fluffbot.

When the large flywheel on Fluffbot accelerates clockwise in the horizontal plane, the body attempts to conserve the zero angular momentum of the system by rotating around the same axis in a counter clockwise direction. Motion forward or backward by Fluffbot is made possible by the steering of the front wheel. There are three conditions for the steering wheel to be in, and three corresponding effects:

1) Wheel is aligned straight ahead - In this scenario, friction between the front wheel and the the ground prevent any rotation along the robot's main axis of rotation. Any acceleration of the momentum wheel in this arrangement will result in no movement of Fluffbot.

2) Wheel is turned to the left - When the momentum wheel accelerates in a clockwise direction, the chassis will attempt to rotate to the left. Because the front wheel is turned to the left, a portion of this rotation will be allowed to occur around a pivot point perpendicular to the direction the wheel is pointed. This gives the overall effect of turning Fluffbot to the left and moving it slightly forward. If the momentum wheel were to accelerate in the opposite direction (counter clockwise) while the front wheel is steering left, the result would be to turn Fluffbot to the right and send in moving backward.

3) Wheel is turned to the right - This exhibits the same behavior as when the front wheel is turned to the left, however, the direction of rotation for the momentum wheel and the chassis are reversed.

In order to control the motion of Fluffbot and to send it in a straight direction, the momentum wheel accelerates back and forth sinusoidally as the front wheel turns left to right with the same sinusoid. To reverse the direction that Fluffbot travels, simply put the front wheels control wave 180˚ out of phase with the control wave for the momentum wheel. Fluffbot is also able to steer left and right by controlling the amplitude and range of the front steering wheel.

Mechanical Design

Inside Fluff Bot

The Fluffbot has all of its circuitry and mechanical components confined to a single chassis. The chassis is an arrow shape and is mounted on three wheels attached to the bottom of the chassis. The two rear wheels are fixed, while the front wheel is free to rotate and is mounted on a fork and coupled to a servo, which controls its turning angle. A momentum wheel is fixed underneath the center of the chassis to a motor which is mounted on top. All circuitry and power sources are mounted on the top of the chassis as well.

Mechanically, the Fluffbot is designed for minimum chassis weight and maximum torque generated by the momentum wheel. The momentum wheel is mounted directly in the center of the three wheels so that the torque is distributed evenly. The wheels use press-fit ball bearings mounted on fixed axles to achieve minimum friction when rolling. The front-wheel fork is mounted to the chassis through a ball bearing to reduce frictional force on the servo motor.

Parts List

  • Motors: Futaba S3004 standard ball bearing RC servo motor, Mechatronics Lab - Pittman GM8712G708-R3 Motor 19.5:1 gear head, Mechatronics Lab
  • Wheels: Machined from Aluminum 2" 6061 rod, McMaster part# 8974K711
  • Momentum Wheel: Machined from 6" Aluminum 6061 rod, machine shop stock
  • Tires: Shop Stock rubber wheel coverings
  • Wheel Fork: Machined from aluminum 6061 rod, McMaster part# 8974K711
  • Wheel Fork Bearing: Steel, flanged open ball bearing, 1/4" ID, 11/16" OD, McMaster part# 6383K213
  • RC Servo-Shaft Coupler: Split clamp to Futaba S3004 coupler,
  • Chassis: laser cut from 1/4 inch 12"x12" clear acrylic
  • Axels: 1/4" tapered dowels
  • Wheel Bearings: 3 x Open steel ball bearings, 1/4" ID, 7/8" OD, 1/4" thickness, McMaster part# 6383K14
  • Fasteners: 10-32 set screw for securing the momentum wheel to the motor, 4-40 round-head screws for securing motor to the chassis
  • Velcro: To attach battery packs and housing to the chassis
  • Adhesives: Acrylic Epoxy for Servo Holder, Superglue for rear wheel mounts
  • Power Source: 2 x 9.6 V, 2200 mAh, NI-MH, Powerizer rechargeable battery


The base of the chassis is made from a sheet of 1/4 inch clear Acrylic. It needed to be large enough to hold the motors, two batteries, and two circuit boards. In order to reduce the weight of the design, the base was cut into a triangle with wheels to be placed at each corner. Four small holes were cut at the front and at the middle of the base to allow the motor to be secured, and one larger hole was cut for a bearing to be pressed into place for the front steering wheel. Dimensioned Drawing of Chassis

Steering Assembly

RC Servo Attachment and Front Wheel Fork

The front wheel was attached to the steering servo through a machined aluminum fork. The fork design was used (as opposed to a one-sided mount) so that the axis of rotation for the front wheel could be directly centered above the centerline of the wheel with relative ease.

The Futaba RC servo used for steering the front wheel was held in place by the servo-shaft coupler and by two pieces of acrylic. The servo was light enough that it could be supported by only the coupler. Two vertical pieces of acrylic prevented the servo from rotating as it turned the front wheel. A small piece of electrical tape kept the servo from backing off of the coupler while Fluffbot was operating. Dimensioned Drawing of Steering Fork

Momentum Wheel

Angular Momentum Wheel

The momentum wheel is design specifically to increase the torque on the body. This was done by machining the wheel so that there was more weight on the outside of the wheel. The momentum wheel is made from Aluminum 6061. The shaft in the center of the momentum wheel connects to the shaft of the motor using a set screw. The motor connector shaft and the momentum wheel were made as one piece to increase rigidity and assure that the momentum wheel would be perfectly parallel to the chassis. The momentum wheel weighs about 1.3 lbs, which makes the torque on the motor above its maximum continuous torque rating. We felt that this would be alright because the motor is not running continuously at a high speed, but rather is accelerating and decelerating sinusoidally. The motor is also not running at maximum rpm. Dimensioned Drawing of Momentum Wheel


Wheel with Ball Bearing

The wheels we used were specially machined out of Aluminum 6061 to fit treaded rubber tires we found in the machine shop. Aluminum was used instead of preformed plastic wheels because we could precisely machine the wheels to fit the design of the Fluffbot, rather than needing to design the Fluffbot around the wheels we had available. The wheels were designed to fit open steel ball bearings, 1/4" ID, 7/8" OD, 1/4" thickness. The ball bearings were press fit into the center of the wheel. We used ball bearings so that the wheels would spin with minimal friction and thus less energy would be required to move the Fluffbot. Dimensioned Drawing of Wheels

Battery and Electronics

The batteries and circuit boards were attached to the top of the chassis using Velcro. The configuration of the batteries as well as the placement of the circuit boards are intentional, concentrating the majority of the weight around the center of hte momentum wheel and also so that different housing (read: stuffed animals) could be easily placed around the Fluffbot.

Fluffy Housing

Fluffy Housing

The Fluffbot receives its name from the fluffy stuffed animals that ride atop it and that the Fluffbot imitates by its motion. For this version of the Fluffbot a seal was used to house the mechanical structure and electronics. The seal is split in two and attached to the chassis by Velcro. There is a piece of sheet metal that is bent and attached with Velcro to the upper part of the seal so that it will maintain its structure.

Mechanical Debugging

Bearings are coming out of rear wheels: Re-machine wheels using a boring bar for the through-hole for the bearings. While boring out hole, check dimensions of the bearing being used and take small cuts, measuring after each pass, to assure that the hole diameter precisely matches that of the bearing.

Servo comes loose from servo coupler: Machine a set screw hole through the part of the coupler connecting to the servo and add a set screw to keep the servo in place


Parts List

  • PIC32 NU32 Board + PIC USB cable
  • XBee Interface Board (2)
  • RS232 cable
  • LM7805C 5V regulator (2)
  • 0.33uF capacitor
  • 0.01uF capacitor
  • LM338T adjustable voltage regulator (2)
  • 5k potentiometer (2)
  • 120 ohm resistor (2)
  • 0.1uF capacitor (6)
  • 1uF capacitor (2)
  • L298N H-bridge
  • 14N002 diodes (4)
  • LS7083 decoder
  • 100k ohm resistor
  • Pittman GM8712G708-R3 24V motor
  • Futaba S3004 RCservo motor
  • Protoboard/breadboard

Electronics On Fluffbot

Electronics Block Diagram

A 24V DC motor is used to control the momentum wheel. A RCservo motor is used to control the steering angle. An XBee Board is used to communicate between the Fluffbot and a PC.

Fluffbot Circuitry

The electronics block diagram (right picture) shows how each circuitry block connects to each other. The following links illustrate how each individual circuitry block is built:

Electronics At Computer

The second XBee Interface Board is connected to a computer using the RS232 cable. This enables the user to communicate wirelessly in real-time to the Fluffbot.


There is a PIC32 code, compiled using MPLAB, as well as a Processing code. Download them: PIC code, Processing code.

The code does three things:

1) Sets motion parameters.

2) Controls acceleration and direction of the momentum wheel.

3) Controls angle of the steering wheel.

1) Sets motion parameters

Depending on the "type" of seal chosen, Fluffbot exhibits different styles of motion. The styles of motion are changed by changing the maximum angle of the steering wheel (amplitude) and by changing the rate at which the momentum wheel and steering wheel change direction (frequency).

There are three motion styles to choose from:

  • Seal on land (medium amplitude, high frequency)
  • Seal in water (low amplitude, medium frequency)
  • Seal on ice (high amplitude, medium frequency)

Steps to change motion parameters:

  • From a computer, using a Processing GUI, the user chooses between seal on land, in water, and on ice. The users choices are transmitted wirelessly to the Fluffbot.
  • In the PIC code: the UART 2 interrupt handler receives the instructions, and changes amplitude and frequency.
  • The function setAnimalParameters() takes this new information, and changes Fluffbot's motion accordingly.

2) Controls acceleration and direction of the momentum wheel

The momentum wheel accelerates in a sinusoidal motion. The PIC controls uses PD control to control the acceleration. (You'll see in the code that we use speed control, but controlling speed will effectively control acceleration.)

The code controls acceleration with four steps:

  • Sets a target speed "set_speed", based on a sinusoid generated in the setAnimalParameters() function.
  • Gets actual speed data from encoders on the momentum wheel motor, with the getActualSpeed() function.
  • Calculates the error between set speed and actual speed, with the calculateError() function.
  • Sets PWM to help decrease the error, with the setPWM() function.

3) Controls angle of the steering wheel

The angle of the steering wheel determines whether the Fluffbot is going forward or reverse, and turning left or right.

There are four motion directions to choose from:

  • Forward. Momentum wheel acceleration and steering wheel angle out of phase by 180 degrees. Equivalently (and as in the code), the steering wheel angle leads the momentum wheel speed by pi/2.
  • Reverse. Momentum wheel acceleration and steering wheel angle in phase phase. Equivalently (and as in the code), the steering wheel angle leads the momentum wheel speed by 3*pi/2.
  • Left, and 4) right. The variable middle_servo changes, so that the steering wheel angle changes about an angle leftwards or rightwards.

Steps to change direction parameters:

  • From a computer, using a Processing GUI, the user chooses between forward, reverse, left, or right. The users choices are transmitted wirelessly to the Fluffbot.
  • In the PIC code: the UART 2 interrupt handler receives the instructions, and changes the phase and middle_servo.
  • The function setAnimalParameters() takes this new information, and changes Fluffbot's direction accordingly.


Overall, Fluffbot was a success.

Calibrating Fluffbot's front wheel to the proper steering took some fine tuning, but once it was oriented properly, the robot was easily controllable.

Wireless control from a processing GUI, made steering and adjusting the motion style quite easy.

Video of Fluffbot in action can be seen by following the links at the top of the page.

Next Steps

Due to the short amount of time in which the Fluffbot was designed, built and programmed, there was not enough time for optimization and iteration. Thus, there are many areas in which the Fluffbot could be improved with future work.

Position Sensors

Sensors could be added to the robot to allow it to know its position. this could be accomplished by adding encoders to the front wheel to determine the distance the Fluffbot has moved from its initial position. It would then be possible to map the Fluffbot's trajectory as well as collect data about its speed and efficiency.

Obstacle Avoidance

By adding optical sensors to the Fluffbot we could program it to automatically avoid obstacles. This would most likely use an override function that would supersede the command coming from the user.

High Torque Servos

High torque servos would enable the Fluffbot to move more quickly because the front wheel would be able to turn at a higher frequency.

Hand-held Controller

By linking the control of the Fluffbot to a handheld controller a user could more easily interact with the Fluffbot and control it because they wouldn't need to be staring at a GUI on a computer to control its behavior.


The initial scope of the project included giving the robot the ability to ride on a vertical wall. While this was not a possibility for us in the time frame allotted, a future team may be able to build on our design to enable dynamic motion using a momentum wheel along a vertical surface. This may be possible by using neodymium wheels to attach the robot to a metal wall.


The Fluffbot does not currently have a housing that protects the electronics on the chassis. A housing would allow for easy attachment and detachment of various animal shells and would also prevent the stuffed animals from contacting the hot electronics and making them heat up even faster. Air vents could also be added to the housing to allow for heat to dissipate from the electronics.