Skip to content(if available)orjump to list(if available)

Making my first robot as a software engineer

JKCalhoun

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

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

As an ender-3 owner, I’m curious what makes the Bambu better?

Teknoman117

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

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

But they require Internet connection to function optimally.

numpad0

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

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

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.

null

[deleted]

dtgriscom

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

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

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

Right? I'm thoroughly enjoying that rush :D

cgreerrun

The SO100 arm[1] and LeRobot[2] community are great too if you're getting into robotics from the software side of things.

Demonstration of the arm: https://x.com/ChrisMGreer/status/1867278261631561996

[1]https://github.com/TheRobotStudio/SO-ARM100

[2]https://github.com/huggingface/lerobot

robertleoj

Really cool 4dof robot - thanks for the reccomendation

BWStearns

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

Thank you, great to hear!

semitones

This gave me a chuckle too - such a familiar experience

NalNezumi

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

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

That's true - using numerical optimization was just the simplest/fastest way to get it working :P

xcf_seetan

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.

[0] https://github.com/madl3x/x-scara

robertleoj

Oh wow that is refined indeed - I'll check it out, thanks!

cluckindan

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

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

Wouldn't you need the Arduino to do the inverse-kinematic calculations if you want to interpret gcode?

dekhn

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.

ipv6ipv4

Analytical solution of the inverse kinematics:

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))

robertleoj

Nice - did you just chuck it into wolfram alpha or sympy? How'd you get it?

ipv6ipv4

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

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).

rezz

This might be the best thing I’ve read on HN all year. Thank you for the inspiration.

robertleoj

That's very inspiring for me to hear, thank you! Glad it's useful.

anymouse123456

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

You mastered the holy trinity of engineering: hw, sw and mechanics.

robertleoj

"Mastered" is a strong word, but thanks!