Jump to content
  • Advertisement
Sign in to follow this  

Rigid Body Dynamics

This topic is 4769 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello everyone! I have been reading Chris Hecker's tutorials on this subject. I pretty much understand it all. I came up with something that I can't figure out how to simulate, or what forces get applied. Imagine a conveyor made of rollers (like some beer stores have) and these rollers are powered by a motor that move them at 100 ft/min. Now when I put a case of beer on the conveyor, is there a force applied to the case to make it move? I don't think it does cause the case can't go faster than 100 ft/min cause the rollers are only going that fast right? So it's not accelerating the speed past this speed. so at some point the force is no longer applied?? This is a little confusing. I tried to think about the motor driving the rollers. It uses a magnetic force to turn the axle of the motor. This is a force right? But if the motor only reaches 100 ft/min, and is not accelerating past the speed, how can this be? Maybe the force is countering the friction of the load on the motor?? How would you simulate this situation? Brain21

Share this post

Link to post
Share on other sites
I had a very long response typed but but my power went out :( so you get the abridged version.

say the rollers are turning already at 100ft/min. When you place the box on the conveyor the rollers will try and accelerate it to 100ft/min as quickly as possible. one of two things will happen then:

1. The box will slip. Since it cannot be accelerated instantly to 100ft/min it will probably not grip the conveyor as the static friction is overcome and the rollers move independantly of the box. Of course, there is still dynamic friction so the box does get accelerated and it will eventally be moving at 100ft/sec.

2. The box does not slip at all. If the static friction is infinite (think interlocking gears) then the rollers will try and instantly acceelerate it to their speed, whhich requires infinite force. They pass this force requirement (minus inertia) on to the motor. Obviously, the motor has some mechanical and electrical limits that prevent it from supplying an infinite force. So the motor will apply as large a force as possible (or break if the box is massive enough). Since this force will not be infinite, the conveyor will slow down (essentially) instantly. Depending on how much force the motor supplied, and the mass of the box, it will probably be up to speed VERY quickly, at which point everything is running at the correct speed.

What happens in reality in case 2, that you will have a hard time modeling, is the deformation of the system. You have to wonder what happens when the box (moving at 0) is placed on the system (moving at 100). If it cannot slip, then everything must reach some intermediate speed right? Well in this case, something will deform. It is usually mainly the rubber surface that the box is riding on. Belts and chains will also stretch, shafts will twist, etc. So the box is not moving initially, but the motor still will be. This issue will quickly be resolved by transfering these forces to the box and motor in an attemt to equalize everyting. Since the motor is powered, and the box is just resisting acceleration, the speed of the conveyor will stay pretty close to normal and the box will be jerked up to speed. In industrial applications, motors are usually much more powerful than they need to be so they really can apply a very large force. So it is probable that the motor will not even be overworked.

So how does the motor handle these forces?

In the real world, the speed of a motor depends on an input signal and often uses some kind of feedback to regulate the speed. So you can effectivey model your motors as magic source turning at a constant speed. At some point, when a large force is a required, a motor will be unable to keep up its speed. At this point it will behave unpredictably.

There is friction on the axle, as well as whatever it is driving as you realized. When running at 100ft/min without some load, the energy used by the motor is nominal as only the amount required to overcome friction is needed. When the motor is driving something, it will draw more current and thus use more energy. You can fantasize about how that energy is supplied :).

The point is that for all intents and purposes, you should consider the motor to be ideal at some constant speed. With light boxes, and the low friction you get with rollers, the motor will see very little force. If you wanted to simulate jamming something into the conveyor, then you would have to determine how the motor behaves when not allowed to move, and when it will finally beak.

i probably missed something, so ask more if you need.

Share this post

Link to post
Share on other sites
That was a very good explination. It sounds like you're working in some kind of industry. I was wondering, if I apply the force to my box. In the program I'm writing, I calculate all forces on the box and then integrate for the velocity and position. I can't apply the force of the motor to the box itself right? Because then the box would accelerate past the speed of the conveyor. That would look bad. Sooo, maybe I just detect that that box is on that conveyor and affect the velocity of the box directly?? I thought I wasn't supose to so this directly, just touch the force and torque of objects in the world. This confuses me a little.


Share this post

Link to post
Share on other sites
The real problem is that the motor is a regulated supplier of force. The amount of force it applies depends on what it is driving. I havn't thought about how to actually simlate that. One thing that is safe to do is treat the convyor and motor as one entity moving at a fixed speed.

You don't want to affect the box's velocity directly. You want it to be able to slip if you made your rollers with a very low coefficient of friction, right?

Just as the motor supplies a varying force depending on its load, so must your conveyor.

Say you dropped the box onto a moving conveyor.
At every itteration when the box is on the conveyor, basically calculate how much force is neede to accelerate it to 100ft/sec over a very small amount of time. Add any other forces opposing this acceleration to this amount also. If this force is greater than the maximum force of kinetic friction between the box and rollers, then it will slip and the force applied will be equal to kinetic friction. accelerate the box using that force. When the box gets up to speed, The force needed (acceleration forces + other forces like air resistance) should eventually become less than kinetic friction and then the box will be brought up to speed with the conveyor. Static friction will apply in the future. And every update, the forces on the box will be air resistance and other forces. The forces opposing the direction of the conveyor should be then counteracted by a force from the conveyor. If the force needed is greater than static friction, then you are slipping again.

I have never tried to simluate this so I'm not sure if it will work or how far from real the behavior will be. I hope it helps though.

Share this post

Link to post
Share on other sites
Guest Anonymous Poster
Consider it this way:

the motor is limited in power. power is force times velocity. so make the power supplied by the motor a constant. Then force is a function of velocity. But the motor can't run at infinite speed or provide infinite force, so set some cutoffs to keep those reasonable.

now the conveyor has some resistance to moving. This is the friction in the rollers, and in the deformation of the belt. This friction likely goes up with velocity. Use a linear function, with an initial value to represent the resistance force as a function of velocity. The conveyor also has a mass, which will have inertia and resist changes in velocity.

This gives you:

1: Fmotor = MotorConstant * Vconv;
2: Fresist = ConveyorStaticConstant + ConveyorVelocityConstant * Vconv
3: Aconv = ( Fmotor - Fresist )/Mconv

This setup should give you something which when the motor is switched on, accelerate the conveyor up to some equilibrium speed, and then continue at the same velocity.

But now you put the box on the conveyor. If you assume the box doesnt slip, this means that the box and conveyor velocity are equal. Rather than stop the conveyor though, i suggest conserving momentum so that:

Vconv * Mconv = Vboxandconv * ( Mbox + Mconv )

Solve for Vboxandconv. This is your new starting velocity. Now in 3 you can use (Mconv + Mbox) instead of Mconv to get the new acceleration of the box+conveyor. This will eventually reach equilibrium at the same speed as before. Usually mechanical stuff has resistance which is in some way proportional to loading, so I would also suggest changing 2 to something like this:

Fresist = ConveyorStaticConstant + ConveyorVelocityConstant * Vconv
+ ConveyorLoadConstant * load

which will cause the top speed to be reduced based on the load on the conveyor.

Now if you want to be really clever, you can set the power supplied to the motor as a variable (with some limits of course) which can be changed. Then you can feed the velocity of the conveyor back into a control which determines the power supplied to the conveyor, in an attempt to keep it running at a constant velocity no matter how many boxes you place on it. And if you manage that you should consider mechanical engineering as a career, because I when worked in a mine where that exact problem blew the entire mine power system and shut down production for a week, and the guy who's job it was (an engineer) couldn't solve it :)


Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!