|Short Description:||Balancing robot|
|Research Topic:||Robot development|
TiltOne is a two-wheels balancing robot that can keep itself in equilibrium while moving around. It's a bigger version of Tilty - our first balancing robot - as it is designed to be able to carry a quite high payload (up to 50kg) travelling at speeds of about 1.5m/s.
As the robot needs to keep the wheel axis just under it's center of mass to mantain the unstable equilibrium point, it's inertia should be high in the upper part of the frame and low at the wheel level, allowing the base to move while the center of mass holds - ideally - it's position. For this reason the batteries, that are the heavier component of the robot, are mounted at the top of the frame.
A preview of the robot structure was realized using Google Sketchup 6, giving a first idea about it's dimensions and components placement Media:Tiltone_2_-_completo.zip.
The robot frame is built using standard aluminium profiles (http://www.item.info) to allow future modifications and provide simple solutions to attach auxiliar devices.
Wheels and transmission
The mechanical project was then realized using Rinoceros 4.0 CAD. Apart from the robot frame, particular attention was dedicated to the design of the transmission and the wheel hub, that allow to use standard cross-bike wheels Media:Tiltone_3_Rhinoceros.zip.
The robot is actuated by two high-power electrical DC motor from Maxon Motor (www.maxonmotor.com) that provide torque to the wheels via a belt drive system.
What the robot needs to control it's behavior are it's angle and angular velocity with respect to the direction of the gravitational force and the current speed of the wheels.
To acquire the robot angle and the angular velocity two sensors are used: an accelerometer (LIS344ALH by ST Microelectronics), that gives the components of the gravitational force along the vertical and horizontal axes of the frame, and a gyroscope (ADXRS150 from Analog Devices), that can directly measure the angular velocity with respect to the wheel axis. In order to reduce the influence of robot's movements sensed by the accelerometer, and to avoid the drift of the gyroscope readings, these two measurements are fused with a Kalman filter. The output of the filter is an estimate of robot's angle and angular velocity that tracks very well the real data.
Wheel's speed is obtained by two optical encoders (HEDS-5540 from Agilent) directly attached to the motor rotors, that allow to evaluate the rotor speed and to drive the motors with a closed loop controller.
The robot is controlled by a board built around a STM32 ARM7 Cortex M3 microcontroller by ST Microelectronics.
The microcontroller acquires sensors data, apply a control law and commits a command to the motors. The software running on the ARM is real-time oriented, having periodic tasks constantly running at different frequencies and some interrupt-driven events that can modify the program flow. The board provides also a serial interface to an external PC used to program the microcontroller and a wireless Zigbee module allowing to communicate with the robot
Stability and motion control
We have implemented different algorithms to control the stability of the robot and it's movements. Some of them are based on classical control laws, while others exploit machine learning techniques.
A classical PID controller has been developed for stability control. A simple P-I controller keeps the robot in vertical position, but it is not robust and can't follow a speed o position setpoint.
A better controller was introduced to enhance robot reaction to external disturbances and to follow speed setpoints. A simplified schema of the controller is presented in the following figure.
- C3 is a PID controller that makes the system stable
- C2 is a PID controller that enhance C3 performances varying its setpoint (nested PID approach)
- C1 is the speed controller, obtained by root locus analysis of the system, that acts changing the angle setpoint of the stability controllers
Reinforcement Learning approach
Machine learning techniques have been exploited to keep the robot stable. The approach we used is based on offline FQI reinforcement learning algorithms, and some continuous-time variants to smooth robot movements. Basically, the robot is able to learn automatically a control policy (a function, or a lookup table, that maps the state variables to a control action) by an analysis of data collected with random motor commands. The learning process consists in three steps:
- the robot is controlled by random commands, so it shakes for a while (usually 1-2 seconds) and then falls down
- collected data is analyzed with a FQI policy search algorithm and a policy is obtained
- the policy is tested on the robot, and more data is collected to recursively apply the algorithm
The figure on the left shows starting data collected by applying random commands, while on the right the obtained policy to keep the robot vertical is reported.
- Master thesis by Martino Migliavacca (in Italian): "Progetto e realizzazione di una base robotica bilanciante su ruote" (Design and development of a two-wheel balancing platform). Media:TiltOne_tesi_Migliavacca.pdf
- Project presentation slides by Martino Migliavacca (in Italian). Media:Tiltone_Presentation_Migliavacca.pdf
- First level thesis by Andrea Galbiati (in Italian): "Progettazione e realizzazione del controllo di una base robotica bilanciante su ruote" (Control design and implementation for a two-wheel balancing platform). Media:TiltOne_tesi_Galbiati.pdf
- tiltOne's first steps
- tiltOne is stable
- Remote control with joypad
- Inverted pendulum on Wikipedia http://en.wikipedia.org/wiki/Inverted_pendulum
- Matlab tutorial about controlling an inverted pendulum (Modeling, PID, LQR, etc) http://www.engin.umich.edu/group/ctm/examples/pend/invSS.html#lqr