Robot making adventures
Hi! This is a progress report on my 1-year journey of making a robot like this
You can check out our most recent progress/cad models/code on this repo.
Our goal is to finish the first walking version on 9/1/2022.
Acknowledgements
I’d like to thank my teammate, Stephan Wagner, for help with the simulations and fun games of ping pong. And I’d like to thank my University, Drexel, particularly Mr.Mike Galloway for 3d printing help. I’d also like to thank Professor David Han and Professor Chmielewski Thomas from Drexel University and Professor Motegi Kazuhiro from Gunma University for advising on our project.
Step 1: Setup a plan
The first step to making a robot is a good plan. Our plan was the following. We will
- Think of a design of the robot and put it into cad
- Simulate the robot walking
- Build the robot and put the simulation code in. We’ll use Arduino to move all the servos since I did that before.
Step 2: CAD
I talked about my cad adventures in a separate post here. But in the end, we got something like this in Autodesk Inventor 2021
We took heavy inspiration from the robot sold by a Japanese robot-making company called Kondou-Kagaku. Their robot is here
Step 3: Simulation
We used Simscape which is a plugin for Simulink to simulate the robot along with Matlab.
We assigned collision to the feet and added gravity. Then we followed the code from this repository along with Matlab’s webinar to come up with a walking motion.
For this, we started by using an approach called the inverse pendulum. The idea
- We can think of walking as follows. 1 foot on the ground, the other foot in the air. Then we tip towards the foot in the air, then that foot lands. Then we tip towards the other foot that’s in the air. We can see this below
2. We use some fancy math called inverse kinematics to estimate the position of each of the joints so we can do a motion like the inverse pendulum. The result is below
3. Apply motion to our simulation. As you see it falls over but it does work.
With gravity removed, we can make a motion like this
The next steps for the simulation are to see if we can find good parameters to make it walk. Other than that we plan to look at reinforcement learning/genetic algorithm to see if they are any easier.
Step 4: Building
We first got all the 3d printed parts like so. Thanks again, Mike!
We needed to make a few adjustments but we used the mg996r motors for each of the joints.
Note: I used Arduino to set each of the motors to 90 degrees since it can go from 0 to 180. Also, these motors may not be powerful enough so we got other servos which are this and this.
And I built like so
While assembling, I noticed we didn’t have enough screws, so we got new ones and de-assembled and re-assembled
Here I noticed the legs can easily become de attached
Then I learned you can screw in the top joints like
So I made new frames so I can easily do that
and we are here
Step 5: Powering the robot
My initial plan for powering the robot was to use an ac adapter. An ac adapter just provides 5V 3A. If we check the mg996r specs, this is just enough to power 1 motor. So we need 5V 36A or higher voltage with less current.
To do this, I got major help from a user called Qrow from this discord server. He advised me to get a motor driver. This makes it so I can send high-power current to my motors and pass along a signal from Arduino.
The motor driver I got is this.
I’ll need to test this but we found a forum post that said this can provide 10A of current. So I’m thinking I can connect 2 and provide 10A from each. For the power source, we are thinking of using these batteries
These are 7.2 V and have a discharge current of 30A. 10 A from this might be enough to power 1 leg(6 servo motors). While mg996rs can bare 7.2 V, the other servo motors have a limit of 6.8V so we got another battery of 6V for that. We plan to keep the batteries separate from the robot(on the ground) for now as each of these batteries increases the torque requirement by 1.1Nm which roughly doubles the current requirement.
Next Steps
Next, we’ll try
- See if the power supply is enough/and how many motors can be moved with one.
- See discrepancy between the simulation and real-world movement
- Update simulation with new CADs and try to make it walk with any method.
Edit: I noticed my battery will fry the motor driver so I’m asking around how to directly power the servo motors with my batteries. If any of you have any ideas that’ll be awesome too! I’m mainly concerned about frying my breadboard or motors.