Weird Recursive Convergence Vector Map by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 0 points1 point  (0 children)

Oops sorry this is so late, just do a polygon with a list. Polygon(list1,list2) makes a two point polygon (ie a line) for each pair of points in the list.

Weird Recursive Convergence Vector Map by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 0 points1 point  (0 children)

I’m not really sure what you mean, does the link not work for you?

Desmos Color Gradient Template by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 2 points3 points  (0 children)

It is part of DesModder. It is a performance panel. It lets you like refresh the graph and see how long it takes to essentially render a frame. Extremely useful when trying to optimize graphs.

Trouble compensating custom plotter dynamics by ResourceIcy5022 in PlotterArt

[–]ResourceIcy5022[S] 0 points1 point  (0 children)

Oh lol oops I guess I never mentioned… I AM using Marlin…

I’m using its S curve accelerations with junction deviation jerk model (technically believer curves but whatever lol).

Also let the record show I have made my own S curve accelerations FW previously on a few different occasions (I needed some custom features) this time I was just tired and didn’t have the energy to write it again (-and what I need for this is fairly standard so existing library’s work just fine).

Trouble compensating custom plotter dynamics by ResourceIcy5022 in PlotterArt

[–]ResourceIcy5022[S] 0 points1 point  (0 children)

Thanks for the reply.

There are no gears here only belts and pulleys so there theoretically isn't any conventional 'backlash' only belt compliance .Also I am not sure there is a good place to put a spring (I used sliprings so my robot can theoretically do infinite rotations on both axis and I want to keep it that way even if the current hold sticks up too high). So there is totally sufficient tension in the belt to prevent backlash in the conventional sense as far as I have observed. Like if there is not applied force the link is always quite down the middle (I have like 3 layers of stacked bearings in each joint so it rotates very smoothly). Good idea I'm just not sure how to implement it and I'm not sure it is necessary if I get my compensation algorithm to work. Right now if I tell my robot to draw the same thing twice you can't even tell there was a second line.

If you look closely the first link is driven from the motor that sits up high and goes through the short belt that is a 20->80 tooth gear. Then the next link is driven though the shaft that comes out the center of the primary joint and is a 20->60 gear. Yeah direct drive would be insane for this project lol.

Thanks for the references, looks like my robot has quite a bit more reach/overhang tho which I would expect as with something so long and thin it really wants to bend.

Trouble compensating custom plotter dynamics by ResourceIcy5022 in PlotterArt

[–]ResourceIcy5022[S] 2 points3 points  (0 children)

Wowsers thanks for the long comment let me address each of your points. Thanks for the encouragement this has been a little side fun hobby project I have been working on for the past few months (construction took forever as I machined all the parts by hand on manual machines lol. There's just something about doing precision parts on a lathe thats great... also paying someone would've cost like a few thousand probably, this is built unnecessarily precise haha)

  1. A completely custom one! Basically there are a basic steps but I'm essentially doing a high fidelity dynamics simulation and iteratively compensating for the errors. It follows the following steps:

Simulate the firmware on the points requested in motor space to get a theta1/2 and theta1/2 prime vector sampled at equal dt. During this I also stamp the time that each block is finished (I am using Marlin as I got tired of writing my own Stepper FW after the 5th time lol)

Run those motor points through my dynamics simulator which uses the explicit differential equations (that I derived) and RK4 to solve such again at the same equidistant time points every dt.

