Reputation: 682
This a draft of a 3D model I’m working with, and I would like to simulate its behaviour using python language. I have been researching on the best implementation for this simulation, but I found nothing that could fit real motion. I have tried analytical solving and failed because of uncertainity of certain parameters (certain errors for arm length) when those were measured.
I want to simulate the motion produced by a revolute joint and transfered to a system which is similar to the one depicted on the scheme.
At a certain time, the system might use the revolute joint and then turn to the following status.
Both status for the system are depicted on the next scheme.
An easy simplification with DH parameters would be:
The important thing is how to calculate the position and the angles of both non-controlled joints so that receptor joint angle (fixed point) can be calculated.
It is not only an inverse kinematics problem. It is necessary to consider the motion restrictions too. The motion must be determined by the revolute joint angle, the lenght of the links and the fixed point position and length.
The red circle in the next image depicts the possible positions for the second non-controlled point.
How would you simulate this motion?
Upvotes: 2
Views: 1091
Reputation: 61
There are one problematic position, where intersections of two circles (described below) has one point. In this situation (we suppose it is planar situation (gravity is perpendicular to all arm) and static situation) there isn't any force, which move with second non-controlled joint. In dynamic we choose another solution for next step.
When intersection isn't exist, that situation dosn't exist and revolute joint cannot move to this position.
We obtain (trivialy) motion restrictions when we calculate all position and determine position where doesn't exist intersection.
Do you obtain end position of non-fixed point directly?
Older ansewer:
Simulate motion:
Calculate:
First compute position of first non-controlled point (higher)
x_2 = x_1 + l_12 cos(Theta_1),
y_2 = y_1 + l_12 sin(Theta_2),
where X_1(x_1, y_1) is position of revolute point, X_2(x_2, y_2) is position of first non-controlled point and l_12 is length between X_1 and X_2
Step 2 has two solution. We choose one of then. To simulate motion, we must choose "same solution".
Compute angle from two points:
alpha = math.atan2((y_2-y_1)/(x_2-x_1))
Upvotes: 1