Double Cart Inverted Pendulum Mechanics

AI Thread Summary
The discussion centers on the mechanics of a double cart inverted pendulum system, where a second cart is added beneath the original cart with a pole. The original C++ code calculates the state of the system based on forces applied to the cart, including the effects of gravity and the pole's dynamics. The user attempts to modify the system by incorporating the lower cart's forces into the calculations for the upper cart, questioning the accuracy of this approach. There is confusion about the role of the "temp" variable in the equations, particularly regarding its units and how it relates to the acceleration of the system. Clarification on the physics behind the original code and the modifications is sought for a better understanding of the system's dynamics.
CandidClam
Messages
2
Reaction score
0

Homework Statement



Consider an inverted pendulum system as described in https://en.wikipedia.org/wiki/Inverted_pendulum. The system consists of a cart with mass M to which a pole of length l and mass m is affixed via a pivot point. Forces applied to the cart move it along a track. At any point in time the system can be described by the angle of the pole theta (radians, zero refers to an upright pole), the angular velocity of the pole theta_dot, the position of the cart along the track x, and the cart's velocity x_dot.

The following C++ code updates the state of the system given a force input and a timestep size tau:

Code:
    float temp =  (force + m * l * theta_dot * theta_dot * sin(theta)) / (M+m);
    float thetaacc = (gravity * sin(theta) - cos(theta) * temp) / (l * ((4.0/3.0) - m * cos(theta) * cos(theta) / (M+m)));
    float xacc = temp - m * l * thetaacc * cos(theta) / (M+m);

    // Update the four state variables, using Euler's method.
    x += tau * x_dot;
    x_dot += tau * xacc;
    theta += tau * theta_dot;
    theta_dot += tau * thetaacc;

This code comes from a reasonably reliable source so I assume it is correct. I wish to modify this system by adding a second cart atop which the first cart rests. This second, lower cart rests upon the track and has no pole, forming a stack of carts. Forces may now be applied independently to each cart.

The Attempt at a Solution



This attempted solution first calculates the movement of the lower cart based the force applied to the lower cart (lowerCartForce) then applies the lower cart's acceleration to the temp variable. (lower_x and lower_x_dot refer respectively to the position and velocity of the lower cart)

Code:
    // Lower cart physics calculations. This assumes wheel rigidity -- eg lower cart is not
    // influenced by movements of the upper cart.
    float lower_xacc = lowerCartForce / (lowerCartMass + M + m);
    lower_x += tau * lower_x_dot;
    lower_x_dot += tau * lower_xacc;

    // This next line is the only one that differs from the last code block
    float temp = lower_xacc + (force + m * l * theta_dot * theta_dot * sin(theta)) / (M+m);
    float thetaacc = (gravity * sin(theta) - cos(theta) * temp) / (l * ((4.0/3.0) - m * cos(theta) * cos(theta) / (M+m)));
    float xacc = temp - m * l * thetaacc * cos(theta) / (M+m);

    // Update the four state variables, using Euler's method.
    x += tau * x_dot;
    x_dot += tau * xacc;
    theta += tau * theta_dot;
    theta_dot += tau * thetaacc;

My question to these forums: Is the physics of the above system accurate? Specifically have I correctly transferred the lower cart forces to the upper cart?
 
Physics news on Phys.org
You will get better advice here if you first describe how you think the original code works and then how you intend to modify it - paying attention to the physics, not C++.
 
The original code was not my own creation and I've tried to puzzle through it several times without much success. However, here's an attempt:

The second and third lines of the code are calculating the acceleration of the pole and cart. I'm still trying to figure out what the temp variable actually represents. The 3rd line computes cart acceleration so the units should be m/s^2. Since temp appears in the 3rd line followed by subtraction, I feel that it's units should also be m/s^2. If anyone is able to understand what exactly temp is computing, that would in itself be a great help.
 
Thread 'Collision of a bullet on a rod-string system: query'
In this question, I have a question. I am NOT trying to solve it, but it is just a conceptual question. Consider the point on the rod, which connects the string and the rod. My question: just before and after the collision, is ANGULAR momentum CONSERVED about this point? Lets call the point which connects the string and rod as P. Why am I asking this? : it is clear from the scenario that the point of concern, which connects the string and the rod, moves in a circular path due to the string...
Thread 'A cylinder connected to a hanged mass'
Let's declare that for the cylinder, mass = M = 10 kg Radius = R = 4 m For the wall and the floor, Friction coeff = ##\mu## = 0.5 For the hanging mass, mass = m = 11 kg First, we divide the force according to their respective plane (x and y thing, correct me if I'm wrong) and according to which, cylinder or the hanging mass, they're working on. Force on the hanging mass $$mg - T = ma$$ Force(Cylinder) on y $$N_f + f_w - Mg = 0$$ Force(Cylinder) on x $$T + f_f - N_w = Ma$$ There's also...
Back
Top