IkFast Singularity handling

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

IkFast Singularity handling

Joachim
Hallo Rosen, Hallo Openrave community,
I’m working with a Schunk Powerball using the IPA-Ros-Package [1]. First of all: Thank you for providing IKfast, that produces a powerful solver for inverse kinematics. My problem with the powerball-lwa4p-solver: The start-position (all joints equals zero) of the arm returns no solution.
So I’d like to know, how I could implement a solution for end-effektor-positions inside the singularity on the z-axis (with px==py==0).
I’ve read in the ChangeLog for 0.9, that IkFast can now detect aligned axes and give inifinite solutions; is this related to singularities or other types of kinematic chains?
I could not reproduce the behaviour with the Mitsubishi PA10-Example: Recent changes from git produce 8 or even 16 solutions for x=y=0, z=1; but don’t give infinite solutions there (free joints = 0). What are your development plans in this direction?

Thank you

Joachim

[1] https://github.com/ipa320/schunk_robots
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IkFast Singularity handling

Rosen Diankov
Administrator
Dear Joachim,

have you tried ikfast v67 on the most recent openrave master branch? we recently made several improvements that will allow detection of the all 0s singularity.

sometimes ikfast returns infinite solutions, sometimes it doesn't. if you really want a particular singularity case to be solved, send us the COLLADA file and robot joint values, and we can check.

best,
rosen,



2013/7/31 Joachim <[hidden email]>
Hallo Rosen, Hallo Openrave community,
I’m working with a Schunk Powerball using the IPA-Ros-Package [1]. First of
all: Thank you for providing IKfast, that produces a powerful solver for
inverse kinematics. My problem with the powerball-lwa4p-solver: The
start-position (all joints equals zero) of the arm returns no solution.
So I’d like to know, how I could implement a solution for
end-effektor-positions inside the singularity on the z-axis (with
px==py==0).
I’ve read in the ChangeLog for 0.9, that IkFast can now detect aligned axes
and give inifinite solutions; is this related to singularities or other
types of kinematic chains?
I could not reproduce the behaviour with the Mitsubishi PA10-Example: Recent
changes from git produce 8 or even 16 solutions for x=y=0, z=1; but don’t
give infinite solutions there (free joints = 0). What are your development
plans in this direction?

Thank you

Joachim

[1] https://github.com/ipa320/schunk_robots




--
View this message in context: http://openrave-users-list.185357.n3.nabble.com/IkFast-Singularity-handling-tp4026646.html
Sent from the OpenRAVE Users List mailing list archive at Nabble.com.

------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Openrave-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/openrave-users


------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Openrave-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/openrave-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IkFast Singularity handling

Joachim
Hallo Rosen,
yes, I'm using the recent v67 (git d2e51ed4).
Please find the model of Powerball LWA4p attached: lwa4p.dae

The pose for j_i=0 (-> x=y=0, z=1.265) is not found nor are other poses on the z-Axis:

From the command-line I get:
./ik_lwa4p_6d 1 0 0 0.  0 1 0 0.  0 0 1 1.
Failed to get ik solution

but:
./ik_lwa4p_6d 1 0 0 0.001  0 1 0 0.  0 0 1 1.
Found 8 ik solutions:
sol0 (free=0): 0.000000000000000, 0.840589285418126, 1.872416800557861, [...],
sol1 (free=0): 0.000000000000000, 0.840589285418126, 1.872416800557861, [...],
sol2 (free=0): 3.141592653589790, 0.845717479307705, 1.872416800557861, [...],
sol3 (free=0): 3.141592653589790, 0.845717479307705, 1.872416800557861, [...],
sol4 (free=0): 0.000000000000000, -0.845717479307705, -1.872416800557861, -[...],
sol5 (free=0): 0.000000000000000, -0.845717479307705, -1.872416800557861, -[...],
sol6 (free=0): 3.141592653589790, -0.840589285418126, -1.872416800557861, -[...],
sol7 (free=0): 3.141592653589790, -0.840589285418126, -1.872416800557861, -[...],

The model was generated using the ros-collada_urdf-Converter with some floating-point values cleaned up afterwards.
Do you need additional information?

Best Regards
Joachim
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IkFast Singularity handling

