Humanoid robots commonly have tasks that require careful balancing or handling of various objects
e.g. waiter robots, military robots
Realistic: If simultaneously moving while balancing objects, humans use vision to navigate environment while using pressure of objects to determine optimal orientation to balance them
We hope to extend this idea to robots
We built a custom platform with four force sensors embedded within the middle of each edge
The force sensors are connected to a microcontroller that sends pressure readings to a ROS system
By using system ID in combination with least-squares, we can “triangulate” the position of the ball as a function of the pressure readings of each sensor
The ball’s position can be sent back to the controller to move the plate to a position that will balance the ball
This approach potentially generalizes to objects of different shapes
The LQR controller controls the orientation of the plate based on the ball’s position reading
Not perfect - lots of assumptions made about system
Includes simplifying dynamics of system, linearizing the relationship between pressure reading and ball position, etc.
The idea is that we can still get a close-to-optimal solution based on a custom cost function
Originally, we focused our project entirely on the control method, as no research had done LQR control with a limbed robot like Baxter
We additionally wanted to include Control Barrier Functions in combination with LQR to ensure safety
We quickly realized that we had a larger theoretical contribution from our method of measuring the position of the ball
Kept optimal control method as an additional goal to work hand-in-hand with new goal
Gripper mount that connects platform to Baxter gripper
Three layers of wood that sandwich force sensors in between
Removable wood inner plate that allows ball to roll on smooth surface
Microcontroller mounted on the underside which delivers sensor readings to ROS nodes
First calibrate the sensors after placing the ball in the middle of the plate
Assumption that sensor readings have a linear relationship with the position of the ball measured on 2-D coordinate frame on plate
Perform System ID by measuring force readings at different (x, y) positions of the ball, fitting a linear function for each force reading, and tuning
When running balance control, can estimate (x, y) from force readings by doing least squares:
We solve for and simplify the system dynamics to get the following input-output relationship:
m, I, and r are the mass, moment of inertia, and radius of the ball respectively.
We can rewrite as the following state-space form
This state-space form is in the form required for LQR:
For LQR, we try to minimize the following cost function:
Minimizing this gives us the optimal controller:
Q and R are matrices in the cost function that we tune to get a better controller
For actual implementation, we use finite-horizon, discrete-time LQR
The theory uses infinite-horizon, continuous-time LQR
We fit linear functions for each force sensor separately as functions of x and y, which we used to generate coefficients for our least-squares matrices.
We found that with some good tuning of the Q and R matrices, the plate makes a decent attempt at balancing the ball in a left to right direction
Q and R matrices used:
Below (left) is a plot of inputs given by our controller in a simulated environment where we move the ball back and forth along the x-axis. Below (right) is the same scenario tested on the plate