Jamie Xu, Terence Lee, Kevin Wang
ECE 110 & 120 Honors Lab
tklee, chengx2, jiaenew2
Stewart Platform Project Report
Introduction
Statement of Purpose
Our project involved building a six degree of freedom stewart platform. This platform had data fed into the servos from a PID controller that was fed data from a touch resistive panel to balance/center a metal ball bearing when placed in a location other than the center of the platform. Our goal for this project was to originally get the six degree of freedom stewart platform functional because it can be applied to motion simulations.
Features and Benefits
As seen on the image provided in the cover page, the stewart platform utilizes 6 servo motors attached to control rods that connect to a acrylic+wooden base that houses the resistive panel.
Design
System Overview
For the block diagram, please refer to the Appendix below
In the diagram, the output from the resistive panel (showing the x and y coordinate of the ball bearing location) is fed into the controller which calculates the desired servo position/angles to balance the bearing on the center of the platform using a reverse kinematics algorithm. Once the six servo angles are calculated, the data is fed into the servo motors which then alters the pitch/roll/yaw of the resistive panel. This causes the ball bearing to shift to a new x and y coordinate which loops back into the controller repeating this process indefinitely.
Design Details
Platform Design
The solidworks files designed can be accessed at this link: https://bit.ly/2GlqSc8
This type of platform is so common that it is assigned the name “stewart platform”, so there is no lack of documentation online. We wanted to change some dimensions in our design to make using commercial parts and manufacturing custom parts more convenient, which means designing the platform ourselves in solidworks and laser cutting the pieces to desired dimensions.
Wiring
The wiring is really simple and an inclusion of a schematic diagram will only make it seem more complicated than it is(I still included it nevertheless). All the servo need to be powered by an external power source, that means making an breakout board to supply the extra power that the arduino cannot provide. The breakout board consists of a 5v rail and a ground rail, powering all the servos in parallel, and wires connecting each of the arduino’s pwm out pins to the signal pins of the servos. One notable thing is that the arduino, the breakout board, and the servos all need to be grounded together for the servos to work properly. We ended up hand soldering a pcb for a more compact design.
Reverse Kinematic Calculations
Since for our purpose of balancing a ball bearing we only need to consider the rotation of the platform (and not the translation), the math can be simplified by pairing the two servos that control the same point on the top platform. Given the rotational angles in each axles, we can calculate the y coordinate of the three attachment clusters on the top platform. And from the y coordinates, by assuming the pair of servos have complementary angles, we can calculate the angles by splitting the triangles in half and using cos laws. All the calculations also only need to be estimates because we are using a PID controller to control the outputs.
Results
Test Video
As can be seen in the video above, the PID stewart platform is functional and tilts the platform in the correct direction albeit having some issues with over approximations as well as the platform oscillating even after the ball bearing reaches the center of the platform. Further analysis of these issues and possible future solutions will be covered below.
Problems and Challenges
While working on this project, our group ran into several issues. After designing the platform in Solidworks and cutting out the acrylic pieces for the platform plates, a short destroyed the servos we were using and the new servos ordered had slightly different dimensions and shape which meant redesigning the acrylic plates to account for this. In addition to this, the socket was also fried in the short which meant we had to rewire the circuitry and solder it to a perfboard.
After the platform was assembled and functional, our group ran into difficulty getting the reverse kinematic arduino code working properly. The code we originally planned on using turned out to be riddled with errors and would take too much time to sort through. After struggling with finding the right data sheet for the resistive panel and mapping its 4 wires properly, our group found a relatively simpler reverse kinematic arduino code. Despite finding this, there was an issue with the calculation that led to the servo angle position being inconsistent despite being fed only a single value. Our group addressed this by analyzing the Inverse Kinematics algorithm [4] and rewriting the calculation portion of the code. The final result is shown in the video contained above.
There still remain some issues with the platform mainly that when placing the ball bearing at larger distances from the center, the servo angle calculated is largely overestimated regardless of the gain adjustments we made as well as a continuous oscillation of the platform. In the future, the oscillation issue could be resolved by finding the ideal PID values for our system or using more than one set of PID values for different error ranges.
Future Plans
In the future when our group has free time to work on this project, we would like to look into adding the ability for the platform to run without being connected to a power supply instead running off a li-po battery so that the platform is less restricted. We could also tinker with the PID values a lot more so that we can balance the ball within 1 or 2 oscillations. Fixing the oscillation of the servo arms is as simple as switching to a board that has a faster crystal or more timers. Given both time and motivation, our team wants to fix the arduino code so that the platform can operate at full capacity.
References
[1]"Full Motion Dynamics", Full Motion Dynamics, 2018. [Online]. Available: http://fullmotiondynamics.com/. [Accessed: 16- Dec- 2018].
[2]Full Motion Dynamics, Ball and Plate PID control with 6 DOF Stewart platform. 2012.
[3]"Arduino controlled Rotary Stewart Platform", Makezilla, 2016. [Online]. Available: http://makezilla.com/2016/01/30/arduino-controlled-rotary-stewart-platform/. [Accessed: 16- Dec- 2018].
[4]"Inverse Kinematics: how to move a robotic arm (and why this is harder than it seems) - Applied Go", Applied Go, 2016. [Online]. Available: https://appliedgo.net/roboticarm/. [Accessed: 16- Dec- 2018].
[5]"Capacitive vs. Resistive Touch Panel - What feels better?", Mikroe.com, 2016. [Online]. Available: https://www.mikroe.com/blog/capacitive-vs-resistive-touch-panel-feels-better. [Accessed: 16- Dec- 2018].
Appendix
Block Diagram:
Wiring Diagram
Code: https://github.com/j8m1e/PID-Stewart-Platform
Attachments:
20181210_153253.mp4 (video/mp4)
stewart platform.7z (application/octet-stream)
PID-Stewart-Platform-master.zip (application/zip)