Rosen Diankov
Administrator
hi Joachim,

yup, i see the problem. i'm surprised ikfast didn't catch that divide by zero exception, i'll see what i can do.

rosen,



2013/7/31 Joachim <[hidden email]>
Hallo Rosen,
yes, I'm using the recent v67 (git d2e51ed4).
Please find the model of Powerball LWA4p attached:  lwa4p.dae
<http://openrave-users-list.185357.n3.nabble.com/file/n4026648/lwa4p.dae>

The pose for j_i=0 (-> x=y=0, z=1.265) is not found nor are other poses on
the z-Axis:

>From the command-line I get:
./ik_lwa4p_6d 1 0 0 0.  0 1 0 0.  0 0 1 1.
Failed to get ik solution

but:
./ik_lwa4p_6d 1 0 0 0.001  0 1 0 0.  0 0 1 1.
Found 8 ik solutions:
sol0 (free=0): 0.000000000000000, 0.840589285418126, 1.872416800557861,
[...],
sol1 (free=0): 0.000000000000000, 0.840589285418126, 1.872416800557861,
[...],
sol2 (free=0): 3.141592653589790, 0.845717479307705, 1.872416800557861,
[...],
sol3 (free=0): 3.141592653589790, 0.845717479307705, 1.872416800557861,
[...],
sol4 (free=0): 0.000000000000000, -0.845717479307705, -1.872416800557861,
-[...],
sol5 (free=0): 0.000000000000000, -0.845717479307705, -1.872416800557861,
-[...],
sol6 (free=0): 3.141592653589790, -0.840589285418126, -1.872416800557861,
-[...],
sol7 (free=0): 3.141592653589790, -0.840589285418126, -1.872416800557861,
-[...],

The model was generated using the ros-collada_urdf-Converter with some
floating-point values cleaned up afterwards.
Do you need additional information?

Best Regards
Joachim



--
View this message in context: http://openrave-users-list.185357.n3.nabble.com/IkFast-Singularity-handling-tp4026646p4026648.html
Sent from the OpenRAVE Users List mailing list archive at Nabble.com.

------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Openrave-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/openrave-users


------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Openrave-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/openrave-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IkFast Singularity handling

Rosen Diankov
Administrator
dear joachim,

we just fixed the atan2 degenerate case handling, thanks for pointing it out! this affected every single robot in some way.

the new ikfast version is v68

rosen,



2013/7/31 Rosen Diankov <[hidden email]>
hi Joachim,

yup, i see the problem. i'm surprised ikfast didn't catch that divide by zero exception, i'll see what i can do.

rosen,



2013/7/31 Joachim <[hidden email]>
Hallo Rosen,
yes, I'm using the recent v67 (git d2e51ed4).
Please find the model of Powerball LWA4p attached:  lwa4p.dae
<http://openrave-users-list.185357.n3.nabble.com/file/n4026648/lwa4p.dae>

The pose for j_i=0 (-> x=y=0, z=1.265) is not found nor are other poses on
the z-Axis:

>From the command-line I get:
./ik_lwa4p_6d 1 0 0 0.  0 1 0 0.  0 0 1 1.
Failed to get ik solution

but:
./ik_lwa4p_6d 1 0 0 0.001  0 1 0 0.  0 0 1 1.
Found 8 ik solutions:
sol0 (free=0): 0.000000000000000, 0.840589285418126, 1.872416800557861,
[...],
sol1 (free=0): 0.000000000000000, 0.840589285418126, 1.872416800557861,
[...],
sol2 (free=0): 3.141592653589790, 0.845717479307705, 1.872416800557861,
[...],
sol3 (free=0): 3.141592653589790, 0.845717479307705, 1.872416800557861,
[...],
sol4 (free=0): 0.000000000000000, -0.845717479307705, -1.872416800557861,
-[...],
sol5 (free=0): 0.000000000000000, -0.845717479307705, -1.872416800557861,
-[...],
sol6 (free=0): 3.141592653589790, -0.840589285418126, -1.872416800557861,
-[...],
sol7 (free=0): 3.141592653589790, -0.840589285418126, -1.872416800557861,
-[...],

The model was generated using the ros-collada_urdf-Converter with some
floating-point values cleaned up afterwards.
Do you need additional information?

