RoboDK Forum
Python API - unexpected behavior of MoveL_Test- Printable Version

+- RoboDK Forum (//www.sinclairbody.com/forum)
+-- Forum: RoboDK (EN) (//www.sinclairbody.com/forum/Forum-RoboDK-EN)
+--- Forum: RoboDK API (//www.sinclairbody.com/forum/Forum-RoboDK-API)
+--- Thread: Python API - unexpected behavior of MoveL_Test (/Thread-Python-API-unexpected-behavior-of-MoveL-Test)



Python API - unexpected behavior of MoveL_Test-Yotamish-02-05-2019

Hi,
I'm using the 'MoveL_Test' method in the following way:
res= MoveL_Test(new_robot_joints,target.Pose())
when res = 0 (which is good, and means I would like to move the arm linearly), I see in the simulation that the arm position changes slightly after the MoveL_Test command (before I'm actually moving it (via 'MoveL')).

Is it a bug, or am I doing something wrong?
(if it helps, here is an example for the pos change:
from Pose(590.000, 0.000, 400.000, 180.000, -0.000, -90.000)
to Pose(442.954, 67.952, 400.000, 180.000, -0.000, -67.569))

Thanks!
Yotam


RE: Python API - unexpected behavior of MoveL_Test-Albert-02-06-2019

This is not an unexpected behavior. MoveL_Test requires passing the joints from the start point (first parameter) and the destination pose (second parameter).

I recommend you to take a look at the example attached.

This example creates a cube of targets that are followed by the robot in a program. It tries to use linear movements as much as possible (using MoveL_Test first to validate the linear movement this is possible). Although may want to follow all the points with linear movements, you may hit a singularity, collision or axis limit. Therefore, you may have to change the robot configuration when this happens by using a joint movement (MoveJ) instead of a linear movement (MoveL).




RE: Python API - unexpected behavior of MoveL_Test-Yotamish-02-07-2019

Hi Albert, thanks for your reply. I didn't quite understand it though. I'll try to make myself more clear.
I've attached a short code snippet of what I'm doing - going through all inverse kinematics solutions of the original pos, to verify if I have a linear path from origin to the pos destination.
I'm using MoveL_Test since in your documentation, all it does is validate if there is a linear path between current joint configuration and end pos of the gripper.

What happens is that after using MoveL_Test - the arm itself moves (hence the function does more than just validate if the motion is possible).

If this is indeed an expected behavior, I would really appreciate if you could tell me how I can verify in advance, using your API, if I can move the arm linearly from one gripper position to the other, while going through all inverse kinematics potential solutions. (since sometimes If I use your MoveL, and the joint config hits a singularity, I could have used another joint config for the same pos, without hitting this singularity)

提前谢谢!

inverse_k_sols =self._solveIK(self.arm) #returns all Inverse Kinematics solutions
foriinrange(0,len(inverse_k_sols)):

new_robot_joints = inverse_k_sols[:, i]
new_linear_move_res =self.arm.MoveL_Test(new_robot_joints, target.Pose())#FIXME: after this command, if the result is 0, the arm position is moved!
if(new_linear_move_res != -1)and(new_linear_move_res != -2):

self.arm.setJoints(new_robot_joints)
self.arm.MoveL(target)


的板块r issue is that the return value of MoveL_Test is sometimes 0 and sometimes 1 (in addition to -1 and -2).
Could you please state the difference if there is one?
Thanks a lot for the replies,
Yotam


RE: Python API - unexpected behavior of MoveL_Test-rotemK-04-17-2020

(02-07-2019, 08:41 AM)Yotamish Wrote:Hi Albert, thanks for your reply. I didn't quite understand it though. I'll try to make myself more clear.
I've attached a short code snippet of what I'm doing - going through all inverse kinematics solutions of the original pos, to verify if I have a linear path from origin to the pos destination.
I'm using MoveL_Test since in your documentation, all it does is validate if there is a linear path between current joint configuration and end pos of the gripper.

What happens is that after using MoveL_Test - the arm itself moves (hence the function does more than just validate if the motion is possible).

If this is indeed an expected behavior, I would really appreciate if you could tell me how I can verify in advance, using your API, if I can move the arm linearly from one gripper position to the other, while going through all inverse kinematics potential solutions. (since sometimes If I use your MoveL, and the joint config hits a singularity, I could have used another joint config for the same pos, without hitting this singularity)

提前谢谢!

inverse_k_sols =self._solveIK(self.arm) #returns all Inverse Kinematics solutions
foriinrange(0,len(inverse_k_sols)):

new_robot_joints = inverse_k_sols[:, i]
new_linear_move_res =self.arm.MoveL_Test(new_robot_joints, target.Pose())#FIXME: after this command, if the result is 0, the arm position is moved!
if(new_linear_move_res != -1)and(new_linear_move_res != -2):

self.arm.setJoints(new_robot_joints)
self.arm.MoveL(target)


的板块r issue is that the return value of MoveL_Test is sometimes 0 and sometimes 1 (in addition to -1 and -2).
Could you please state the difference if there is one?
Thanks a lot for the replies,
Yotam

Hi Albert and Yotamish,
I have been experiencing the same issues (the arm itself moves) when trying to use MoveJ_Test and MoveL_test for validation. Have you found a solution or a workaround?

Thanks a lot,
Rotem