I would like to build a cheap, lightweight biped robot. To make it "Fun", i have set the limitation that i can not have any actuators mounted on the legs, they have to be mounted in the torso.
So i started FreeCAD and went to work, first i want to try out how to control the leg using fishing wires as tendons.
And into my Ender 5 Pro it went. Then it was time for assembly.
If you note the rectangular cut outs in the lower leg (at the ancle) my plan was to have the wires go out there and then connect to the loops on the foot.
Turns out, this was a horrible idea. The wires lifted the lower leg into the air, disconnecting it from the half-sphere at the foot when the wires was tensioned. I had half expected this and had already added holes a secondary mounting option.
This worked much better, now the half sphere and lower leg was forced together instead of apart.
I Used 0.6 mm fishing wire and it was a pain to attach to the loops, i will defenitely redesign the wire attachment on the foot. In the future I will attach it through a 0.65 mm hole and some glue instead of trying to make a knot in a loop.
The "haf-ball" foot joint worked better than expected.
When the lower and upper leg was attached, there was no room left inside the leg for the wires to pass through the lower leg all the way to the top. So i took them out through the back side of the big hole in the lower leg. This was also a bad idea as this caused the foot actuation to pull on the lower leg casing it to retract.
I tried to resolve this by adding some shrink tube, but it only made it marginally better, mostly because there was no extra space inside the legs, so when the leg got retracted the tube got compressed preventing the wires from running smoothly inside.
Action list for next version Experiment 002
1. Move kneeJoint so wires can pass all the way throgh lower leg
2. Open up lower leg on the backside
3. Remove loops in foot with "hole attachment" for wires.
4. Improve spacing inside legs, allow for better wire flow / cable management
This is part 4, if you have not seen this before, i recommend that you start with part 1.
I have made a video showing some new features in the OpenSEA project. The design have become a bit more parametric and I have made a test print of the SolidPython generated parts. More details can be seen in the picture and video below.
Here are some images of the printed parts, From first (top) to latest prototype (bottom):
3d printed plastic spring or steel spring? its your choice. I have not yet made the 3d printed spring parametric but it is on the TODO list.
Here is a comparison between motor attachments, oldest to the right and newest to the left.
I have still not made any newer motor tests as I want my cheap china ESC to do way more then it was designed to do, so I am digging deep into motor control and AVR assembly and SimonK.
We will se how that goes, A write up on my motor control progress will be posted in the near future.
Parts are as always available here: https://github.com/maidenone/OpenBiped
I have made a small instruction video on how to play around with the FEM workbench in FreeCAD as well as how to generate and export files from the OpenBiped/OpenSEA projects.
Now this analysis is for solid parts and not 3d printed parts so your analysis will probably not be exactly what you will get in real life.
This is post 3 in the OpenSEA project, if you have missed part one and two see post one for some background.
I started this project with FreeCAD to design the parts, but now i am switching over to OpenSCAD, mainly because of the benefits of SolidPython. I have forked the SolidPython repository and will extend it to fit the needs of the OpenBiped project. One of the big benefits of SolidPython is the ability to auto-generate a Bill Of Materials (BOM) with cost and 3d printing time, i also plan to extend it with weight and filament usage.
Here is an example output: (not a complete SEA, nor real print time or cost for 3d printed parts)
Desc.
Count
Unit Price
Total Price
Print Time
A2212
1
RMB 31.28
RMB 31.28
0
Fibre Glass Rod 4mm
4
RMB 2.78
RMB 11.12
0
A2212 Attachment
1
RMB 0.20
RMB 0.20
32
ESC 40W
1
RMB 31.28
RMB 31.28
0
3d Printed Spring
1
RMB 0.50
RMB 0.50
30
Shaft Adapter 3.17:4
1
RMB 0.50
RMB 0.50
8
SEA sled side bracket
2
RMB 0.50
RMB 1.00
32
Screw Rod m4
1
RMB 2.00
RMB 2.00
0
SEA Top Cap
1
RMB 0.50
RMB 0.50
30
Total:
Cost:
RMB 78.37 (~ 10 Euro, ~ 10 USD)
Print time:
132
minutes
Part count:
13
My goal for the OpenSEA project is to have a script where you specify what loads you want the system to handle, then the parts will be auto-generated and you will get a BOM with print time and weight and cost of the construction.
If you want the design files, they are available here. Note that this is very much a work in progress.
I have begun to test 3d printed springs in the (Finite Element Method) FEM workbench in FreeCAD. With some basic analysis i hope to decrease the number of parts needed to be printed and tested to get reliable results from the spring generator script. I will shortly release a post with a how-to/walkthrough.
And regarding the "HowTo re-flash a SimonK ESC" I wrote about in my last post, its coming, but i will dig a bit deeper then just reflashing ;)
This is part 2, i suggest you start to read part 1 if you have not done so already.
When a i start a new design, i prefer to make the parts as a "bare minimum" for the functionality i need. This is because its easier to get a "feeling" for how much the part will flex and check if it is out of proportion to the rest of the design. I have lost count of how many times i have gotten a part from the CNC mill or 3d printer that looks and feels much bigger or smaller then i expected from the design.
Here is my first sled/linear rail design. It was made just to test that the design worked and did not lock on the rail. As it turned out, it behaved very well. but the first part was 2mm to high so the two RC shock absorbers could not be mounted in the middle. What you see in the image above is the second design.
I detected that sometimes when a spring got contracted too much it got stuck (as seen on the lower spring). The design did not take any consideration to how the middle sled would be driven. Initially i planned to use a screw rod, but i needed to have the springs in the middle, otherwise i would have to add more springs or the design would become unbalanced. I planned to add a "fork" that pushed on the middle point, but this felt a bit complex.
Then i thought i would try to make it pully driven, so I added a motor mount and designed a pulley/roller system for a wire to be installed so i could push and pull on the middle part of the sled.
Then i made this video to show how it worked:
Here is the initial prototype as well as the pully driven system:
But after playing around a bit with the motor i got some slippage between the pully and wire and...
It melted and the pulley have not been found to this day. Lesson learned, its hard to get the tension right. If its to tightened it will be hard to drive and it might compress one side of the linear rail making it unaligned. If it is too lose then it will slipp and burn. The pulley based system was also backdrivable, not something i want for my application. I still think this is a feasible design with some more tuning. It will definitely be cheaper and more lightweight.
I really like how the third design (to the right) turned out, it looks really awesome, i feel a little sad that i won't be part of my next design.
When the first design failed, i started to look at 3d printing a gear box to get lower speed and more torque. I managed to get a gearbox with a lot of backlash to work on the third try with a lot of manual cleaning/tuning. Again I got the feeling that i was making things more complicated then needed.
So i went back to my original idea and made it driven by a screw rod.
I also decided to try to make a 3d printed spring/dampener. I print in ABS and its not very suitable to build a spring of. It is only able to handly slight deformations before it becomes damaged.
The piece above is an old print that i bent ~20 degrees before it began to crack in the middle.
But i decided to give it a shoot again, and yet again i got something that worked on my third try.
I then incorporated this in a modular design. The new design works very well and the spring behaves better then expected. It is not very good at storing energy, but i will definitely be able to detect collisions and to some degree how big the impact is.
A big reason why i wanted to 3d print a spring is to be able to autogenerate spring designs for whatever application you might want to use a SEA for.
I also looked into using the springs from the RC shock absorbers in a custom design, and the prototype below worked very well, I will continue on this design path as well.
Again, this design have many flaws and are made just for me to get a feeling for the relative scale and interaction between parts.
I actually have a third design path to explore for the dampening. lets use "artificial muscles/nylon muscles". They are easy to make and dirt cheap, and you can quite easily control how "springie" the end product shall be. But it will yet again be hard to get the tension / springiness correct.
Here are two designs for adapters between my 3.17mm motor shaft and M4 screw rod. I think i prefer the "clamp" design instead of a "screw press on axis" design, as the threads will be worn out after a while and then everything will come loose. On the other hand, in the clamp design, the nut will probably come loose after a while, so lets call it a draw and select the most elegant solution.
Here is a picture of my test setup, because i know you want to see it ;)
Also a comparison to prior work by me, here i use two NEMA 17 stepper motors with trapezoidal screws. The construction is heavy as hell, i think one Nema 17 stepper weighs significantly more then my entire SEA.
And here are two images of the old linear system on a "test leg".
I have no video of the new design as i managed to get a ESC with SimonK one direction firmware.
It gets boring very fast to manually reverse the rod and then drive it and then manually reverse it again.. So of cause i want to be able to actuate the motor in both directions so next entry on this blog will cover how to re-flash a SimonK ESC and i might also poke around in the FW a bit.
Todo:
Re-flash ESC
Make fancy video
Add sensors to SEA
Upload design files to github
Make a Spring simulator
Make a Spring generator
As always any contribution, comments and discussions are welcome!
Now you might ask, what is a SEA, its kind of a servo with dampening.
When you build a robot, you probably want to be able to detect impacts or get the load on a specific joint or actuator and you do not want it to break on high impacts. Here is where a SEA gets handy.
"Conventional robotic actuators suff er from a number of problems when it comes to
providing good torque control. A way to address this problem has been presented
in this thesis. If an elastic element is placed in series with the output of an electric
motor, the force control performance of the motor is improved. The motor is isolated
from shock loads, and the e ffects of backlash, torque ripple and friction are filtered
by the elastic element. A further advantage is that the actuator exhibits stable behaviour while in contact with all environments, a quality which has been hard to attain with a conventional
electric motor based actuators. Along with the bene ts of elasticity come disadvan-
tages which include a limit on the maximum force that the actuator can output due
to the mechanical properties of the elastic element, a reduction in the force control
bandwidth due to the low pass nature of the spring, and increased complexity and
bulk in the mechanical design."
In other words, its awesome, with the drawback that it becomes a bit more complex to keep track of the forces applied on your actuator/robot state. But the benefit is significantly lower power consumption as you can store energy in the springs.
An example of an SEA from MIT
With "soft joints" you can almost make the robot walk by it self as seen in this video (passive dynamic walker):
More detailed description on how a SEA works can be seen here:
And finally a very good motivation for using SEA in a walking biped:
To conclude, If you want to build a cheap biped, then you want lower motor power requirements. To achieve that you build it light and you preferably use a SEA.
Next post will show some different designs of a lightweight 3d printable SEA, I will also make the designs, drivers and BOM available on github.