Best Regards
Joachim



--
View this message in context: http://openrave-users-list.185357.n3.nabble.com/IkFast-Singularity-handling-tp4026646p4026648.html
Sent from the OpenRAVE Users List mailing list archive at Nabble.com.

------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Openrave-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/openrave-users



------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Openrave-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/openrave-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IkFast Singularity handling

Joachim
Hallo Rosen,
trying to re-generate the ikfast solver from current git master does no longer detect singularities for the powerball lwa4p robot. Back in 2013  you've fixed all 0's singularity but in the meantime it stopped working again. z-axis-singularity does not work either (x=y=0).
Do you have any hints, how I could debug ikfast.py?

git bisect tells me that 10cc36 is the first commit, where all 0's singularity stopped working:
./ik 1 0 0 0.0  0 1 0 0.  0 0 1 1.265
Failed to get ik solution

and for tcp on the z-axis (x=y=0):
./ik_2ed350 1 0 0 0.0  0 1 0 0.  0 0 1 1.
Failed to get ik solution
2ed350 is the first bad commit. The attached patch fixes the z-axis-problem, but not the fully stretched arm. What's the intention of that else branch?

Thank you for your work and best regards
Joachim

Robot model: <http://openrave-users-list.185357.n3.nabble.com/file/n4026648/lwa4p.dae>

diff --git a/python/ikfast.py b/python/ikfast.py
index 4f392e4..fe2c9dd 100644
--- a/python/ikfast.py
+++ b/python/ikfast.py
@@ -6422,8 +6422,6 @@ class IKFastSolver(AutoReloader):
                             NewEquations.append(neweq)
                     else:
                         NewEquations.append(neweq)
-            else:
-                NewEquations.append(eq)
         return NewEquations
     
     def SolveAllEquations(self,AllEquations,curvars,othersolvedvars,solsubs,endbranchtree,currentcases=None,unknownvars=None, currentcasesubs=None, canguessvars=True):


Output from generated solver with patch applied (same as before 2ed350):
./ik_lwa4p_6d 1 0 0 0.0  0 1 0 0.0 0 0 1 1.
Found 16 ik solutions:
sol0 (free=0): 0.00000000000, 0.84315528228, 1.87242170584 [...]
sol1 (free=0): 0.00000000000, 0.84315528228, 1.87242170584 [...]
sol2 (free=0): 1.57079632679, 0.84315528228, 1.87242170584 [...]
sol3 (free=0): 1.57079632679, 0.84315528228, 1.87242170584 [...]
sol4 (free=0): 3.14159265358, 0.84315528228, 1.87242170584 [...]
sol5 (free=0): 3.14159265358, 0.84315528228, 1.87242170584 [...]
sol6 (free=0): -1.57079632679, 0.84315528228, 1.872421705844 [...]
sol7 (free=0): -1.57079632679, 0.84315528228, 1.872421705844 [...]
sol8 (free=0): 0.00000000000, -0.84315543714, -1.87242170584 [...]
sol9 (free=0): 0.00000000000, -0.84315543714, -1.87242170584 [...]
sol10 (free=0): 1.57079632679, -0.84315543714, -1.8724217058 [...]
sol11 (free=0): 1.57079632679, -0.84315543714, -1.8724217058 [...]
sol12 (free=0): 3.14159265358, -0.84315543714, -1.8724217058 [...]
sol13 (free=0): 3.14159265358, -0.84315543714, -1.8724217058 [...]
sol14 (free=0): -1.57079632679, -0.84315543714, -1.872421705 [...]
sol15 (free=0): -1.57079632679, -0.84315543714, -1.872421705 [...]

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: IkFast Singularity handling

Rosen Diankov
Administrator
Dear Joachim,

Thanks for the notice.

Actually the old way was not correct. If you notice it only gives you solutions of j0 at 0, pi/2, and -pi/2. When all joint values are zero, then there are three joint axes aligning, which means j0 is a free variable that can be freely chosen and j3 or j5 can compensate for it. In the past we were just setting a random solution and seeing if it checked out, but this was actually causing us to hallucinate wrong solutions in certain mechanisms, so I turned it off.

