Round-a-Bot: Holonomic Inverted Pendulum Robot: ME 552 Final Report - 20 December 2010
Round-a-Bot: Holonomic Inverted Pendulum Robot: ME 552 Final Report - 20 December 2010
Jeff Fletcher, Sung-Tu Ho, Jason Kloess, Ranjit Raj, Steve Vozar
Introduction
The original intent of this project was to design a robot system to balance on a single spherical
ball and translate in two directions (forward/backward and left/right). The platform was to be
able to support the weight of a person (<200 lbs) at a comfortable sitting height (2.5-3ft).
Since drafting the initial project proposal, our design objectives have been scaled back in order
to try to complete the project within the time frame of the semester. Our goal for the end of the
semester was to get the robot chassis (without a human payload) balanced on the ball without
any external support.
Unfortunately, because our motor drivers do not provide a current control mechanism, our
previously developed mathematical system model is incomplete. Thus, we do not have an
accurate plant model for our controller, and we did not have time to run a system identification
algorithm to determine the plant. We attempted to create a hand-tuned PD controller with
sinusoidal gain scheduling (small gain near equilibrium, large gain at larger angles), with limited
success. A plan has been developed to get the system running a full state feedback control
algorithm by the middle of next semester.
The new discrete H-bridge motor controllers had adequate current limits (25A max continuous
w/o heat sink) compared to the full H-bridge (35A max continuous w/ heat sink + fan). Since we
dropped the rider operation (250lb weight concern), the 25A max continuous current was an
acceptable limit for each motor controller (validated in prior simulations of just the robot weight).
The motor controllers were also moved from the top electronics plate to the bottom motor and
battery mount plate, so that the noise associated with the high-current motor drivers did not
affect the sensitive electronics of our IMU.
Battery Selection
Originally we intended to purchase two 12 V 3.5 A-h battery and one 12 V 15 Ah battery.
However, since the 12 V 15 Ah Powerstar battery was not in stock, we opted for a 12V 12 Ah
Universal Battery. This battery did not hinder the performance of the robot in anyway but only
reduced the operation time to 0.75 - 1 hour instead of the 1-1.5 hour operation initially specified.
Miscellaneous Changes
We also had some minor changes. For example, the size of the motor controller wires had to be
changed to 14 AWG due to the smaller size of wire connector terminals in the motor controller.
Due to the significantly lower continuous current draw requirements, this was acceptable.
The emergency stop was replaced by the combination of 12V electronic switch and electro-
mechanical starter relay (for a car starter) due to the lower current limit. Originally we planned
for a solid state relay which performs better under continuous duty, but this was switched to an
electro-mechanical starter relay since the original supplier never shipped our order (even after 1
week from order and numerous follow-ups) and to save on cost.
New additions
These are some components on our robot which we did not mention in our final design. Most of
these components improve the overall safety of the robot and we felt it was important to make
these inclusions.
A new ABS motor controller mount plate was made to insulate the motor controllers from the
aluminum base plate. A cooling fan and an aluminum plate covering the motor controllers added
as well. The fan improved cooling of the motor controllers and the aluminum covering acted
partially as a Faraday cage to shield noise but also to physically protect the small sensitive
motor controllers.
Additional safety features included were: a plastic shield covering the entire robot to protect
from external disturbances, fuses at important junctions (175A on the 12V motor driver circuit
and 8A on the 24V cRIO circuit) were included so as to protect important electronic components
and four caster wheels to protect the robot from too large of a tilt angle.
We did notice an asymmetry in the torque transmitted to the ball however. Since the wheels
were located on one side of the ball they could more easily spin the ball in one direction than
the other (forwards/backwards). In this case, it was easier to “climb” over the ball (think climb
milling) than to pull it in the opposite direction. This asymmetry could cause some problems with
the control algorithm, but can be compensated for if known based on the which direction the the
robot is tilting.
The motor drivers transmitted a PWM voltage signal to the motors, which is different from
the current control method we had originally planned, so our plant model for the system was
incorrect. Instead of a current command to the motor controller, we needed to send a duty cycle,
which corresponded to different currents depending on the load on the motor.
According to the specifications of the IMU, we should have been able to power it with the
cRIO, however there was an issue with a charge pump associated with the circuitry of the
Gyro that meant that the cRIO could not properly power the IMU. We solved this problem by
adding another voltage regulator to draw 3.3V from the 24V battery source. The IMU functioned
properly after this change.
cRIO
The cRIO was a bit difficult to work with. It would sometimes have trouble connecting with the
computer, and it occasionally had inexplicable errors. On the other hand, it was almost certainly
easier to work with than a more bare-bones micro controller. By the end of the project, we were
able to include all features we had originally planned to include on the cRIO.
Component Testing
If possible, we would have acquired all the components with the most uncertainty (such as the
motor drivers and the cRIO), and test them out before the rest of the components arrived, so
that we would have more experience with them before trying to implement them on the final
system. For example, testing the motor driver PWM signals with some motors under different
loads would have been very helpful to do before we assembled everything. To do this, we would
need to finalize the design early and order the components which need additional testing /
configuration well before we did.
Motor Selection
In choosing motors, we found that our current motor has a much higher top speed than we
need, so we could have reduced this significantly. For future designs, we would consider using
a higher gear ratio, or using a slower direct drive motor.
Weight considerations
At first, the goal of the project was to have a robot that a person could ride, so we weren’t
very strict with our weight requirements for the robot - since it would be much lower than the
weight of the person. However, if we were to limit ourselves to a payload-free system, we
could have designed a much lighter system, using more plastic components than metal, and
we could have severely reduced our chassis weight. Additionally, this would affect our motor
torque requirements and a wider selection of motors and drivers may have become available.
It became a question of which goal is more important: the ability to ride the robot, or the simpler
but more achievable goal of a light-payload system. We decided to maintain a focus on using
the Round-A-Bot for personal transportation, and fell short of that goal.
Motor Drivers
Selecting a proper motor driver proved to be a challenging task. Our initial specifications placed
us in an area where few motor drivers could meet the requirements at a reasonable cost.
Having gone through the project we now realize that we may have been able to select a motor
driver with lower specs. We also had trouble identifying a current controller that could meet our
requirements. As a result, our initial controller could not be used on our final product. In the end,
the best option may have been to spend time very early on in the project developing our own
current controller. While this option may have resulted in headaches early on, in the end we
most likely would have had a more successful product.
Future Work
All sensors and actuators for the Round-a-Bot are functioning properly, and the system is able
to run in open loop without any problems. However, we were unable to design and implement a
proper controller to get the system to behave as an inverted pendulum. The project timeline for
next semester is as follows:
● January 2011 - Perform system identification on the robot to get an accurate plant model
for controller design. (Lead: Jason, Steve)
● February 2011 - Design an implement a full state-feedback controller on the robot. At
this point, the robot should be fully operational in terms of balancing. (Lead: Jeff)
● March/April 2011 - See if we can port the controller from the cRIO to another
microcontroller (such as an Arduino or Gumstix board) for a more permanent
microcontroller solution. (Lead: Jason, Jeff, Steve)
At the conclusion of next semester, we should be able to determine if the Round-a-Bot should
be left intact, or if its parts would be better suited for future ME552 projects.
Conclusions
The original aim of this project was to produce a two-dimensional inverted pendulum robot that
rides on a sphere suitable for human transport. Since DR3, we scaled back our design goals
to simply be able to balance the robot chassis on the ball without human support. Currently,
we have the robot assembled and working in open loop, but our attempt at hand-tuning a PD
controller without knowing the plant model was unsuccessful, so robot balancing is not currently
possible. The plan for the next semester is to run a system identification algorithm to precisely
determine the plant model, after which a full state-feedback control system can be designed.
Following the successful implementation of the control system, we plan to switch from the cRIO
microcontroller to a more permanent solution, such as an Arduino or Gumstix board.