Error at InverseKinematics Function
Actually I am testing my kinematics file with the real robot, but until now I have some bugs to improve.
In my *.c file I have, at kinematicsInverse() function:
joint[0] = th1 * 180 / PM_PI;
joint[1] = th2 * 180 / PM_PI;
joint[2] = th3 * 180 / PM_PI;
joint[3] = th4 * 180 / PM_PI;
joint[4] = th5 * 180 / PM_PI;
*(haldata->th1) = th1_m * 180 / PM_PI;
*(haldata->th2) = th2_m * 180 / PM_PI;
*(haldata->th3) = th3_m * 180 / PM_PI;
*(haldata->th4) = th4_m * 180 / PM_PI;
*(haldata->th5) = th5_m * 180 / PM_PI;
where *(haldata->thx) are aux variables for vismach simulation.
With this configuration everything is ok, but I need to change for the following conf:
joint[0] = th1_m * 180 / PM_PI;
joint[1] = th2_m * 180 / PM_PI;
joint[2] = th3_m * 180 / PM_PI;
joint[3] = th4_m * 180 / PM_PI;
joint[4] = th5_m * 180 / PM_PI;
*(haldata->th1) = th1 * 180 / PM_PI;
*(haldata->th2) = th2 * 180 / PM_PI;
*(haldata->th3) = th3 * 180 / PM_PI;
*(haldata->th4) = th4 * 180 / PM_PI;
*(haldata->th5) = th5 * 180 / PM_PI;
And with that conf, something are wrong. When I want work in world mode or MDI mode (invoking kins functions), appeared "Joint 4 following error".
I don't understand why was it happen. The thx_m have operations with thx variables, like:
th1_m = th1 / K1;
Thanks a lot.
Please Log in or Create an account to join the conversation.
And with that conf, something are wrong. When I want work in world mode or MDI mode (invoking kins functions), appeared "Joint 4 following error".
Have you checked that forwards and inverse kins come up with exactly the same answer?
I seem to recall that it is possible to call the kinematics functions from the command line, but haven't managed to find where I read that, so might be wrong.
Please Log in or Create an account to join the conversation.
Only I modify the inverse kins function, therefore something wrong is in that function.
I dont understand, I only added operation to the theta angles, like:
th1_m = th1 + 30;
I seem to recall that it is possible to call the kinematics functions from the command line, but haven't managed to find where I read that, so might be wrong.
I don't understand you. Are My *.c file wrong? If it is, how can I fix it?
Thanks a lot.
Please Log in or Create an account to join the conversation.
Hi Andy,Only I modify the inverse kins function, therefore something wrong is in that function.
The inverse kins and forwards kins functions need to match exactly.
So, if you send an XYZ of (0,0,0) to the inverse kins and it comes up with J1,J2,J3 of (1,2,3) then passing (1,2,3) to the forwards kins should return exactly (0,0,0)
Please Log in or Create an account to join the conversation.
I understand the problem. I have two kinematic configs. First one the normal manipulator kinematics, and second one the motor kinematics. The motors of the robot are placed outside of the origin coordinates system. Then, with the each DOF angle I have to calculate the quantity of movement of the actuator (motor).
My initial idea was to create auxiliary HAL variables for the inverse-kinematic() function. But, It's wrong because, the actuators has direct kinematic equation. Therefore, linuxcnc generated error, Joint 4 following error.
How can I integrate the robot kinematics and a relationship between motors?
Thanks.
Please Log in or Create an account to join the conversation.
Are you saying that the kinematics _changes_ ? Under what circumstances?
Please Log in or Create an account to join the conversation.
I have the inverse and forward kinematics of my robot arm of 5 DOF. Simulation results are everything fine. Now, I am working with the real robot, but the motors are placed outside of the origin system coordinates, because It is a old manipulator.
Then, I need modify the output kinematics signal to the real motors, because the relationship between joint angles and motor turns isn't linear. Like:
5th DOF motor turns depends of theta 2, theta 3 and theta 4.
4th DOF motor turns depends of theta 4 and theta 5.
And When I tried to modify the kinematics file, linuxcnc generated error because the relationship between joint angles and motor turns only affects the inverse kinematics.
I thing that I should set the correct scale for the step generator to give the correct steps per degree, but with non linear relationship between joint angles and motor turns I don't know how can I do that...... or through the HAL motion component, but again I don know how.....
Did you understand? I wish you can help me, thanks a lot again Andy.
Please Log in or Create an account to join the conversation.
The point is that any changes you include in the inverse kinematics also need to be mirrored in the forwards kinematics.
The kinematics converts motor rotations to cartesian coordinates and the reverse. The joint angles probably need to be calculated as an intermediate step, but they are neither an input nor an output of the kinematics in your case.
Please Log in or Create an account to join the conversation.
I think it, do a other kinematics, even I have the forward and inverse kinematics of the relationship between joint angles and motor turns. I did it in my original kinematics file, but it didn't run, I think because I have a error concept of the inputs and outputs kinematics parameters. I attached the file (irb.c).
Is It right ? In the same *.c file to have the relationship between motor turns and joint angles?
In the pic you can see the realtionship equations.
1. In the *.c file in the forward_kinematics() function I added the equations, where I took Joint like motor turns and I can calculate the joint angles (theta). With that I can calculate the forward kinematic parameters of the manipulator.
2. then, for inverse_kinematics() function I calculated the joint angles (theta) and after that I can calculate the motor turns and set joint values.
I don't know if it's right my logic, but when I want simulate, linuxcnc generates errors like "Joint 0 following error"....
I appreciate your help, thanks again.
Please Log in or Create an account to join the conversation.
Any idea?
Thanks a lot.
Please Log in or Create an account to join the conversation.