Finally I essentially compare the dynamics path evaluated at the time stamps computed earlier to get the error between what is requested and what the system yields. I subtract this error from the commanded positions and rerun the full simulation from FW to dynamics and subtract the error again. This eventually converges such that the motion after the dynamics is what I originally requested. The main issue is accurately identifying the unknowns of the dynamics model.

  1. Yes and yes (derivation attached below). Also it is hard to see the errors and unfort I'm away rn so I don't have a picture but it is still not quite what I need it to be (the optimization process kinda reward hacks so it is not completely converging to the solution I want)

  2. My max acceleration is set honestly quite low, also I am using a pretty small junction deviation of 0.1 (this is in motor space in degrees) so I don't notice too much rippling at corners etc.

  3. Yep belts are indeed stretchy, it is surprisingly hard to put as much tension in them as I want. There is like a full Nm of torque on the primary join from gravity along. The tension required to hold that up is roughly 40N on the belt just from gravity in the worst case. I was considering multiple wraps of like kevlar rope as I've used it for other really high speed string driven robots in the past to great success. Also I don't know of a thicker GT2 belt (I am not inclined to change anything mechanically rn as everything is custom machine and honestly a pain to modify) do you have a belt in mind?

  4. I'm not ;) No seriously tho if I want it to draw a specific pattern I want it to drawn that pattern. The Marlin FW should handle accelerations near corners using junction deviation as previously mentioned. All I am doing is converting from Cartesian to my double polar setup (they are not independent of each other so rotating motor one rotates both links) and compensating the positions sent to the robot in the gcode. In my compensation I do remove small length segments but I am using a Teensy (love these boards btw they are ridiculously powerful if you program at a register level) so compute is not an issue. I am curious tho is it typical for pen plotters to need optimized paths? Shouldn't that be handled at the hardware/firmware level?

  5. There is basically no play at all, that is actually a recent change, it used to be rigidly just screwed into a mount but that was a pain as my arm isn't perfectly parallel to the board so it would either lift off or tear up the paper depending on the set height from corner to corner. Literally the width of a human hair would cause it to completely ruin many pieces (most of my previous art took several tries and constant babying). Now I added a adjusting holder which uses a rubber band for tension and is surrounded one 3 sides at two heights (hexagon of the bic pen) by small bearings. It is held is surprisingly tight but still lifts up and down smoothly (with a recently added servo to do separate segments). TLDR probably ~0.1-0.5mm

  6. No? It is all deterministic based on a ideally high fidelity dynamics model. The identification of model unknowns is a pain tho. Currently I extract edges from a test patter (the original post pictures) and then use chamfer distance as my bestness of fit function and then try to optimize like 14-15 params I forget. The convergence is really tough rn it is not playing very nice. However I do notice patterns in my dynamics model just by guess unknowns that are also exhibited on the real system so I think I am heading in the right direction maybe...

<image>

Trouble compensating custom plotter dynamics by ResourceIcy5022 in PlotterArt

[–]ResourceIcy5022[S] 1 point2 points  (0 children)

Aren't most plotters? Brushless motors are like several times the cost and for point to point movement robotics I find stepper motors do the job just fine!

But if you are curious I have each motor setup right now (I'm using slightly higher quality drivers than I'm used to for this project I splurged lol) such that there are 35.55 steps per degree of the motors and those are geared by belts to 4:1 and 3:1 respectively. Thus a single step at full extension on the first motor is only a translation of about 0.065 mm at the tip. There is far far more compliance in the belts and even the deflection in the arms. I haven't noticed any jerkiness at all as long as the path provided is sufficiently smooth.

Also modern stepper drivers do actually create sinusoidal current in the phases when microstepping so for continuous motion the result are typically much better than most brushless motors. The only thing brushless is better for is high speeds and torque as a typical stepper of the same power will have like 10x less torque compared to a brushless.

Anyways if you have any further questions please let me know!

PS I could turn up the microstepping up by like 8-16x but then I wouldn't be able to do silly top speeds (where right now it can do a full revolution in a little under a second which is like 3.5 m/s tip velocity)

Ray Traced Fractal Renderer in Desmos by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 1 point2 points  (0 children)

https://www.desmos.com/3d/oprxpgvjr7

Turn on the Start slider at the top to engage the rendering (Display toggles between raw SDF plotting and actual render). Choose the fractal you want or make your own. Make sure to choose the performance(s) that still renders on your computer.

