scout3 actuator updates: looking at the cheetah paper, and IMF [learning]
So last time: https://www.adim.io/post/scout3-actuator-updates-here-s-what-my-meche-friend-said-staring-from-ground-up-updates we're looking at a 3:1 and 6:1 planetary stages in series and a motor with: https://www.adim.io/post/scout-updates-quantifying-the-cog-of-the-body-itself-and-the-slop-inertial-matrix-updates 6.660E-05 kg*m^2!
So now what we want to start looking at is actual mathematical metrics that we can use to quantify the performance of this system as well as determining what gear ratios we can choose to get this system working properly with proprioception and that kind of torque control because that's the real goal here. Now let's take a look at IMF (Impact Mitigation Factor):
The first, and likely most important thing to note, is that the forces reflected back to the motor are very complex and governed by so many factors. But inertial effects play a large role in how forces are felt at the motor disk --> this is important because if forces aren't significantly felt at the motor itself, then proprioception becomes very difficult.
This has to do with inertia of the leg, but even more so in these kind of systems with Reflected Actuator Inertia (RAI). Design decisions centered around RAI will govern, in part, the highest loads felt by the gearbox, motor, and legs as well.
The general idea is, in unknown environments, maximizing overall actuator back-drivability is essential in mitigating impact forces.
So, the IMF can be defined as the normalized inertial back drivability of a mechanism and I think we're going to see what that means.
So from what it looks like through a brief skim. The IMF characterizes the back-drivability of the parts of the system we aren't currently designing. That's the LEGS and etc based on rigid actuators. This helps us design the robot itself. For designing the actuators - we need a different kind of metric for how back-drivable the gearbox is. For now, let's use the reflected inertia itself.
Cheetah 3 has a gear ratio of 7.67:1, we are planning an 18:1 gear ratio. Their motor must have 33N of output torque to actually generate the required 260Nm (or 230). This means we can't quantify what the inertia of the rotor on the cheetah is but we know the formula is.
Iref = Irotor*(ratio)^2
For our gearbox that would be:
Iref = 6.660E-05 kg*m^2*18^2 = 0.0215784 kgm^2
Now if we had the 7.67:1 gearbox ratio we could say:
Iref = 6.660E-05 kg*m^2*7.67^2 = 0.00391800474 kgm^2
With means unless the cheetah's motor has 5.12(x) the rotor inertia, then this gearbox will be 5x less backdrevable than the cheetah's gearbox which we are unsure of what that would do to proprioception ability. So this isn't really a good metric.
So what do we know about proprioception. We really need to be relating what kind of current the motor is feeling in A to the torque and then using geometry we can figure out the force at the end effector or on a link and vice versa. So let's try to estimate this motor's torque constant in slightly incorrect way but maybe it'll help us figure out how viable proprioception is.
And here's the raw data: https://motors.vex.com/vexpro-motors/falcon and we can import this data into google sheets and here that is: https://docs.google.com/spreadsheets/d/1SAolCNcKzTZapjXkRMjW7606vL5mqnhzKJ2jOJYhQsU/edit#gid=529860519
And now what we want to do is plot the torque vs the current, and what this yields is a very near perfect line of the form: 0.0183*x + -0.0275, R^2=1. So that does mean the line is an exact match (for the most part).
The slope of this line with units is 0.0183 Nm/A - that is the torque constant of the motor so now we have found it. But I think we're more interested in the inverse because what that will do is define our sensor resolution to some degree.
Kt = 0.0183 Nm/A Rs = 54.64 A/Nm
But this is without a gearbox right? So the question is what is the resolution of the current sensor, what is the publishing rate of the current sensor? For those questions, it's important to get the right answers so we need to contact CTRE themselves the makers of the Falcon 500 motor. For the question on what does the gearbox do to resolution, I think here is our answer. What we did was make a new section that multiplies the outputted torque by 18. So if we treated the whole gearbox as a single motor. What is now the torque constant, and what is the resolution. The new LOBF is: 0.33*x + -0.495
So this shows us the motor system now has the following characteristics:
Kt = 0.33 Nm/A Rs = 3A/Nm
Our resolution is down to 3 A/Nm from 55 A/Nm. So once CTRE gets back to us with the data on the current sensor we can properly quantify what is the precision to which we will be able to read the torque the motor is feeling. We thought of trying to estimate this with the Arduino Current Sensor Module but they're so different that it really is not worth trying.
This data makes a good amount of sense but we don't know what it means until we get the actual resolution on that sensor. This could mean the 18:1 gearbox is fine, it could mean it's too high of a ratio, we shall see. Either way, I have a feeling this system is going to need some cooling: http://www.ctr-electronics.com/downloads/pdf/Falcon%20500%20User%20Guide.pdf
Also, in the meantime, I found this on Reddit (dw just from a quick google). And I can't verify everything this person is saying because I haven't done the math. But, what he is saying makes some sense for the FRC power system so the reasons we chose the Falcon 500 again:
Integration with ROS is already ACTIVE.
It's an all-in one motor with motor controller and it has cooling.
But what this does mean is that we need to ensure that whatever robot we put this on, the power system can handle the current that this thing is going to be drawing. This is a 783W motor and if we run it at 12V - each motor will need 65.25A. For 12 motors that's 783A wow! That ends up at 10000W of total power this might be a bit much. Because that's 120V at 83A so we wouldn't be able to power this from a wall outlet - eek. This is a significant amount of power.
I will say, at no time should we be using 783W of total power. But we will need to limit the output on each of the motors which means it will limit the total output torque these motors can generate - something to look into but not just yet that's system thing not an individual actuator design thing at the moment. Basically - it's a good thing to note but we'll consider it later.
In the meantime, we're putting this here because we don't really want to go do a whole new post the CTRE gets back to us, we want to finish the calc here, but I do want to calculate the gear ratios and number of teeth for the 6:1 and 3:1 sections. Remember we have a gear module of 1mm which means # of teeth = PD in mm for the gear. Let's assume both sections have an outer diameter of 126mm.
For the 6:1 Gear Section: (126t + N)/N = 6 therefore N = 25.2, that doesn't work For the 3:1 Gear Section: (126t + N)/N = 3 therefore N = 63, that does work but the above doesn't. So let's look at the formulas: 5N = 126; 2N = 126, so we need a number that can be divided by both 5 and 2, the easy one is 10 so we can make the outer ring gear around 120 teeth. So that's: Ring Gear: 120t Sun Stage 1: 24t Planet(s) Stage 1: 48t = 120/2-24/2 Sun State 2: 60t Planet(s) Stage 2: 30t = 120/2-60/2
So that tells us what the gear teeth will be with a module of 1mm. And we also talked a few posts ago about how the gears would conform to the Sunderland system so we can create herringbone gears. Let's make some of these in CAD after determining how thick we want everything to be. Let's go back to our drawing:
So in the drawing we have space for just really one gear-set but this design is changing so I think what it's going to look more like is 15mm-20mm a gear. I want to say 20mm a gear so let's go ahead and generate the inner gears at least.
And then for the ring gear, we'll make these 1mm larger TOTAL than the inside gears just for tolerance reasons. So we've made those gears. We've done a lot of CAD today though so right now I kind of want to stop CAD'ing. In the meantime let's start looking at the bearings we might need after taking a look at how many gears each of these stages would have that's important. (So actually I think it's back to CAD). Once we start figuring out the bearings and shafts inside this part of the gearbox then what we can do is actually move to CAD-designing this component and then we can design the front face and the motor mount after.
Let's look at what we think this section will internally look like:
So the bearing we choose really depends on so many, but for right now the major choice is based on how many planet gears we can fit in each stage we can spec the bearing differently as that will change the force on the shaft. For lightness, we want to go with McMaster's smallest shaft diameter bearing and thats: https://www.mcmaster.com/oil-embedded-sleeve-bearings/ultra-low-friction-oil-embedded-sleeve-bearings/ between 3/16-1/4in shaft for the ultra low friction ones.
And them I'm guessing the next stage, if we put it into cad we'll actually see, but the next stage will have either 3-4 gears. We are looking at an output torque of 90Nm, which means the output stage having three gears would have each shaft holding 666N of force. That's more than acceptable I don't think we need to increase our planetary to include 4 gears. That also means for the first stage we're looking at 277N a shaft which is also not bad at all. So now we can spec the bearings knowing they need to hold about 700N a shaft. 700N = 157 lbf so we're looking at the 250lbs option which has a 1/4" shaft...
So why did we choose this option? That's part number: 1688K3. Because we want a really compact bearing (the smallest housing) it's rated for 250lbs of Dynamic Radial Load Capacity which is in our range, they are really cheap, and the Ultra-Low-Friction version is built for frequent starts/stops. Now we just need to check the RPM rating of these bearings. Now the 250lbs would only be a the force on the bearings at 0RPM, let's see what kind of torque we're producing at 120RPM which is the limit of the bearing at that load capacity. The motor would be traveling at 240RPM due to the gear ratios and the motor would be producing roughly 4.50048 Nm of torque. The output speed of the gearbox during this time would be 240RPM/18 = 13RPM = 1.36 rad/s. This is a little slow so we may want to find a similar rated embedded sleeve bearing with a higher RPM rating. We need to find a sleeve bearing that takes 250lbs of force at can run at roughly 1000 RPM which would give us an output rating of around 20rad/s max? So most of these embedded sleeve bearings are running are around 120RPM max speeds. These likely won't work for us. So why don't we go back to regular ball bearings with a static load capacity of like 165lbs?
So since we don't want damage to come to the bearing, we should use a shielded bearing or a sealed bearing with Static Load Capacity of 230lbs. So that's around 60355k44 or the 60355k702? According to this link: https://www.ibtinc.com/bearing-seals-vs-shields/ these can help us determine if we want a shielded or sealed bearing the only thing that might be in the gearbox besides dust is oil and if anything else gets in there we have bigger problems so the shielded should be fine. The shielded is for a 1/4" shaft and has an outer housing of 3/4" Will these fit in out gears?
This is what the gears look like with a 0.75in bore. They will work for all intents and purposes. But this does mean we need 6 bearings and shafts for them and the bearings will cost about 7.16*6 = 42.96, unfortunately if we go any lower in cost the bearings simply won't be rated for the applications.
So now let's look at tolerances - a bearing with an ABEC rating of 1 means it is manufactured to the least precision but this should be OK for our application at the moment.
And we'll have to look at how much shaft to buy and cut as well - or we'll look for 1/4" dowel pins as those tend to be shorter in length but we'll figure that out when we start figuring out the sizing of the housings. Sooo let's do that now!
So we also need to know things like what is the height of the gear teeth itself, and how much of a barrier in mm do we want in - between the stages, and what is our outer diameter. Let's say we give 1mm of clearance above the 120mm pitch diameter to actually account for the gear teeth that's 122mm, then we want to add a few mm of clearance before putting in a m8 bolt so that's 8+2+2 so that's 122+2*(12) = 122+24 = 146mm and a length of 50mm for this part.
And here is what that part starts to look like after the two 120t inner gear stages as well as the divider in the middle. And on top of that, holes for m8 bolts going through the whole thing. M8 might be a little big we actually might drop them down to M5s. That allows us to make the outer diameter even smaller too.
Yea, we changed that to M5 and look how much better that looks already. We're going with a 6 hole pattern that will bolt the whole gearbox together. This is what the RING gear setup looks like. So the next steps would be the Carrier, the gears, and the motor mount. For this we need to start CAD-ing the gears properly. I'm going to start with the first SUN gear that needs to go on the Falcon 500 shaft. That one is 24t.
It's really important to note that these gears, unlike normal gears, have a DIRECTION. That will be really important when it comes time to install them. We might need to make a gear flexible or something to have them be easier to install. We'll have to try it out and see, maybe make the gears out of TPU and have them JAM together and flex each other so there's non backlash at all. I don't know we'll figure it out later. We're going to design this initial version first. We should always design to manufacture but we're still in the conceptualization stage. We might just not to herringbone gears, go back to straight gears, and then shrink the size of the whole gearbox but we'll figure it out. Or we'll just do a single direction helical gear. We're saying it might be difficult to slot the herringbone gear in after manufacturing. But this is version one. OR we'll design a load-sharing herringbone: https://www.hindawi.com/journals/mpe/2018/7251645/ or split the ring gear on install or something or maybe we'll only split ONE of the gears. That could work too. Like split a single planetary gear instead of splitting all of them and increasing the chance of slop.
I want to note that we chose the herringbone design because these gears will KEEP THEMSELVES IN PLACE due to the fact that directions in which each half of the gear produces axial force is opposite so they won't jiggle around in the planetary or need to be held in by other components.
YAY! CTRE got back to us! Here's what Jacob said:
So here's the basic information about the current sensing system in the Falcon 500:
Sensor Resolution: 10mA Publishing Rate: 1/50ms = 20Hz
So we can update the publishing rate to something faster, is what he is saying, but we might not need to let's do some calculations on this. What this means is if, according to the above, we're looking at Rs = 3A/Nm, that's the inverse of the slope of the line of the torque-current curve. What this means is if the sensor has a resolution of 10mA that's a resolution of 0.01 amps. That means we can measure down to a rating of:
0.33 Nm/A * 0.01A resolution = 0.033Nm system resolution System Resolution = 0.033Nm
0.033 Nm is a very fine resolution and this system publishes at 20Hz. We might be able to up this to 100Hz even but we don't know if that will be necessary so let's try this for now.
So that's really what we are looking at :) all good numbers so far! Let's summarize the data:
Falcon 500 w/ Gearbox Data: Output Torque Max: 84.42 Nm Reflected Inertia: 0.0215784 kgm^2 Motor Torque Constant (Kt): 0.33 Nm/A Motor Torque Sensing Relation (1/Kt): 3A/Nm Motor Current Sensor Resolution: 0.01A System Torque Sensing Resolution: 0.033Nm Motor Torque Control Resolution: 0.033Nm Max System RPM: 354 RPM : 37 rad/s Ultimate Encoder Resolution: 36864 CPR (2048 for the motor)
NOTE: All this data is seen at the OUTPUT SHAFT of the entire actuator. We will verify all this data when we actually produce an actuator, and with hand-calcs later.
There some interesting stuff here on vex: https://motors.vex.com/#testing on how to do that.