Recent versions of ikfast, especially the most recent committed yesterday, are much more  stable and robust to these situations, however I still need to figure out a good way of identifying that all these axes are aligned and that there's a free joint.

It is true that 4 solutions are better than no solutions, so once I can figure out a better way of turning the feature back on without hallucinating wrong solutions, I'll put it back in.

Thanks for the patch, but that's very dangerous and would mean less mechanisms can be solved for completely.

Sincerely,
Rosen,


2015-07-28 15:39 GMT+09:00 Joachim <[hidden email]>:
Hallo Rosen,
trying to re-generate the ikfast solver from current git master does no
longer detect singularities for the powerball lwa4p robot. Back in 2013
you've fixed all 0's singularity but in the meantime it stopped working
again. z-axis-singularity does not work either (x=y=0).
Do you have any hints, how I could debug ikfast.py?

git bisect tells me that 10cc36 is the first commit, where all 0's
singularity stopped working:
./ik 1 0 0 0.0  0 1 0 0.  0 0 1 1.265
Failed to get ik solution

and for tcp on the z-axis (x=y=0):
./ik_2ed350 1 0 0 0.0  0 1 0 0.  0 0 1 1.
Failed to get ik solution
2ed350 is the first bad commit. The attached patch fixes the z-axis-problem,
but not the fully stretched arm. What's the intention of that else branch?

Thank you for your work and best regards
Joachim

Robot model:
<http://openrave-users-list.185357.n3.nabble.com/file/n4026648/lwa4p.dae>

diff --git a/python/ikfast.py b/python/ikfast.py
index 4f392e4..fe2c9dd 100644
--- a/python/ikfast.py
+++ b/python/ikfast.py
@@ -6422,8 +6422,6 @@ class IKFastSolver(AutoReloader):
                             NewEquations.append(neweq)
                     else:
                         NewEquations.append(neweq)
-            else:
-                NewEquations.append(eq)
         return NewEquations

     def
SolveAllEquations(self,AllEquations,curvars,othersolvedvars,solsubs,endbranchtree,currentcases=None,unknownvars=None,
currentcasesubs=None, canguessvars=True):


Output from generated solver with patch applied (same as before 2ed350):
./ik_lwa4p_6d 1 0 0 0.0  0 1 0 0.0 0 0 1 1.
Found 16 ik solutions:
sol0 (free=0): 0.00000000000, 0.84315528228, 1.87242170584 [...]
sol1 (free=0): 0.00000000000, 0.84315528228, 1.87242170584 [...]
sol2 (free=0): 1.57079632679, 0.84315528228, 1.87242170584 [...]
sol3 (free=0): 1.57079632679, 0.84315528228, 1.87242170584 [...]
sol4 (free=0): 3.14159265358, 0.84315528228, 1.87242170584 [...]
sol5 (free=0): 3.14159265358, 0.84315528228, 1.87242170584 [...]
sol6 (free=0): -1.57079632679, 0.84315528228, 1.872421705844 [...]
sol7 (free=0): -1.57079632679, 0.84315528228, 1.872421705844 [...]
sol8 (free=0): 0.00000000000, -0.84315543714, -1.87242170584 [...]
sol9 (free=0): 0.00000000000, -0.84315543714, -1.87242170584 [...]
sol10 (free=0): 1.57079632679, -0.84315543714, -1.8724217058 [...]
sol11 (free=0): 1.57079632679, -0.84315543714, -1.8724217058 [...]
sol12 (free=0): 3.14159265358, -0.84315543714, -1.8724217058 [...]
sol13 (free=0): 3.14159265358, -0.84315543714, -1.8724217058 [...]
sol14 (free=0): -1.57079632679, -0.84315543714, -1.872421705 [...]
sol15 (free=0): -1.57079632679, -0.84315543714, -1.872421705 [...]





--
View this message in context: http://openrave-users-list.185357.n3.nabble.com/IkFast-Singularity-handling-tp4026646p4027516.html
Sent from the OpenRAVE Users List mailing list archive at Nabble.com.

------------------------------------------------------------------------------
_______________________________________________
Openrave-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/openrave-users


------------------------------------------------------------------------------

_______________________________________________
Openrave-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/openrave-users
Loading...