How To Make Robots Move Smoothly | Arduino Tutorial

  Рет қаралды 770,778

James Bruton

James Bruton

Күн бұрын

Пікірлер
@wilmantube
@wilmantube 3 жыл бұрын
this guy makes a whole ass senior engineering project every week That’s dedication
@caner8688
@caner8688 3 жыл бұрын
How did this british accented guy educate hımself? That s What i really Wonder.
@brianbagnall3029
@brianbagnall3029 3 жыл бұрын
Amazing result this week.
@planetdesign4681
@planetdesign4681 3 жыл бұрын
@@caner8688 I’m sensing some sort of antagonistic energy here, just wondering
@caner8688
@caner8688 3 жыл бұрын
@@planetdesign4681 well after a mature age if you didnt get, smoothness in action becomes "divine" secret.you watch and see the speed and perfectness in productivity at the same time.
@SamWane
@SamWane 2 жыл бұрын
We do have some excellent universities in Britain:Cambridge, Oxford, Hull,…. But this hands on stuff wouldn’t be acquired there, this is pure passion and practical graft
@mikeselectricstuff
@mikeselectricstuff 3 жыл бұрын
This method also works well for making LED animation look smoother.
@Ensamma_Vargen
@Ensamma_Vargen 3 жыл бұрын
Example?
@snik2pl
@snik2pl 3 жыл бұрын
This is Mike, you don't ask him for example. His channel is example
@fvgoya
@fvgoya 3 жыл бұрын
I can’t imagine this. Any examples?
@dominicstocker5144
@dominicstocker5144 3 жыл бұрын
It also works for making smoother music synthesizer sounds
@mbunds
@mbunds 3 жыл бұрын
@@BlondieHappyGuy Hey, thanks - it’s kind of out of left-field, but your description of the echo problem may have solved a weird problem my plant has been having with an identical pair of Endress-Houser level sensors being used to measure water levels in two identical stainless-steel mix tanks. Visually, the water exhibits no turbulence as the tank is filled, then emptied, yet the graphs from both instruments show regular “steps” as the water level is slowly drawn down. I’m willing to bet we have a resonance issue in the cavity formed by the stainless tanks, and the interactions with the sonar! Further backing this possibility is that another identical E.H. level does not produce “stepped” graphs at all; just a smooth, linear “sawtooth” as the hopper empties between refills. But this isn’t water, it’s soda-ash, which I’ll bet dampens the hell out of echoes compared to water. Thanks for possibly solving a real head-scratcher!
@benGman69
@benGman69 3 жыл бұрын
Nice one. Be careful not to add too much smoothing to the eyes though. A lot of 3d artists get this wrong when animating. Human eyes look very creepy when they move too smoothly.
@Avetho
@Avetho 3 жыл бұрын
Its difficult to move your eyes slowly without tracking a moving object, but you can do it if you force your eyes to defocus or otherwise not lock on to any targets. I like doing strange things that somewhat give people the heebie-jeebies, like moving my scalp without touching it, or making my eyes roam about, or moving in a robotic fashion, or changing my gait to a different one a dozen times in as many minutes, or speaking like a DECTalk machine although that last one is more funny instead XD
@JackSpiggle
@JackSpiggle 3 жыл бұрын
Yeah I was thinking this too, eyes and eyelids are probably the worst candidates to show off this smoothing
@ИльяПростаков-м1с
@ИльяПростаков-м1с 3 жыл бұрын
Agree, totally. Eyeballs move almost discretly in real life
@Avetho
@Avetho 3 жыл бұрын
@@ИльяПростаков-м1с Yep! I believe we can also say its why most people have trouble when it comes to _not looking_ at things that happen around them, or things that move, its because the eyes move so fast and naturally the brain wants to snap focus on objects. Like men looking at _dat bounce,_ be it an old pristine Cadillac or something _finer and fairer_ XD
@mr_tom_1_0
@mr_tom_1_0 3 жыл бұрын
See also: Sauron’s eye in LOTR movies ;-)
@WRSomsky
@WRSomsky 3 жыл бұрын
Here's something to try, though it will take a small bit of computation. Have the eyes snap left or right quickly, and then have the neck turn more slowly in that direction, but counter-rotate the eyes as this happens so they appear to have locked onto looking at something, and the head then turns to consider it...
@JTCF
@JTCF 3 жыл бұрын
Fun fact: human eyes won't move smoothly unless they are focused on a moving object (or what brain thinks is a moving object). At any other time eyes just snap to a new position very quickly.
@maxxsteele9396
@maxxsteele9396 3 жыл бұрын
@@JTCF Not a fact and why would it be fun for everyone if it was true.
@albertweber1617
@albertweber1617 3 жыл бұрын
@@maxxsteele9396 it's absolutely true
@iAmTheSquidThing
@iAmTheSquidThing 3 жыл бұрын
​@@JTCF Yes, but they will also move smoothly when you focus on a stationery object and then move your head.
@SamFisk
@SamFisk 3 жыл бұрын
@@maxxsteele9396 how about you cite a source supporting your claim and refuting theirs, rather than resort to baseless insults?
@CaydenFromEdi2rial
@CaydenFromEdi2rial Жыл бұрын
It's 12:52 am, i've never in my life have made a robot, hell i've never even seen a 3d printer in person, yet i'm still going to watch this as if it's on an exam.
@fiveoneecho
@fiveoneecho 3 жыл бұрын
For anyone wondering how to smooth the launch of the curve as well, just check out different interpolation functions. Trigonometric or cosine interpolation is a really common one for essentially making this curve from the video smooth on both launch and landing. They are also going to be just one line in your code!
@BlixemBlixem
@BlixemBlixem 3 жыл бұрын
Very good point. A programmer friend of mine went and did his high school maths again to remember how to use Sin wave. He uses it to start and stop motion smoothly.
@carlesmolins3269
@carlesmolins3269 3 жыл бұрын
Fun fact: a similar method can also be used to fuse two sensors' data giving out the same information to smooth out the output data, for example: If we have an a gyroscope and an accelerometer sensing the same angle, we can set a new variable fused_angle = 0.95*gyro_angle + 0.05*accel_angle. Cool thing about this is that the gyroscope captures changes in the angle faster but it has what is called "drift" (the value it senses slowly deviates from the actual angle), while the accelerometer is not nearly as fast at detecting such angle changes but it does not drift. Fusing them together gives you an angle reading which is responsive thanks to the gyro contribution, but does not drift thanks to the accelerometer cobtribution. This is a good alternative to using more complicated (and computationally expensive) methods such as a kalman filter while still giving very good results in most cases (at least when talking about arduino projects).
@angelusmaker
@angelusmaker 3 жыл бұрын
Of course, I read this now, months after giving up on trying to work this out on my own on 6050s, and instead just (through sheer luck) used someone else's head tracker XD All jokes aside, this is fantastic to read and I might give it another go. While the tracker I found works, it'd be nice to do some customising!
@martinmckee5333
@martinmckee5333 3 жыл бұрын
Yes. This is a good option. For anyone who wants to learn more, the sensor fusion version described here is known as a Complementary Filter.
@carlesmolins3269
@carlesmolins3269 3 жыл бұрын
@@martinmckee5333 thanks, completely forgot about the name!
@fiveoneecho
@fiveoneecho 3 жыл бұрын
Wow... This is the kind of thing you don't know how to find when you need it, you don't learn in a class because you were distracted for the 2 minutes it was mentioned, and no one talks about. It's so obvious but so passable. Great tip!
@kitlith
@kitlith 3 жыл бұрын
@@fiveoneecho i've been like, toe deep or ankle deep in this stuff for a couple days, and while complementary filters are cool, kalman filters, madgwick filters, and others are even cooler. (EDIT: wow i missed that kalman filters were already mentioned as more expensive, reading comprehension fail. >_>) I'm currently using a library called dcmimu (which is the rust port of a c library with an associated paper called dcm-imu) and, frankly, i'm just treating it like a black box. probably shouldn't be, but i haven't had the bandwidth to try to properly evaluate all the options i have, when i'm still trying to figure out what the best method for calibration is. (after all, garbage in, garbage out)
@ooslum
@ooslum 3 жыл бұрын
I think the loss of jitter improves effect vastly as well. You could read the speed of joystick movement as well, that would allow variable speed smooth movements. In operation sounds may elicit faster movement than vision. Cheers
@MrScorpianwarrior
@MrScorpianwarrior 3 жыл бұрын
I could just watch it move around for a long time. I didn't expect it to work that well!
@HendrikxWorkshop
@HendrikxWorkshop 3 жыл бұрын
Hi James, thank you for sharing my project! I am not using arduino this time, but your suggestion to move it smoothly is great! I will adapt it in future movement sequences. Right now I am focused on the hardware. Files are being shared, so anyone can build it 😊
@ethanbreen5500
@ethanbreen5500 3 жыл бұрын
I want to see this guy build an animatronic like the one at pandora. He’s got the skills to make it really realistic
@Robonza
@Robonza 3 жыл бұрын
Its great to see you using my 5% 95% smoothing algo. You have done really well with this project. Don't under estimate the value of some animated eyebrows. They are really easy to make.
@35mmMovieTrailersScans
@35mmMovieTrailersScans 3 жыл бұрын
You should: A- Not make the eyes change position smoothly, human and animal eyes do move very suddenly, except for when point B: B- when the head moves you should make the eyes counteract the head movements so they keep aiming at one position until you make them change target.
@Blox117
@Blox117 3 жыл бұрын
its possible to move your eyes continuously by defocusing altogether
@TeenWithACarrotIDK
@TeenWithACarrotIDK Жыл бұрын
@@Blox117 Ok.
@AnimilesYT
@AnimilesYT 3 жыл бұрын
In animation everything should have an ease in when it starts moving and an ease out when it stops moving. The easing should depend on the total movement, the speed, the elasticity, the mass, and things like that. Something with little mass can accelerate quick and it can also decelerate quickly. So the eyelids don't need as much smoothing as the eyes, and the eyes don't need as much as the head. I think the way you did it is a huge improvement on the default binary speed. It's also nice that it is very easy on resources and it's easy to understand and implement. So I think this solution is a very good compromise between realistic movement and complexity. This also makes it great for beginners. That said, as I mentioned in the beginning of my comment it should look even more realistic if it also included an ease in. It should also look more realistic if all servos get their own smoothing parameters. Choosing the wrong smoothing can make it look worse though, so it requires a bit of tweaking
@viniciusfriasaleite8016
@viniciusfriasaleite8016 3 жыл бұрын
A little ease in is achieved naturally by the limited force the servo has to move the mass. It would be cool to wire the feedback potentiometer of the servo to the arduino to see the real position. We only saw the desired position on that plot
@FiNiTe_weeb
@FiNiTe_weeb 3 жыл бұрын
​@@viniciusfriasaleite8016 also the fact that he's converting rotational motion to linear theres some sinusoidal ease-in and out
@howtodothingssask4385
@howtodothingssask4385 3 жыл бұрын
Love your hard work on all your projects !
@gregswank4912
@gregswank4912 2 ай бұрын
I think this code will really help my skeleton animatronic. It's a modification of a leering skeleton on a grave, powered by an Arduino, with PIR sensors for eyes. It wakes up when it sees motion, with red glowing eyes, and pivots it's head and body to look in the direction of the movement. I'm currently using delays to get attenuated movement, but this will look ten times better with smoothing. Thanks for sharing!
@Chiberia
@Chiberia Жыл бұрын
These are called "easing transitions" and there are many different ones for different types of animations. I'd definitely recommend looking up some of the theory on these to help fine tune formulas for different uses.
@FinepixF30
@FinepixF30 2 жыл бұрын
9:35 Running all events in an infinite loop is not energy efficient nor is using delay functions, the best approach I found when i was working with PIC micro controllers is to use an internal timer TMRO to generate an interrupt at fix intervals and then run all events within such interrupt, the lapsed time within interrupts the micro controller can be in sleep mode until next interrupt saving big time on battery life. Now I use ESP32 with RTOS and internally has the same principle with the added feature that each interrupt checks for task priorities on the queue and that's how multitask operating systems work. The ATMEL 328 used by arduino uno has 2 internal timers that can allow even more options. I think the loop approach used by Arduino is good for beginners but create really bad habits for embedded programming. The way to go is to get familiar with interrupts, service interrupts and priorities.
@easyBob100
@easyBob100 3 жыл бұрын
This is cool. It's also another chance to let everyone know that Disney has a lot of research on this. Their robots are a lot heavier, and if you just target a location, the whole robot can rattle around. IIRC, they used some kind of overshoot method, which allows them to move fast, yet keep the robot from shaking from the move. I think lol.
@vrcxmeta4598
@vrcxmeta4598 Жыл бұрын
this video just in my recommended just brought me back to one of my favorite channels from a while ago, used to binge watch your hulkbuster build series trying to figure out what anything you were saying meant
@jacocoetzee762
@jacocoetzee762 3 жыл бұрын
Thank you so much! I’m working on a 6 DOF robotic arm and want to use various accelerometers spaced over the arm to work out the position of the head in relation to the base of the arm. This smoothing will be key to make the movement of the arm easier to control with less jerking.
@blackbomb64
@blackbomb64 3 жыл бұрын
If you are working on creating a robotic arm, you should try to work towards programming a PID controller. It will give you much more control over how the arm moves.
@jacocoetzee762
@jacocoetzee762 3 жыл бұрын
@@blackbomb64 PID is so next level. Thank you for the advice. Will give it a go :)
@Mitraloxy
@Mitraloxy 2 жыл бұрын
With how realistic the robot's actions are, *it's unexpectedly wholesome.*
@bradkoerner1
@bradkoerner1 3 жыл бұрын
Fantastic video! Thanks for doing simpler videos covering the "basics" once in awhile - it inspires newbies like myself to give it a try with my kids!
@madman7923
@madman7923 Жыл бұрын
holy cow when you connected the joysticks it really brought him to life with smooth motion. thanks for such a cool video!
@isthissiddh
@isthissiddh 3 жыл бұрын
this was really very helpful. please please please bring in more tutorials like these about minor things which go unnoticed in a larger project but are key to its success. thank you!!!
@vomitedthoughts
@vomitedthoughts 3 жыл бұрын
This is a great video i wish I had this back when I starting building animatronics.
@Stoneman06660
@Stoneman06660 3 жыл бұрын
That is beautiful in its simplicity, execution and aesthetic. Well done, sir!
@SamWane
@SamWane 2 жыл бұрын
What James has created here is a low pass filter (fast input changes are reduced). This can also be used to reduce 'blips' in analogue values such as reading a light sensor etc. I hope you don't mind but I've pasted a function to do this. Call it with input=the analogue value read (converted to double), and f as the cutoff frequency in Hz (try 0.3). Call it from a timed loop (e.g. reading a value and having a delay (e.g.100ms) double filter(double input, double f) { static bool initialise = true; static double prev_x = 0, prev_y = 0; double y; double T; static unsigned long lastmillis; T = (millis() - lastmillis) / 1000.00; //f = 0.2; //Cutoff frequency in Hz, small value makes a slow response f = f * 2 * PI; //if (initialise) y = input; else y = f * T * prev_x + prev_y - f * T * prev_y; initialise = false; prev_x = input; prev_y = y; lastmillis = millis(); return y; }
@thetastefultoastie6077
@thetastefultoastie6077 3 жыл бұрын
You don't need `switch1Prev` because it always has the same value as `switch1Smoothed. Just `smoothed = smoothed * 0.95 + input * 0.05` is enough. It's also worth noting that eyeballs are the fastest-moving part of the human body and naturally have motion very similar to servos. I would not smooth them, or only very slightly, but have them target something in global space with inverse kinematics, and have the head follow the direction of the eyes slowly and smoothly.
@waylontmccann
@waylontmccann 3 жыл бұрын
Out of all the animatronic tutorials, this one manages to make arduino coding sensible... what? Awesome 👌
@cavemaneca
@cavemaneca 3 жыл бұрын
It'd be interesting to see if you could set a "per servo" smoothing, since some things like eye have a lot snappier motion.
@AT-oh3yy
@AT-oh3yy 2 жыл бұрын
They have I suppose? The values set for the smoothing is same for all section. Just guessing here don't be mad
@ahbushnell1
@ahbushnell1 3 жыл бұрын
Another way is the single pole digital filer. Vnew=(Vin-Vold)*delT/tau+Vold Vold=Vnew Tau is the time constant (small is fast) and delT is the step size (in your case 10ms). Vin is the signal from the switch. Vnew goes to your servo. Good video as usual!
@mikefochtman7164
@mikefochtman7164 3 жыл бұрын
You can re-arrange your smoothing formula a bit. newpos = oldpos + k*(target-oldpos) where 'k' is typically 0.05 to 0.03. This is a tiny bit faster (only one multiplication vs two). But more importantly, needs only one constant. Your original formula (@ 6:11) you have to always make sure that the two constants (0.95 and 0.05 for example) add up to exactly 1.000. This can be easily missed when tuning the values. Also, you can get a bit more precise by using the delta-time step in the formula (but takes another mulitplication) newpos = oldpos + k2*time-step*(target-oldpos). (where k2 is a new constant tuned for) So long as the delta-time isn't very long, this can give very precise movement that accounts for just how often the loop runs. For an animation it's probably not worth it, but if you're doing precise positioning of an item, it can be useful.
@djmips
@djmips 3 жыл бұрын
I hadn't watched a Bruton video in 4 years and it's quite striking how the narration has changed. It's almost like there is smoothing on the end of sentences. :)
@djmips
@djmips 3 жыл бұрын
I think I figured it out, it's a conscious effort to talk more slowly, probably as the result of feedback. My solution. Watch the video at 1.5 X and I get the faster talking Bruton back. ;-)
@Inkdkid
@Inkdkid Жыл бұрын
The word “animatronic” is forever associated with man killing kids and stuffing them in a robot.. and i love it
@BenRyherd
@BenRyherd 3 жыл бұрын
It's crazy how big of a difference such a small chunk of code makes! Very lifelike. Thanks for sharing!
@MrEggBoi
@MrEggBoi Жыл бұрын
FNAF fans coming to learn how to make animatronics?
@anor1987
@anor1987 8 ай бұрын
Heheheh
@lunarssecond
@lunarssecond 7 ай бұрын
guilty 😩
@Springtrap.456
@Springtrap.456 7 ай бұрын
Here✋️
@Quirindongo_WorkShop
@Quirindongo_WorkShop 7 ай бұрын
me
@That_randomGuy1232
@That_randomGuy1232 7 ай бұрын
Here
@KarmjotBhullar
@KarmjotBhullar 23 сағат бұрын
Hey, I was just wondering if there was a tinkercad or something similar to show how you wired everything? Thanks.
@Moddingear
@Moddingear 3 жыл бұрын
That smoothing looks like a RC (resistor condensator) discharge, you could make it delay independant using an exponential
@omaraissani6255
@omaraissani6255 3 жыл бұрын
That's because it is a discrete first order transfer function just like RC
@smellycat249
@smellycat249 3 жыл бұрын
Thank you so much. I kinda gave up on a project because I couldn’t figure out servo smoothing. Now I can get back into it
@zvikamikaze
@zvikamikaze 3 жыл бұрын
beautiful! I'd love to build this for my kids but currently do not have solidworks, fusion or any other decent CAD software, actually. could you possibly share discrete stl files rather then unified STEP, for ease of printing?
@FinepixF30
@FinepixF30 2 жыл бұрын
Great work, it really proves that every thing in nature behaves like a logarithmic curve, what you explain here is warping the pulse within a logarithmic curve that shapes the on and off transition instead of having sharp sudden changes. As per comments below yes, this can also be applied to turning LED on or off to make them glow up or glow down (emulate a candle light for example) or to shape sounds to create smooth transitions for amplitude or frequency allowing different sound effects . As someone said below think of all the applications that use pulse width modulation.
@so.corn_msc
@so.corn_msc 11 ай бұрын
0:04 afton if he was brutally glued to the suit
@CREATIVEINNOVATOR
@CREATIVEINNOVATOR 2 жыл бұрын
I just fall in love with all your projects
@oranac
@oranac 3 жыл бұрын
That structure would be interesting to add some mems sensors control with PID.
@whisperpone
@whisperpone 2 жыл бұрын
it's important to note that this method of smoothing always adds a bit of delay into the system, so for things that you want to be smooth but still snappy, you'd be better off using a proper easing method which allows you to specify exactly what time it should take to get to its final position, and whether it should ease in or just start immediately like your system does
@Egsslereal
@Egsslereal Жыл бұрын
I didn't know William Afton was doing a tutorial
@ka24det
@ka24det 3 жыл бұрын
I did something similar to that smoothing code for an ESC but with integer amount rather than percent. Percent makes so much more sense!
@reggiep75
@reggiep75 3 жыл бұрын
It would be interesting to see how the eyes moved if you opted to remove the black eyes, put cameras in their place and tried 3D plans & AI projects with the eyes.
@almondtech
@almondtech 3 жыл бұрын
Congrats on 1mil subs! idk how long its been since u got to it but congrats anyways! Idk when I followed because I made this channel more recently, but I remember back when you made the xenomorph, this channel is what got me interested in engineering, arduino, and 3d printing.
@philurbaniak1811
@philurbaniak1811 3 жыл бұрын
Looking good is this the fraggle rock reboot? 😁👍
@robincarr111
@robincarr111 3 жыл бұрын
Similar technique can be used to smooth analog signals, a FIFO buffer of 10 or so values, added together then divided by 10. When a new value enters put the old one out and reaverage. Easiest is to keep an array and cntr. Put the value in at the cntr, increment by on. If the cntr >9 reset to zero. You just overright the last item in.
@notanengineer
@notanengineer 3 жыл бұрын
What joysticks are you using for the controller?
@TheStuartstardust
@TheStuartstardust 3 жыл бұрын
I think he has a tutorial for that Edit: kzbin.info/www/bejne/d4W0k599hM-AjbM
@jordanletchford9139
@jordanletchford9139 3 жыл бұрын
Nice video! Pretty much showing how easy it is to do essentially just a kalman filter. Changing the percentage you rely on the previous and the next value would be the Q and R in the filter
@BeekersSqueakers
@BeekersSqueakers 3 жыл бұрын
You could scale the smoothing time as an input to characterize different "emotions" in your animatronic. Energetic states would have sharper smoothing and more lethargic states would smooth more slowly.
@brianbrewster6532
@brianbrewster6532 3 жыл бұрын
That smoothing algorithm you used was as elegant as it was ingenious. And the way you demonstrated this in the visual graphing really made this apparent you went from those choppy square waves to those poetic looking curves. You should consider making a full-sized animatronic running 6 - 8 arudinos to show how life like this can be in terms of arm/hand movement, treadle turning, and of course facial movements including your pair of amazing eyes.
@jakovsaric9492
@jakovsaric9492 3 жыл бұрын
This was right in the middle of the uncanny valley
@gausav9574
@gausav9574 3 жыл бұрын
really ? i guess the valley is different for everyone
@MrGatlin98
@MrGatlin98 3 жыл бұрын
The fact that the uncanny valley exists means that at some point in evolutionary history it was advantageous for humans to be able to detect (and be afraid of) something that looked like a human but wasn't.
@gausav9574
@gausav9574 3 жыл бұрын
@@MrGatlin98 yeah or, detect easily when one human isn't acting normally
@juliocesarvelandia3386
@juliocesarvelandia3386 3 жыл бұрын
James Bruton: Congratulations. It seems very basic but ... It's very elaborate.
@n8han1
@n8han1 3 жыл бұрын
Hey James, It's always interesting to see you make these simple hinging parts. I'm wondering why you used a normal bolt at 1:15, while for the next one (1:32) you seemed to have used a self-tapping screw. Also, how do you like to make the thread in your 3d printed parts? threaded inserts or just threading the 3d-printed hole?
@simon_fox_youtube
@simon_fox_youtube 2 жыл бұрын
U only need nuts or threaded inserts if it needs to be really solid and withstand a lot of stress lol
@tpobrienjr
@tpobrienjr 3 жыл бұрын
Excellent tutorial! My own experience with smoothing motion comes from the control used in the Canadarm/Canadarm2 robots. In those, the operator puts in a desired motion vector, and the joint servos are commanded simultaneously to give a blended (resolved) motion along the desired vector, which changes every 80 milliseconds. The operator's command is with two joysticks that give 6 axis control. It looks very smooth and natural (but of course costs multizillion dollars).
@notanengineer
@notanengineer 3 жыл бұрын
Thus is useful!
@RemyNote
@RemyNote 3 жыл бұрын
Another way to do this is to have a second variable called "speed" (or acceleration). Which you adjust positive or negative based on how far the new value is away from the previous and you can then also make the speed value smoothed. Which will make a smooth start + end possible. Now the start is still 'sudden'.
@albertweber1617
@albertweber1617 3 жыл бұрын
Just use a PID, you'll get all the variables you need
@jamunabegum3209
@jamunabegum3209 3 жыл бұрын
Boston dynicks should watch you videos
@Hygix_
@Hygix_ 3 жыл бұрын
They are way better than this smh
@Notverygoodatall
@Notverygoodatall 3 жыл бұрын
@@Hygix_ I have Boston dynamics dog and it is not as good as this.
@Hygix_
@Hygix_ 3 жыл бұрын
@@Notverygoodatall that's a different categories of machine
@Notverygoodatall
@Notverygoodatall 3 жыл бұрын
@@Hygix_ these are both robots
@Hygix_
@Hygix_ 3 жыл бұрын
@@Notverygoodatall but different shape and use
@chrisw1462
@chrisw1462 3 жыл бұрын
For the code optimization geeks (like me): 'switch1' only changes when the switch does, yet it's multiplied by 100 and then by 0.05 in every loop. Since that never changes, you could simplify it by just multiplying by 5 (100 * 0.05). The compiler might even be able to optimize 'switch1 * 100 * 0.05' into 'switch1 * 5'. I understand it's written that way to show how it's smoothing the values, but an even more efficient way would be a simple conditional in place of most of the calculations: sw1Smoothedt = switch1Prev * 0.95 if digitalRead(12) { switch1Smoothed += 5 } switch1Prev = switch1Smoothed
@MikeTrieu
@MikeTrieu 3 жыл бұрын
Now you just need to train a GAN neural net to learn different actors' facial tics and move the robot servos to match.
@easyBob100
@easyBob100 3 жыл бұрын
A NN is overkill. The only reason to use it would be to simplify the control system. Train a network to match video frames of a face to keyframes of servo positions. That would be a lot of work. A GAN is 100% unneeded.
@rustyscrafts
@rustyscrafts 3 жыл бұрын
In animation, this type of movement smoothing is called easing. I don't know the math behind easing, but your video explained the idea nicely!
@BendeVette
@BendeVette 3 жыл бұрын
In normal life, there is a acceleration at the start, a "constant" speed in the middle and a deceleration at the end.
@FlareSnare
@FlareSnare 3 жыл бұрын
You should make the eyes unsmoothed as they were as real eyes dont have any smoothing when they look around, and for the rest, near the end of the deceleration make the value go straight to zero, so it decelerates then stops suddenly when its almost done decelerating. This will replicate human movement quite a bit better. Great Video!
@experimentalcyborg
@experimentalcyborg 3 жыл бұрын
"I'm going to publish all the cad and code for this if you'd like to HAVE A LOOK at it" damnit
@jameshughes3014
@jameshughes3014 3 жыл бұрын
why is this a problem?
@experimentalcyborg
@experimentalcyborg 3 жыл бұрын
@@jameshughes3014 It's phunny
@jameshughes3014
@jameshughes3014 3 жыл бұрын
@@experimentalcyborg oh. I am slow today
@GeorgeTsiros
@GeorgeTsiros Жыл бұрын
eyeballs move smoothly when they are following a moving object even if the head is itself moving however, eyeballs move _very_ suddenly when they change the direction they are looking at. place your hands in front of you. move your right hand around. your eyeballs follow it smoothly. Start moving your head as well. Your eyeballs continue following your hand smoothly. Look at your left hand. Your eyeballs change from looking at your right hand to looking at your left hand in a very sudden movement. move your hands in opposite circles, left clockwise, right anticlockwise (or the other way around, doesn't matter) look at your left hand then at your right hand. You will notice your eyeballs follow each hand smoothly but transition from left to right hand very suddenly. You can use a high framerate camera to verify this.
@Spacer_XD
@Spacer_XD Жыл бұрын
FIVE NIGHT AT FREDDIES
@mattimotion
@mattimotion 3 жыл бұрын
Super useful video, thank you for that! The robot projects on this channel combined with some animatronics like these could become terrifyingly characteristic
@edsonf.3551
@edsonf.3551 Жыл бұрын
Very nice project. A little tip ;) You could implement the setSequencer (10:05) using a switch / case to avoid if/else statements and in future projects with more steps, use a Design pattern like state machine. Using switch/case could be something like this: void stepSequencer() { int ellapsedTime = currentMillis - previousMillis; bool changeStep = false; switch(stepFlag) { case 0: if (ellapsedTime
@ajayvkoppad4329
@ajayvkoppad4329 Жыл бұрын
tika muchkond hogo le lowde
@WilliamHemmingsen
@WilliamHemmingsen Жыл бұрын
I know this is old, but I'm in progress of making this. My version will have face tracking via depthai. And powered by openai API. Love this version of animatronic eyes. thanks for such a great design. And thanks for posting the CAD!
@jameshughes3014
@jameshughes3014 3 жыл бұрын
This is perfect for my social distance Halloween project. Thank you
@wertw120
@wertw120 3 жыл бұрын
Do you need the switch1Prev variable? You could just use switch1Smoothed, like so: switch1Smoothed = switch1 * 0.05 + switch1Smoothed * 0.95; The computation of the value returned will use previous value. You also don't need the parentheses.
@HexonGamer361
@HexonGamer361 3 жыл бұрын
My limited knowledge of arduino tells me that this would work. But I think he knows this and chose to do it differently... For some reason.
@Londrino
@Londrino 5 ай бұрын
ohh, I was having trouble controlling two axes on one of my projects because the delay was messing things up, using the clock instead is such a great tip
@marco_gallone
@marco_gallone 3 жыл бұрын
First order filters are such a huge asset for all digital control systems
@netizen5467
@netizen5467 11 ай бұрын
I usually dont really comment on a yt video. But this one just blows my mind. how simple yet elegant...really amazing. keep going 😊❤️🔥
@Ernzt8
@Ernzt8 3 жыл бұрын
How a simple piece of code makes such a big difference, thanks!
@askjacob
@askjacob 3 жыл бұрын
this kind of multi tasking can also benefit from setting up a timer with interrupt and check flags/update values that way. Less overhead than checking millis() all the time if you need to do more heavy lifting in your mainline code
@roquelazarus
@roquelazarus 2 ай бұрын
These guys make the world go round ...thanks
@djmips
@djmips 3 жыл бұрын
A good eye rotation calculation has each eye looking at the same point. Then you get a bit of toe in. Then you can move the virtual look at position with your controller ( could be on an arc) This looks more realistic than both eyes in parallel turning at the same speed. Nice work. Good building and showing how to use a simple low pass filter.
@paulnewman2000
@paulnewman2000 Жыл бұрын
Nice idea. What about sensors to detect distance to object? Then you could have it go cross-eyed as you brought objects close.
@allan4317
@allan4317 Жыл бұрын
By far the best animatronic 3D printed eye mechanism I've seen. Willing to purchase obj or stl files.
@CryptoTonight9393
@CryptoTonight9393 3 жыл бұрын
In the animatronic world this is called compliance. Disney Reaserch has been doing a lot with algorithms to make robotic movements match what the animation simulation says they should be.
@WistrelChianti
@WistrelChianti 3 жыл бұрын
Gotta love the advert I got on this: James: "Here are some super cheap random name servos" Advert: "Do you want to make quality metal parts with MarkForged?" XD
@GeeTheBuilder
@GeeTheBuilder 3 жыл бұрын
Congrats on reaching 1m subs. I’ve only just noticed. 🏆 Thoroughly well deserved. Been watching you for years. You’ve taught me a lot. Even though I’ve been programming since 89 and the programming isn’t too advanced for me, it’s a brilliant intro for my daughter and others. Thanks 🙏
@janjaapvdv
@janjaapvdv 3 жыл бұрын
This is Proportional control. ie. the P part of a PID controller. Good work.
@MrZonda90
@MrZonda90 Жыл бұрын
Hello! Thanks for the awesome tutorial. Is it possible to get the STL files somewhere? Maybe i missed in the video but if it wasn't mentioned, i would very much like to acquire the STL files for this model to build it with my son. Thanks a lot.
@D-Khaz
@D-Khaz 3 жыл бұрын
I love these great little how to videos
@primetrader5062
@primetrader5062 Жыл бұрын
This technique will work properly only for actions which have a relatively long duration. Fast inputs will yield virtually no response from the servos. You must add the smoothing attenuation coefficient for high speed inputs.
@SingSangEntertainment
@SingSangEntertainment Ай бұрын
Where did you get the 3d model from? And can I download it somewhere?
@justinberdell7517
@justinberdell7517 3 жыл бұрын
I live outside Chicago and i love the creators from other parts of the world! It's 1am and this pops up. So awesome lol Also your background music is pretty great
@paaabl0.
@paaabl0. 3 жыл бұрын
Tried this technique with different servos. The end effect depends heavily on the load and random quality of the servo itself. Usually they struggle and jitter with small changes in position.
@nobody.of.importance
@nobody.of.importance Жыл бұрын
This looks like a heavily simplified version of a PID controller. If this is a step in the right direction for your project but doesn't give you quite the amount of control you need, consider looking into PID controllers, they're very cool and surprisingly simple.
@jamesbruton
@jamesbruton Жыл бұрын
Yes thanks, I have a whole playlist of balancing robots and vehicles
@Simon_SolutionS
@Simon_SolutionS 3 жыл бұрын
Getting back to basics time to time is really important Thanks and once again great job
@angusmclaren6257
@angusmclaren6257 3 жыл бұрын
It's a great tutorial. Really gives you a good idea how they animated Baby Yoda.
@robomaster53
@robomaster53 3 жыл бұрын
I Like your project I want to make one. Where are the stl filed?
@likekkkkkkk
@likekkkkkkk Жыл бұрын
Great video as always! I was thinking about it, and if you want to double how organic it can look, you can combine smoothed motion and jerky motion. For example: say you have your animatronic in a sort of 'sleeping' state, but then you need to 'wake it up'. At the very beginning, you can take a few approaches, such as being startled. Essentially, start with jerky movement scanning the entire environment very quickly, and then 'calming down' and use the smoothed-out motion. A lot of this would be easier with pre-programmed movements, especially if you want to quickly switch between jerky and smoothed-out motions to help simulate different emotions and such. You would also need to take into account that humans are hardwired to be incapable of moving their eyes smoothly without tracking an object. Otherwise, the eyes move in a somewhat smooth, but still jerky motion. All of this is just me thinking, and animatronics aren't really my thing, so if you're into this kind of thing, maybe this could be useful to you. Maybe not. Anyway, great video, and hope you have a good day!
@circleofowls
@circleofowls 3 жыл бұрын
Perfect timing, I'm just about done with the physical design of my omniwheel astromech project, this will help a lot in the movement code.
Robot Dances so You Don't Have To
12:05
James Bruton
Рет қаралды 116 М.
Bringing GLaDOS to life with Robotics and AI
13:04
Dave's Armoury
Рет қаралды 1 МЛН
Непосредственно Каха: сумка
0:53
К-Media
Рет қаралды 12 МЛН
요즘유행 찍는법
0:34
오마이비키 OMV
Рет қаралды 12 МЛН
Alternative to bearings for tiny robots
12:05
Breaking Taps
Рет қаралды 938 М.
World's First SCREW-BIKE
23:04
James Bruton
Рет қаралды 2,4 МЛН
The coolest robot I've ever built!
19:40
Thomas Burns
Рет қаралды 4,9 МЛН
Disney's Most Advanced Animatronics - You'll Be Amazed
14:44
Fastpass Facts
Рет қаралды 627 М.
I built myself a new Robot Buddy!
17:11
Made with Layers (Thomas Sanladerer)
Рет қаралды 210 М.
Walking Star Wars Droid Prototype
18:00
James Bruton
Рет қаралды 390 М.
My Secret: How I Became an Autonomous Robotics Engineer
8:06
ubicoders
Рет қаралды 76 М.