Super cool. And it reminds me why to do these projects: you learn so much in pursuing the project end-goal: motor selection, 3D printing, model slicing, ESP32 programming, etc.
I expect to see a second robot soon with significant changes based on the lessons learned.
(I too just picked up a Bambu A1 printer after deciding to dive a little more into 3D printing. I can confirm it is amazing compared to the Ender-3 I had only dabbled with a bit before.)
robertleoj 140 days ago [-]
Thanks! Exactly - I feel much more comfortable talking about the hardware at work now after having made this and feel more confident about making something more advanced.
This is my first printer so I don't have anything to compare it to, but to me it seems to "just work"
richk449 140 days ago [-]
As an ender-3 owner, I’m curious what makes the Bambu better?
Teknoman117 140 days ago [-]
It just works and it's so, so much faster. Went from an Ender 3 v2 to a Bambu P1S. No more re-leveling the bed, no more first layer adhesion problems, and your prints run 4-6 times quicker.
moooo99 140 days ago [-]
First of all, all Bambu models are substantially faster while also achieving the same or better print quality.
Bambu printers are much more polished in terms of hardware and software, making 3D printing more accessible. Their software is more of a closed source thing, but also a lot more polished.
I think a big part of this can be attributed to the 3D printing scene maturing a bit, but a lot is also specific to Bambu Labs
phero_cnstrcts 140 days ago [-]
But they require Internet connection to function optimally.
JKCalhoun 139 days ago [-]
I think you just need the internet to perform a firmware update? My sense is you can take them off the internet — either go LAN or sneaker-net your data via MicroSD card.
zrail 140 days ago [-]
Eh, not really. You can set them up in LAN mode and pair them with the slicer. You lose access to the mobile app, of course, and you also lose automatic firmware updates.
I had mine set up in local mode for awhile but the mobile app is useful for people in my life that don't care about learning how to work a slicer, so we use cloud mode.
numpad0 139 days ago [-]
Just a super well made all-proprietary FDM. X1 is CoreXY, A1 is i3/bed slinger. Fundamentally same as anything. Does all kinds of filaments and even 100% infills like cakewalk. If you manage to make it do spaghetti you get a lot of eyeballs. But still the same yak just super meticulously shaven. I mean I wouldn't need it at all at all.
kentt 140 days ago [-]
I can't help but feeling very envious (in a nice way) of your situation with coworkers. It seems like when you had an issue, you had someone 10 steps ahead of you willing to help out, give advice, lend a part etc.
This project seemed to go as well as my side projects, but when I run into a hiccup, I wait a month for a part on AliExpress, or wander around at Home Depot looking for something that I don't know what it is yet.
Kudos to you for surrounding yourself with great people. Thanks for the write up.
PhilRobots 139 days ago [-]
The author is my colleague. He’s so enthusiastic and fun to help (also very driven to solve issues).
We are lucky to have him around too.
139 days ago [-]
dtgriscom 140 days ago [-]
I've been a software engineer for 40+ years now. I still remember the one time I wrote firmware for a cable-driven robot hand. It's such a rush to type a command on a keyboard, and something on the bench next to you goes "wrrrrp!".
xcf_seetan 140 days ago [-]
This. I remember in the 90's working on a software to control a plastic molding machine that made plastic cups, and hit enter and feel the power of a pneumatic system pushing up the platform where i was standing.
FpUser 140 days ago [-]
Same here. I wrote my first robot in the 80s. Well it was actually scientific device for my main job. Among various sensors it had moving parts controlled by solenoids and stepper motors. Same sense of excitement when the thing worked.
robertleoj 140 days ago [-]
Right? I'm thoroughly enjoying that rush :D
cgreerrun 140 days ago [-]
The SO100 arm[1] and LeRobot[2] community are great too if you're getting into robotics from the software side of things.
Really cool 4dof robot - thanks for the reccomendation
BWStearns 140 days ago [-]
Awesome writeup! As someone who is roughly in this same stage of hardware learning, this had me laughing.
> I went into "screw with it until it works" mode. I took it apart, re-applied the magnet, swapped wires around, did all kinds of stuff. After a while of this, the error finally went away! No idea why though.
robertleoj 140 days ago [-]
Thank you, great to hear!
semitones 140 days ago [-]
This gave me a chuckle too - such a familiar experience
NalNezumi 140 days ago [-]
Cool project! Since the arm seems to be a 2 DoF arm in a 2D application, you don't really need numerical optimization but can get the analytical solution to the inverse kinematics problem. Otherwise using previous joint states as initial guess for the optimization is good so that you don't get weird "swings" in the arm (rarely happen in 2D)
nomel 140 days ago [-]
To put it simply: there's only one solution for each 2d position, if you force the mid joint to always be on one side (and that preferred side can be allowed to switch, to minimize accelerations of the lower arm).
robertleoj 140 days ago [-]
That's true - using numerical optimization was just the simplest/fastest way to get it working :P
xcf_seetan 140 days ago [-]
For a more refined machine, there is the XScara[0], a DIY SCARA 3D Printer that can be used for more than 3d print. I made one and change the 3d print head with a laser system, and also had a pen that can be used as a plotter.
Oh wow that is refined indeed - I'll check it out, thanks!
cluckindan 140 days ago [-]
Very nice project, haven’t seen many xy plotters built like that.
Instead of inventing your own, you could have used Gcode as the protocol language.
robertleoj 140 days ago [-]
Thank you! I made it like that purely for fun, this project was not intended to be useful, or have the best mechanical design :P
Using Gcode is a good idea, though it does seem a bit overkill for this simple application
remram 139 days ago [-]
Wouldn't you need the Arduino to do the inverse-kinematic calculations if you want to interpret gcode?
dekhn 139 days ago [-]
See fluidnc http://wiki.fluidnc.com/en/config/kinematics as an example where you can get kinematics going without too much effort. It also has links to more pen plotter implementations to learn from.
Nice - did you just chuck it into wolfram alpha or sympy? How'd you get it?
ipv6ipv4 139 days ago [-]
It was a long long time ago. I don’t remember how I found it.
I do remember being frustrated by the endless papers on SCARA and the importance of the inverse kinematics but no mention of what they actually were. So here they are. (I just checked now, and there seem to be at least a few papers online with the derivation. Times have changed)
I also have this:
def do(self, (x, y), (dx, dy)):
""" Calculate o derivative (do1, do2) given position (x, y) and desired movement derivative (dx, dy)
"""
xy2 = x**2 + y**2
ll2 = self.L1**2 + self.L2**2
lld2 = self.L1**2 - self.L2**2
# do1
N = x*dy - y*dx
M = xy2
P1 = x**4 + 2 * x**2 * (y**2 - ll2) + y**4
P2 = -2 * ll2 * y**2 + lld2**2
P = P1 + P2
Q = xy2
PQ = math.sqrt(-P/Q)
R = (xy2 - lld2) * (x*dx + y*dy)
S1 = math.sqrt(xy2)
S2 = P
S = S1*S2
# do2
T = 2 * (x * dx + y * dy)
U1 = (2*self.L1*self.L2)**2 - (x**2 + y**2 - ll2)**2
U = math.sqrt(U1)
return -(PQ*R)/S + N/M, -T/U
For this I used a symbolic solver but I don’t remember what it was. I also don’t remember if it was a meaningful improvement over a simple interpolation between angles.
BTW if memory serves, parsing basic SVG is pretty easy. Though, these days it may be more useful to implement a gcode parser as there are so many freely available gcode generation tools.
imp0cat 139 days ago [-]
I am currently doing something similar for an off-the-shelf drawing robot with two arms, each with a shoulder and an elbow joint - load svg, convert layers to numpy arrays, then get the angle configuration for each point and save them to a format the robot can read and draw. However, I am finding that the time required to compute the points is quite long.
The fastest way I have right now is a large look-up table (ie. precompute angles for each point of a canvas with a sufficient precision, then use the table to do fast searches for the nearest point).
392 139 days ago [-]
That's odd, have you profiled it?
imp0cat 135 days ago [-]
I took a look at the code that I started with and... it is kinda horrible.
I guess it's time to learn some linear algebra (again!) and create a custom algorithm.
robertleoj 135 days ago [-]
Did you try using the previous configuration as an initial guess to the numerical optimizer? If the next position is close to the previous one, the solver should be very quick.
Also, you can probably get much faster results if you obtain the gradient of the forward kinematics.
imp0cat 133 days ago [-]
Thanks, much appreciated! I will try that.
I am trying multiple optimizations right now, mostly centered around reducing the amount of lookups required.
rezz 140 days ago [-]
This might be the best thing I’ve read on HN all year. Thank you for the inspiration.
robertleoj 140 days ago [-]
That's very inspiring for me to hear, thank you! Glad it's useful.
anymouse123456 139 days ago [-]
I'm another software head that made the move to electronics and then robotics.
If you feel pulled at all, just dig in right now.
Even if you never make the leap professionally, and it's just a few hobby projects, it'll 10x your regular SWE work while also broadening and deepening your understanding of the increasingly digitally controlled world around you.
ElectRabbit 140 days ago [-]
You mastered the holy trinity of engineering: hw, sw and mechanics.
robertleoj 140 days ago [-]
"Mastered" is a strong word, but thanks!
dheera 140 days ago [-]
As a software and robotics engineer I really wish we could get rid of these stupid "DuPont" connectors already. I want them gone. They're huge, fall out easily, and hard to keep track of.
JST-EH is my preferred connector for most through hole type stuff. That shit really stays in place after it's plugged in.
riskable 140 days ago [-]
JST-EH is great but let's try to avoid JST-SM. It's worse than DuPont! There's no surface mount connector for JS-SM yet for some f'ing reason every LED strip ever uses JST-SM connectors. This makes it impossible to design something like an RGB LED strip controller board without having to solder some wires to the board (with the connector on the other end).
Drives me bonkers.
Rediscover 140 days ago [-]
Much great info about JST connectors, heck the whole website is great:
I nominate Molex SL. 2.54 mm for easy fit on breadboards and such (EH is 2.5 mm), can fit multiple connectors side by side (just like "dupont" connectors), they have latches (molex KK, for example, has no latch) and many variants: wire to wire, wire to board, panel mount, shrouded and unshrouded. And they are pretty cheap and available (from digikey and co).
JST-EH has a 2.5 mm pitch, plus housing, plus orientation. I cannot see where that shall be any smaller than the omnipresent, universal Dupont connectors. Maybe you mean something different with "DuPont".
numpad0 140 days ago [-]
Fake DuPont/QI/2550 has zero latching whatsoever. Contact lengths vary and housings come with massive plays. Great if you want a free safe breakaway feature, sucks otherwise. Nearly anything else has a latching feature that require a lot more force or deliberation to undo, like ZIF with a latch or a lock flap.
By the way, strictly for home breadboard uses only, when I need a bit more resistance than bare DuPont I wrap it in double sided tape and let the header poke through it. Kind of works.
imtringued 140 days ago [-]
Molex Micro Lock is the new (old) hot shit.
neumann 140 days ago [-]
Reminds me of the https://www.brachiograph.art/ . I tried to replicate this, but found the position drifted and jittery.... Probably due to poor glueing technique...
robertleoj 140 days ago [-]
Hahaha wow that is scrappy as hell - it does look difficult to get right :P
darepublic 140 days ago [-]
I've been wanting to get into robotics and this is inspiring to me. Thank you!
robertleoj 140 days ago [-]
Great to hear that it's useful!
whatever1 140 days ago [-]
I find it so rewarding to work on such hardware projects.
Unfortunately the market has decided that unless it serves ads in billions of eyeballs it does not matter.
robertleoj 140 days ago [-]
Well in what context does it matter?
If it's useful for you to learn, then it matters, right?
There are also endless applications for hardware, but I guess to make a viable product you probably need a sizeable team of people.
badpun 140 days ago [-]
It matters, you're just not going to be pulling $300k-$500k making it. Across all industries, best paying jobs are rarely the most fun ones.
140 days ago [-]
TechDebtDevin 140 days ago [-]
So random to stumble upon this on HN a day after I happened upon this on Github while looking for maker/robotics inspiration.
maceakacer 140 days ago [-]
nice, i chcked the github and its a very nice robot, also i guessed you used a program that tracks objects or dots you put on a camera recording (sry if im wrong i know nothing about robotics) and the robots follows some pattern in it.
robertleoj 140 days ago [-]
Yeah - I'm using mediapipe for hand tracking, which is straight out of the box. Then I can just make the robot draw the exact sequence of dots my index finger drew :)
a_t48 140 days ago [-]
This is neat. I've touched ESP32 programming a bit, but need to go deeper.
msdundarss 140 days ago [-]
I was looking for something similar to get started! Thanks for sharing
robertleoj 140 days ago [-]
Happy to hear :D
usixk 140 days ago [-]
Congrats! cool project and great write up as well
robertleoj 140 days ago [-]
Thank you!
penjelly 140 days ago [-]
this is my dream. How'd you break into the industry?
robertleoj 140 days ago [-]
Previously, I worked at a startup where we were making a vision system for golf simulators to analyze the player's swing. It's this company: https://www.elvagolf.com/
I learned a lot of computer vision skills from that job, and it turns out this kind of computer vision is directly applicable to robotics as well.
So, I applied for a role as a vision engineer at my current job, and got the role :) This is where I work now: https://www.monumental.co/
Apart from my vision skills though, I was also just generally a good fit - I had a lot of startup/small company experience, I'm a pretty good software engineer apart from the computer vision, and the culture fit was there as well. I feel very lucky that the stars all aligned for me to be here.
riskable 140 days ago [-]
Up next: Learn how to make your own circuit boards instead of relying on individual microcontroller and motor controller boards :)
05 140 days ago [-]
Reinventing the wheel is fun, but 3d printer boards already exist, and are literally mcu+stepper drivers, could be bought for pennies from people who upgraded their 3d printers to aftermarket ones.
I expect to see a second robot soon with significant changes based on the lessons learned.
(I too just picked up a Bambu A1 printer after deciding to dive a little more into 3D printing. I can confirm it is amazing compared to the Ender-3 I had only dabbled with a bit before.)
This is my first printer so I don't have anything to compare it to, but to me it seems to "just work"
Bambu printers are much more polished in terms of hardware and software, making 3D printing more accessible. Their software is more of a closed source thing, but also a lot more polished.
I think a big part of this can be attributed to the 3D printing scene maturing a bit, but a lot is also specific to Bambu Labs
I had mine set up in local mode for awhile but the mobile app is useful for people in my life that don't care about learning how to work a slicer, so we use cloud mode.
This project seemed to go as well as my side projects, but when I run into a hiccup, I wait a month for a part on AliExpress, or wander around at Home Depot looking for something that I don't know what it is yet.
Kudos to you for surrounding yourself with great people. Thanks for the write up.
We are lucky to have him around too.
Demonstration of the arm: https://x.com/ChrisMGreer/status/1867278261631561996
[1]https://github.com/TheRobotStudio/SO-ARM100
[2]https://github.com/huggingface/lerobot
> I went into "screw with it until it works" mode. I took it apart, re-applied the magnet, swapped wires around, did all kinds of stuff. After a while of this, the error finally went away! No idea why though.
[0] https://github.com/madl3x/x-scara
Instead of inventing your own, you could have used Gcode as the protocol language.
Using Gcode is a good idea, though it does seem a bit overkill for this simple application
o1 = atan(y/x) - acos((x^2 + y^2 + L1^2 - L2^2) / (2 * L1 * sqrt(x^2 + y^2)))
o2 = acos((x^2+y^2-L1^2-L2^2)/(2L1L2))
I do remember being frustrated by the endless papers on SCARA and the importance of the inverse kinematics but no mention of what they actually were. So here they are. (I just checked now, and there seem to be at least a few papers online with the derivation. Times have changed)
I also have this:
For this I used a symbolic solver but I don’t remember what it was. I also don’t remember if it was a meaningful improvement over a simple interpolation between angles.BTW if memory serves, parsing basic SVG is pretty easy. Though, these days it may be more useful to implement a gcode parser as there are so many freely available gcode generation tools.
The fastest way I have right now is a large look-up table (ie. precompute angles for each point of a canvas with a sufficient precision, then use the table to do fast searches for the nearest point).
https://github.com/AnykeyNL/Quincy/blob/master/coordcalc.py#...
There is a loop in a loop that goes through all the possible values of x and y to find the correct ones. No wonder it's so slow!
The scipy solver - inspired by the original article, I used https://docs.scipy.org/doc/scipy/reference/generated/scipy.o... - isn't much faster though (from reading the docs, it's just a smarter random search).
I guess it's time to learn some linear algebra (again!) and create a custom algorithm.
Also, you can probably get much faster results if you obtain the gradient of the forward kinematics.
I am trying multiple optimizations right now, mostly centered around reducing the amount of lookups required.
If you feel pulled at all, just dig in right now.
Even if you never make the leap professionally, and it's just a few hobby projects, it'll 10x your regular SWE work while also broadening and deepening your understanding of the increasingly digitally controlled world around you.
JST-EH is my preferred connector for most through hole type stuff. That shit really stays in place after it's plugged in.
Drives me bonkers.
https://www.mattmillman.com/info/crimpconnectors/common-jst-...
JST-EH has a 2.5 mm pitch, plus housing, plus orientation. I cannot see where that shall be any smaller than the omnipresent, universal Dupont connectors. Maybe you mean something different with "DuPont".
By the way, strictly for home breadboard uses only, when I need a bit more resistance than bare DuPont I wrap it in double sided tape and let the header poke through it. Kind of works.
Unfortunately the market has decided that unless it serves ads in billions of eyeballs it does not matter.
If it's useful for you to learn, then it matters, right?
There are also endless applications for hardware, but I guess to make a viable product you probably need a sizeable team of people.
I learned a lot of computer vision skills from that job, and it turns out this kind of computer vision is directly applicable to robotics as well.
So, I applied for a role as a vision engineer at my current job, and got the role :) This is where I work now: https://www.monumental.co/
Apart from my vision skills though, I was also just generally a good fit - I had a lot of startup/small company experience, I'm a pretty good software engineer apart from the computer vision, and the culture fit was there as well. I feel very lucky that the stars all aligned for me to be here.