Your progress and commitment to making levels of redundancy that most other 3d printed arms ignore is inspiring, and your videos are incredibly made. Keep it up!
This is genius. I keep coming back to it. I think the future of robotics for decades can be seen here. Keep the weight (motors in this case) where you want, make the limbs light, and track position with sensors. AI vision maybe for end tools
Great video, and its awesome to see the code open sourced too. It would be a huge benefit to make the title more informative to people looking up information about motor positioning!
An absolute joy to watch your videos! your explanation of the code made me breifly forget i don't read code without googling for hours, its brilliant! I'm definetely going to build one of theese as a gift for my littlebrother.
Again, very impressive. I have too many irons in the fire at present, but have bookmarked your videos to come back to when I have the time. Thanks much.
Great video... Again. Thanks for taking the time to explain the logic you used in the error correction. That's really useful. Thanks and keep up the great work. Going to have a play with your Jupyter code... That looks super useful.
That's brilliant ! I was affraid that, because of the bowden tubes, the wrist would be innacurate when the first three joints are moving. But the way that you've mounted the sensors and the code makes up for this ! Thank you for sharing all of this. Do you think you'll have a go with inverse kinematics ?
@@roTechnic unfortunately I'm travelling at the moment and my robot is mostly failed prints in a drawer somewhere right now. It's a hobby project so I've challenged myself to try include as many different reducer types as possible. Some axes are using planetary gearsets and GT2 belt and pulleys. I'm in the process of refining a cycloidal reducer for the elbow, and a harmonic drive for the wrist. Wrist is actuated from behind the elbow with a torque shaft and fishing line pulley system running through the forearm. Over engineered and destined to fail, but the project kept me sober during lockdown and that's all that matters.
Yeah, you can use a PID loop. in fact, this is basically just the P part of a PID loop. At the moment, I'm not seeing any oscillations using this method, but if they start happening then I'll switch to a PID loop. However, I do like to try to keep things simple, and if I don't need the full PID implementation then I think this is easier to understand :)
Question: I have that as5600 board. what would you recommend for linear motion? Would this work as well for a motor the has to spin thousands of steps to say move a Z axis or even a belted X or Y? In inkjet printers they use a very fine transparent "barcode" thing, and that lets them count the steps I guess. I also use Geared stepper motors so the motor has to rotate multiple times to effect a single rotation. And finally, I haven't used them yet, but are you familiar with Geared DC motors that have built in encoders? They use two hall effect sensors to provide the position. If you are familiar, the MASLOWCNC uses 2 of these motors to "plot" a rotor, to cut plywood. Cool project. But again another closed loop approach.
They don't work that well for direct encoding, because they take a while to read (like 1/10ms) so can't be used to read the position every microsecond.. Although, that being said, I've got a project on the back burner using these and a stepper motor for full FOC control - a couple of things to sort out with it though.
Yeah, I could use i PID loop here - and it would probably be better for a normal robot arm. But I'd like to put a camera on the end of the arm and have very well defined accelerations and speeds for camera moves. A PID loop, unless it is tuned perfectly won't give me the accuracy of speed/acceleration I need.
@@roTechnic I understand the problem you are facing but as far as I know of control theory (so correct me if I am wrong) but any control loop you would implement would just be a dimished version of a PID loop, just with some terms missing.
@@DucBanal in theory, yes. But in practice it’s much easier to tune a simple feedback loop like I’ve done here rather than implement a pod controller and just use the proportional side of it. As you saw in the video, I can easily adjust the p part (the 70/30% bit) but I have quick access to the timings around it too and can add polynomial terms in if I need to. I guess I’m saying that using a pid controller here would be like flying a jumbo jet to your local shops - very cool, but difficult to park!
Just found your channel today, amazing work! This is exactly the type of project I love to follow! Not sure if this has been said anywhere before but have you thought about using a synchromesh cable system for the build?
@@roTechnic I seen one being used in the positron v3 3D printer on a pulley system to keep position and it looks like it did a great job. Not sure if it would overcomplicate things for you, or simplify knowing the position of each motor. Would love to know if you end up using it or the reasons why it's probably a terrible idea haha
Looking good! How accurate is the AMS sensor? I think the datasheet says +/- 1 degree. Seems a lot for a 12 bit sensor? I assume you're not microstepping the motors?
the +-1 degree is the accuracy of the initial reading. All readings following that are to 12 bit precision. We can get over the accuracy by manually setting the offset of the sensor and then get nice precise readings after that
@@roTechnic I did some work with these a few years ago, looking for a cheap replacement for a resolver, but back then they weren't terribly accurate and needed a calibration. Then we looked at a sensor using pcb track antennas by Zettlex. Looks like the AMS chips have improved a lot in the meantime.
I've just uploaded them as STEP files which you should be able to open in any CAD software. There are too many parts to export them all as STL and you'll need the cad to see what bearings and fasteners are needed and see how it all goes together
Could you make a short video showing us how the robot arm might go about only changing a single value for each of its 6 degrees of freedom? Like for 1 shot, it oscilates between its rest position another position that only translates/rotates an attatched object along 1 axis at a time. How would you go about changing the pitch without changing the position, roll, or yaw of JUST the object? (More specifically, not changing the position of a single point, such as the center of mass or perhaps the attatchment point, Idk which one is correct)
I thought you are going to apply PID for those encoders. What is this method called again? I remember James Bruton doing the same thing for one of his robots. I'd like to look up more about this method....
Oh, and also do you plan on switching to a regular motor like a brushless or a brushed one now that you have encoders? Would certainly help in reducing the noise and heat from steppers I guess!
@@rizalardiansyah4486 Steppers are pretty much the ideal motor for these arms until you can move up to fully fledged servos, brushed motors are obsolete these days and nothing quite comes close to the ease of use and stall torque of a stepper
PID is more appropriate for control of analog devices such as heaters or brushed motors. I think I'm going to stick with steppers for now - see how far I can take them. I'd love to do a bigger arm with brushless motors though.
@@roTechnic Analog has nothing to do with it. PID would work fine expect this is a nonlinear system (Damn you gravity!). Though if you have enough torque , stiffness, and good sensor resolution, the non-linearity may be manageable.
Interesting, I didn't know that - thank you! unfortunately, torque and stiffness are not in great supply in this arm, but I am tempted to try out a PID loop. I imagine that you'd just set the PID to control the speed of the steppers and set them to rotate continuously - do you agree?
So, it looks like you mounted the magnets in the center of the joint which I would have expected to mean that the magnetic field didn't change as they rotate. What am I missing? Are they off-center? Is something else going on?
the AS5600 sensors are supplied with "diametrically magnetised" magnets which have the field at 90 degrees to "normal" magnets. I got carried away and forgot to mention that in the video. Please accept my apologies.
Hi your project is awesome I'd love to take a look at the code. I tried looking at the linked Github page but is seems the only Arduino code posted is the code for the sensors alone. Is there a separate file that contains the code for running and controlling the stepper motors?
Whoops never mind user error. For some reason when viewing the code from the Arduino IDE only some of the code is transferred. The rest of the code showed up when I opened it in Visual Studio.
Hiya, no the zip file that says sensors contains all the code for the sensors and the steppers. It's all in separate classes in that. If you've got any questions, I'd be happy to help - just drop me an email - address is in the about section on my channel.
Be careful the rabbit hole you're going down! Next is joint mastering, then camera-in-hand parametric calibration, then higher order calibration, then...
Why not use an optical encoder such as CUI AMT102-V which can be directly mounted on the shaft, but use a magnetic sensor instead? Any reason to go with that particular one?
I don't want the encoders directly on the shaft of the motor as I'd like it to report on any deviations that the 3d printed gearboxes/bowden cables add to the system. The other problem with the optical encoders is that it takes quite a bit of processing power to read them as each pulse gennerates an interrupt, whereas I can just query the magnetic encoders any time I like with no overhead in between queries.
To add to what I assume is part of their reasoning, the encoder you listed is incremental, and therefore wouldn't give them the absolute position of the arm on boot up, necessitating some sort of homing sequence. Furthermore, its far more expensive.
Q: Could it have extensible arms and still know exactly its exact ampleness as you stretch its limbs? It would be greatly useful when filming ample outdoor shots! That would require a way to give a lot of loose on the strings to adapt to the extra length.
@@roTechnic I just thought of something to prevent twisting... What if the motors section would rotate independently from the robotic arm so it could follow the arm's rotation and carry the cables along? It would prevent the dog from wrapping itself around the post right, sort of speaking.
@@roTechnic Somehow! I was thinking tonight also that alternatively, you could mount all motors on the lowest part of the arm and have it spin around with the same lazy susan but even better, if the base arm rotation can carry the motors around with their strings without torsion, maybe they could even be fixed. You could calculate, software side, the rotation of the arm's base to carry the strings around. And if I forgot anything and it wouldn'T work, the motors could still be attached around the arm base, but with an extra motor, smaller, weaker, that rotates the ring around, mounted back on that lazy susan. Also in any manner, you could keep the strings organized in something akin to fishing pole line guides which could be mounted onto something smooth like a bearing too.
Your progress and commitment to making levels of redundancy that most other 3d printed arms ignore is inspiring, and your videos are incredibly made. Keep it up!
Wow, thank you!
Agreed, nice progress and simple explanation. Keep up the good work
Case anyone is wondering: the sensor he uses is a AS5600
This is genius. I keep coming back to it. I think the future of robotics for decades can be seen here. Keep the weight (motors in this case) where you want, make the limbs light, and track position with sensors. AI vision maybe for end tools
You need a PID controller for the joint angles.
I used the same AS5600's and multiplexers on my quadruped! Amazing capability at a great price.
This is a robot arm I actually want to build since it’s much simpler and well explained. Well done
It was a wonderful video. It only lacks a few limit switches and the command to return home.
Fantastic progress, I see this series becoming the go-to series for arms when it's complete
Brilliant idea, thank you! I have been really struggling to work out how to actually know the movement is accurate.
a very nice approach using the sensor and also nicely explained!
Great video, and its awesome to see the code open sourced too. It would be a huge benefit to make the title more informative to people looking up information about motor positioning!
Point taken :) I've changed it!
@@roTechnic you're the best!
An absolute joy to watch your videos! your explanation of the code made me breifly forget i don't read code without googling for hours, its brilliant!
I'm definetely going to build one of theese as a gift for my littlebrother.
Again, very impressive. I have too many irons in the fire at present, but have bookmarked your videos to come back to when I have the time. Thanks much.
Great video... Again. Thanks for taking the time to explain the logic you used in the error correction. That's really useful. Thanks and keep up the great work. Going to have a play with your Jupyter code... That looks super useful.
That's brilliant ! I was affraid that, because of the bowden tubes, the wrist would be innacurate when the first three joints are moving. But the way that you've mounted the sensors and the code makes up for this ! Thank you for sharing all of this. Do you think you'll have a go with inverse kinematics ?
Loving this project, can't wait to start building
This is amazing. So well done both the video and the robot and the description. Thank you😊
dude this is truly awesome, and its so super mega cool that you're just releasing all of the cad (and code?) stuff for free on your Github!! :O
Amazing work!! This is what inspired me to build a robot arm. Greetings from Brazil!
PID might be a more robust option for the angle tracking
You really make this easier for us pessants, thank you so much!!
Cool project ! You might want to check problems linked with sensor and actuator non-colocation tho, it can make your system unstable
Love your work! I've been working on a very similar project. 3D printed 6 axis arm, with the same sensors. The multiplexer was one idea I was missing.
oh awesome! I’d love to see it. what reducers/gearboxes are you using?
@@roTechnic unfortunately I'm travelling at the moment and my robot is mostly failed prints in a drawer somewhere right now. It's a hobby project so I've challenged myself to try include as many different reducer types as possible. Some axes are using planetary gearsets and GT2 belt and pulleys. I'm in the process of refining a cycloidal reducer for the elbow, and a harmonic drive for the wrist. Wrist is actuated from behind the elbow with a torque shaft and fishing line pulley system running through the forearm.
Over engineered and destined to fail, but the project kept me sober during lockdown and that's all that matters.
@@topordrop2402 It sounds awesome! Good luck!
Nice content and work. You could use something like pid controller better control the motors and reduce overdraft
6:25 this solution nice and easy, but what you think about PID loops? PID controllers are commonly using in the industrial servos.
Yeah, you can use a PID loop. in fact, this is basically just the P part of a PID loop. At the moment, I'm not seeing any oscillations using this method, but if they start happening then I'll switch to a PID loop.
However, I do like to try to keep things simple, and if I don't need the full PID implementation then I think this is easier to understand :)
how come the control wires don't come loose? They do need some freedom as the arm rotates, so how is that managed?
Question: I have that as5600 board. what would you recommend for linear motion? Would this work as well for a motor the has to spin thousands of steps to say move a Z axis or even a belted X or Y? In inkjet printers they use a very fine transparent "barcode" thing, and that lets them count the steps I guess. I also use Geared stepper motors so the motor has to rotate multiple times to effect a single rotation. And finally, I haven't used them yet, but are you familiar with Geared DC motors that have built in encoders? They use two hall effect sensors to provide the position. If you are familiar, the MASLOWCNC uses 2 of these motors to "plot" a rotor, to cut plywood. Cool project. But again another closed loop approach.
They don't work that well for direct encoding, because they take a while to read (like 1/10ms) so can't be used to read the position every microsecond.. Although, that being said, I've got a project on the back burner using these and a stepper motor for full FOC control - a couple of things to sort out with it though.
Great video, thank you for sharing
Your videos are just a treasure! Thank you for all knowledge and great explanations! I keep a close on every part of you projects 😍
Thank you very much! It's nice to see you making videos again!
I think that I am not the only thinking it but I want amplify the signal : the problem you are trying to solve has a solution, a PID loop.
Yeah, I could use i PID loop here - and it would probably be better for a normal robot arm. But I'd like to put a camera on the end of the arm and have very well defined accelerations and speeds for camera moves. A PID loop, unless it is tuned perfectly won't give me the accuracy of speed/acceleration I need.
@@roTechnic I understand the problem you are facing but as far as I know of control theory (so correct me if I am wrong) but any control loop you would implement would just be a dimished version of a PID loop, just with some terms missing.
@@DucBanal in theory, yes. But in practice it’s much easier to tune a simple feedback loop like I’ve done here rather than implement a pod controller and just use the proportional side of it. As you saw in the video, I can easily adjust the p part (the 70/30% bit) but I have quick access to the timings around it too and can add polynomial terms in if I need to. I guess I’m saying that using a pid controller here would be like flying a jumbo jet to your local shops - very cool, but difficult to park!
Nicely done video and project
This channel is amazing :D Very cool. looking forward to find the time to build your robot on my own :D
Just found your channel today, amazing work! This is exactly the type of project I love to follow! Not sure if this has been said anywhere before but have you thought about using a synchromesh cable system for the build?
I hadn't thought of that - Ill look into it. Thank you!
@@roTechnic I seen one being used in the positron v3 3D printer on a pulley system to keep position and it looks like it did a great job. Not sure if it would overcomplicate things for you, or simplify knowing the position of each motor. Would love to know if you end up using it or the reasons why it's probably a terrible idea haha
Well done, great job!
what you usee for joint 2? what types off your motor stepper sir? after your base
Looking good! How accurate is the AMS sensor? I think the datasheet says +/- 1 degree. Seems a lot for a 12 bit sensor? I assume you're not microstepping the motors?
the +-1 degree is the accuracy of the initial reading. All readings following that are to 12 bit precision. We can get over the accuracy by manually setting the offset of the sensor and then get nice precise readings after that
@@roTechnic I did some work with these a few years ago, looking for a cheap replacement for a resolver, but back then they weren't terribly accurate and needed a calibration. Then we looked at a sensor using pcb track antennas by Zettlex. Looks like the AMS chips have improved a lot in the meantime.
Can you comment about the accuracy from this setup?
Would it be possible to have the print files in STL format. I don’t have fusion nor do I want to install it since I’m in another ecosystem
I've just uploaded them as STEP files which you should be able to open in any CAD software. There are too many parts to export them all as STL and you'll need the cad to see what bearings and fasteners are needed and see how it all goes together
Could you make a short video showing us how the robot arm might go about only changing a single value for each of its 6 degrees of freedom? Like for 1 shot, it oscilates between its rest position another position that only translates/rotates an attatched object along 1 axis at a time. How would you go about changing the pitch without changing the position, roll, or yaw of JUST the object? (More specifically, not changing the position of a single point, such as the center of mass or perhaps the attatchment point, Idk which one is correct)
that’ll be coming up very shortly when I dive into the inverse kinematics
What about POTs
Your voice is impressing!
3:12 can we use an SPI bus instead of this multiplexor? i mean, exactly the same sensors but with SPI instead of i2c.
Yes, if you can find cheap 12 bit magnetic encoders with SPI then please let me know - that would be much easier!
I thought you are going to apply PID for those encoders. What is this method called again? I remember James Bruton doing the same thing for one of his robots. I'd like to look up more about this method....
Oh, and also do you plan on switching to a regular motor like a brushless or a brushed one now that you have encoders? Would certainly help in reducing the noise and heat from steppers I guess!
@@rizalardiansyah4486 Steppers are pretty much the ideal motor for these arms until you can move up to fully fledged servos, brushed motors are obsolete these days and nothing quite comes close to the ease of use and stall torque of a stepper
PID is more appropriate for control of analog devices such as heaters or brushed motors. I think I'm going to stick with steppers for now - see how far I can take them. I'd love to do a bigger arm with brushless motors though.
@@roTechnic Analog has nothing to do with it. PID would work fine expect this is a nonlinear system (Damn you gravity!). Though if you have enough torque , stiffness, and good sensor resolution, the non-linearity may be manageable.
Interesting, I didn't know that - thank you! unfortunately, torque and stiffness are not in great supply in this arm, but I am tempted to try out a PID loop. I imagine that you'd just set the PID to control the speed of the steppers and set them to rotate continuously - do you agree?
So, it looks like you mounted the magnets in the center of the joint which I would have expected to mean that the magnetic field didn't change as they rotate. What am I missing? Are they off-center? Is something else going on?
the AS5600 sensors are supplied with "diametrically magnetised" magnets which have the field at 90 degrees to "normal" magnets. I got carried away and forgot to mention that in the video. Please accept my apologies.
@@roTechnic oh. That's neat. Thanks for explaining!
Hi your project is awesome I'd love to take a look at the code.
I tried looking at the linked Github page but is seems the only Arduino code posted is the code for the sensors alone. Is there a separate file that contains the code for running and controlling the stepper motors?
Whoops never mind user error. For some reason when viewing the code from the Arduino IDE only some of the code is transferred. The rest of the code showed up when I opened it in Visual Studio.
Hiya, no the zip file that says sensors contains all the code for the sensors and the steppers. It's all in separate classes in that. If you've got any questions, I'd be happy to help - just drop me an email - address is in the about section on my channel.
there is no email address in your about section !@@roTechnic
@@PersianFilmMakers there is, you've just got to click on "show email address"
Be careful the rabbit hole you're going down! Next is joint mastering, then camera-in-hand parametric calibration, then higher order calibration, then...
Why not use an optical encoder such as CUI AMT102-V which can be directly mounted on the shaft, but use a magnetic sensor instead? Any reason to go with that particular one?
I don't want the encoders directly on the shaft of the motor as I'd like it to report on any deviations that the 3d printed gearboxes/bowden cables add to the system. The other problem with the optical encoders is that it takes quite a bit of processing power to read them as each pulse gennerates an interrupt, whereas I can just query the magnetic encoders any time I like with no overhead in between queries.
To add to what I assume is part of their reasoning, the encoder you listed is incremental, and therefore wouldn't give them the absolute position of the arm on boot up, necessitating some sort of homing sequence. Furthermore, its far more expensive.
@@BeefIngot Yup, both of those too!
Excellent! love this channel
Really good job!!
Pretty cool progress! I am quite happy to have stumbled over your profile!
yes, the sensors are supplied with diametrically polarized magnets. I forgot to mention this in the video. good catch!
Very impressive !
thanks Philip
Awesome machine. 👍👍
Great job :D Inspirational :)
Q: Could it have extensible arms and still know exactly its exact ampleness as you stretch its limbs?
It would be greatly useful when filming ample outdoor shots!
That would require a way to give a lot of loose on the strings to adapt to the extra length.
Interesting idea!
@@roTechnic I just thought of something to prevent twisting... What if the motors section would rotate independently from the robotic arm so it could follow the arm's rotation and carry the cables along? It would prevent the dog from wrapping itself around the post right, sort of speaking.
nice idea. I was considering mounting the motors on a free running bearing, like a lazy susan or something like that so they could move round the arm.
@@roTechnic Somehow! I was thinking tonight also that alternatively, you could mount all motors on the lowest part of the arm and have it spin around with the same lazy susan but even better, if the base arm rotation can carry the motors around with their strings without torsion, maybe they could even be fixed. You could calculate, software side, the rotation of the arm's base to carry the strings around. And if I forgot anything and it wouldn'T work, the motors could still be attached around the arm base, but with an extra motor, smaller, weaker, that rotates the ring around, mounted back on that lazy susan.
Also in any manner, you could keep the strings organized in something akin to fishing pole line guides which could be mounted onto something smooth like a bearing too.
Awesome!
very nice !
i love this man
how many jobs can we automate with this, theres a labor shortage get them filled up with these bots test out your rough draft and make the final draft
I like Joy Division.. :)
Great project. This is very helpful for hobbists, would be nice also to see the overall cost of the project
Thanks, that's a great idea. As the project progresses, I'll definitely add the cost to the details
Perfeito !
👍
2:08 "era, era" hahah you mean "error". there are two "R"s. why can't you pronounce the second one?
first!! nice video btw