Beautiful, I wonder what kind of craziness would be possible with this, at scale. Whole buildings being printed and assembled block by block. Real life Minecraft, if you will
I wish there was a write up of how some of the code works. There's a lot of Python in the repo. Looks fascinating, seems to use Python to generate OpenSCAD code, I think.
This is beautiful. It would be amazing to have the tracks encode/decode audio, you know? Like, the track of the marble can be used to generate different frequencies...
This is a great example of a good use case for 3D printers. The smooth marble run action combined with the interwoven organic forms would be a huge PITA to fabricate with any other method I can think of, even if your just making one.
This is really quite interesting and similar to a project I'm working on. I've been using procedural generation to generate a marble dexterity track similar to a Perplexus. My tools are mainly Python, the Build123D library and a 3D printer.
I appreciate the work. It's really beautiful and checks so many of my "oddly satisfying" boxes as a builder. It seems it hit those for you too, obviously.
Separately, the timing of seeing this is uncanny. I've been using marble runs to explain probability to my kids and was filming a marble run conversion lesson. Seeing this at the top of HN felt like someone was reading my minds.
Designers of marble fountains who don't use computing to design the paths run into reliability issues: sometimes balls derailing out of their track. They have to observe the contraption, identify problems (balls getting jammed up or jumping out) and then guess at the root causes and make manual adjustments.
That's the thing here: he has it running for hours presumably without any ball jumping out.
Most of the tracks consist of two rails, so the ball has two contact points. I'm no physicist but it seems like the goal would be to have ideally nearly equal forces at the two contact points at all times during the ball's descent. In other words, the track has to be perfectly banked so that the gravity and centripetal acceleration vector are balanced by a normal vector perpendicular to the rails. During a derailment, the ball has to lift away from one of the two contact points, so the normal force must have dropped to zero.
The state of each ball can be described by 9 parameters: the current location of the center of mass (x,y,z), the current linear velocity (vx, vy, xz) and the angular velocity on 3 axes.
I don't think the forces acting on the rails need to be similar -- they just need to be such that the acceleration of the ball is always parallel to the track. Unfortunately the equation of motion will look pretty ugly and optimizing the system will be quite a challenge.
And finally, the system has to be stable, ie. small perturbations should be cancelled rather than grow - if a ball gets a little too fast there should be something like a bend that slows it down, but that bend should at the same time not slow down a ball that is already too slow...
I've actually done clear prints with LEDs installed. The bottom is much brighter than the top and it just look kinda tacky. I briefly hollowed out the supports and tried running fiber optics but it didn't help much.
I'm realizing now that I tried a lot of weird shit during this project that just did not work at all or make it into the final product, I should do another video just of all my failed abomination marble runs.
Minor suggestion/request: would be great if you added a final STL file to the github repo of a working example. Might be easier for people to try if they can't get the python code running on Linux.
(I haven't tried yet. But I'd love to just send an STL to my printer to see how well it prints.)
47 comments
[ 2.5 ms ] story [ 62.0 ms ] threadnice one!
It gives everything a uniform look while allowing to fill the space in a different way.
Separately, the timing of seeing this is uncanny. I've been using marble runs to explain probability to my kids and was filming a marble run conversion lesson. Seeing this at the top of HN felt like someone was reading my minds.
That's the thing here: he has it running for hours presumably without any ball jumping out.
Most of the tracks consist of two rails, so the ball has two contact points. I'm no physicist but it seems like the goal would be to have ideally nearly equal forces at the two contact points at all times during the ball's descent. In other words, the track has to be perfectly banked so that the gravity and centripetal acceleration vector are balanced by a normal vector perpendicular to the rails. During a derailment, the ball has to lift away from one of the two contact points, so the normal force must have dropped to zero.
You can see a ball on the ground at the end of the video :-)
> I was able to get it working consistently, although it did lose 2-3 balls an hour and could only run for a few hours without the motor overheating.
IMO that's more impressive to hear than if he hadn't mentioned it at all. (I would have assumed more marbles getting lost.)
Doesn't make the whole thing less remarkable.
The state of each ball can be described by 9 parameters: the current location of the center of mass (x,y,z), the current linear velocity (vx, vy, xz) and the angular velocity on 3 axes.
I don't think the forces acting on the rails need to be similar -- they just need to be such that the acceleration of the ball is always parallel to the track. Unfortunately the equation of motion will look pretty ugly and optimizing the system will be quite a challenge.
And finally, the system has to be stable, ie. small perturbations should be cancelled rather than grow - if a ball gets a little too fast there should be something like a bend that slows it down, but that bend should at the same time not slow down a ball that is already too slow...
I'm realizing now that I tried a lot of weird shit during this project that just did not work at all or make it into the final product, I should do another video just of all my failed abomination marble runs.
(I haven't tried yet. But I'd love to just send an STL to my printer to see how well it prints.)