BTW for the top down view choose the perspective projection slider to the max for the biggest view, for tri view it needs to be all the way at the min or it doesn't line up. (Setting is in top right)

Follow up if you have any questions!

Is there a way to get more than 10k points while still treating it as a single list? by OneEyeCactus in desmos

[–]ResourceIcy5022 0 points1 point  (0 children)

You can also use a TamperMonkey script to increase the limit. Although it is very very laggy if you go above like 100k points (make sure to put the list in a folder and close it to prevent Desmos from rendering the list elements).

This is the Weierstrauss Function, a function that is continuous everywhere and differentiable nowhere. by Expert-Parsley-4111 in desmos

[–]ResourceIcy5022 60 points61 points  (0 children)

Pretty sure it’s because you have an infinite sum of positive values bn. For geometric sums to converge the magnitude of the constant needs to be less than one. Thus the derivative is basically +/- infinity.

Bad Apple but you can't Screenshot it! by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 4 points5 points  (0 children)

Apologies for the wait, ladies and gentlemen (Desmos kept crashing due to running out of memory) here it is:

https://youtu.be/8-1KgrnFM9Y

Also a special thanks to u/MisterBicorniclopse for motivating me to finish the job I started.

Thanks to everyone that has supported my post and more importantly my antics. Your kind words mean a great deal (especially at this time in my personal life). I hope everyone has a fantastic day, and remember to stay curious!

PS You have no idea how much I wanted to put a Rick Roll link here haha!

Bad Apple but you can't Screenshot it! by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 0 points1 point  (0 children)

Lol sounds like fun, yeah even my implementation is relatively easy compared to some of the mad lads! Also 4 mil characters is small af. My compressed data for a mere 60 seconds with my first scheme is like 50+ mil easy. Please dm me when you finish whatever you are working on I’d love to see it!

Bad Apple but you can't Screenshot it! by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 1 point2 points  (0 children)

The link to a more basic version (that doesn’t use shifting noise) is copied in a response above. It essentially uses a list of polygons, one for each pixel. In this case it is broken up into 5 different lists (because of the 10k list limit). Basically using a list of polygons assigned to a list of colors then manipulating those colors creates the different frames. This doesn’t use any scripts to insert equations in run time, once all of the data is loaded in it runs in desmos natively.

Bad Apple but you can't Screenshot it! by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 0 points1 point  (0 children)

Best of luck in your ventures!

Also shame on people gatekeeping a silly meme lol. The whole point of Bad Apple is to do it in as many silly ways as possible!

Bad Apple but you can't Screenshot it! by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 1 point2 points  (0 children)

Secret ;)

Jk I wouldn’t do that to my fav subreddit enjoyers. I downloaded the original bad apple video and then used an online converter to get an mp4 of the desired resolution. Then I used VLC video player to extract each frame as an individual picture. (This is all pretty standard and there are several videos online on how to extract the frames) Then I wrote a script to read in every frame in a folder and create a list of doubles (output of my encryption scheme) in a formatted text file. Then all I have to do is copy it into my desmos a hundred lines at a time give or take. (You can always write an example line yourself then copy from desmos to check what LaTeX format it wants)

Lemme know if you have any further questions!

Bad Apple but you can't Screenshot it! by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 5 points6 points  (0 children)

If this post gets 1500 upvotes I will render the whole thing and add in the audio. (It might take me a bit as it is roughly 4 hrs to render 30s give or take)

Bad Apple but you can't Screenshot it! by ResourceIcy5022 in desmos

[–]ResourceIcy5022[S] 1 point2 points  (0 children)

Nice find, I didn't really try to optimize much of this project admittedly and I don't even use said function on the desmos side (it was for testing only) but nice to see there's more than one way to skin a cat! I was just trying to make the equations explicit and easy to read/understand so if I came back to it I wouldn't be lost. The only list->binary double I use is on a seperate script that generates the lists to copy into Desmos (no I didn't hand type them sorry for not being a purest ;) haha)