OrebroUniversity / hiqp

GNU General Public License v3.0
9 stars 2 forks source link

Gurobi failure when using dynamics with influence zone #18

Closed rtkg closed 7 years ago

rtkg commented 7 years ago

Gurobi does not seem to be able to handle the std::numeric_limits::infinity() bound to which e_dotstar is set when e_ is outside the influence zone. It fails with status code 12 ('Optimization was terminated due to unrecoverable numerical difficulties') in such situations.

rtkg commented 7 years ago

How about removing the influence zone from the first order dynamics and the min-jerk and, instead, implement a separate non-linear dynamics as de=-sinh(ke). The hyperbolic sine exhibits the behaviour we'd like as, by means of tuning a single parameter k, it can be made very large with a sharp increase while still being continuous and stable. Such dynamics might even be useful for equality tasks. Also, this might be a nice candidate to replace the current first order behaviour for the joint limit avoidance task.

neckutrek commented 7 years ago

Sounds good.

Le 13 déc. 2016 23:43, "Robert Krug" notifications@github.com a écrit :

How about removing the influence zone from the first order dynamics and the min-jerk and, instead, implement a separate non-linear dynamics as de=-ksinh(e). The hyperbolic sine exhibits the behaviour we'd like as, by means of tuning a single parameter k, it can be made very large with a sharp increase while still being continuous and stable. Such dynamics might even be useful for equality tasks. Also, this might be a nice candidate to replace the current first order behaviour for the joint limit avoidance task.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/neckutrek/hiqp/issues/18#issuecomment-266885943, or mute the thread https://github.com/notifications/unsubscribe-auth/ADmjhchMWa9cAuIzAfLwypnJEoCGLocSks5rHx-XgaJpZM4LMFai .

rtkg commented 7 years ago

Also -K*e^3 might be an interesting candidate. It has an inflection point at e=0 which might be useful for slow convergence

rtkg commented 7 years ago

Added a 1st order cubic dynamics as above on feature-collision-avoidance:
hiqp_core/include/hiqp/tasks/dynamics_first_order_cubic.h hiqp_core/src/tasks/dynamics_first_order_cubic.cpp

neckutrek commented 7 years ago

Hmm. since d/de de = 0 when e=0 the task would never converge right? the same applies for sinh? sinh makes sense though as there's a cutoff, something that de=-ke does not have. In what applications would -ke^3 be applicable when -ke isn't?

neckutrek commented 7 years ago

I'll add sinh and remove influence zone from -ke on devel.

neckutrek commented 7 years ago

It does make sense in practice I saw. I'll merge this into devel.

neckutrek commented 7 years ago

Actually, -ke^3 is not a first order dynamics, but a third order dynamics without first and second order terms, right? So one could think of de*=-ae^3-be^2-ce. However:

So as I see it, either a cubic dynamics -ke^3 is added (i.e. refactor TDynFirstOrderCubic -> TDynCubic), or TDynFirstOrder -> TDynThirdOrder with parameters for setting two positive values as parameters forming de*=-ae^3-be for positive constants a,b. Since the linearity in first-order dynamics is often desired, I think the first option is best.

Keep TDynFirstOrder and refactor the name of TDynFirstOrderCubic -> TDynCubic?

rtkg commented 7 years ago

Mmm, the order in dynamical systems refers to the order of the highest derivative. It would probably be more accurate to call the current first order dynamics 'linear first order'. Also, e.g., de=-sinh(ke) is a (nonlinear) first order system.

Indeed, you could come up with a general polynomial describing your system. However, I guess symmetry is, as you said one desired property.

Basically, I'd agree with your suggestion of the first option. Regarding naming - I leave it up to you. Additional options could also be TDynFirstOrder -> TDynFirstOrderLinear and keep TDynFirstOrderCubic or TDynFirstOrder -> TDynLinear and TDynFirstOrderCubic -> TDynCubic assuming that we only deal with first order systems anyway.

neckutrek commented 7 years ago

I see, ok. Thanks.


Med vänlig hälsning / Best regards, Marcus A Johansson +46 (0)70 315 73 77

2016-12-14 11:53 GMT+01:00 Robert Krug notifications@github.com:

Mmm, the order in dynamical systems refers to the order of the highest derivative. It would probably be more accurate to call the current first order dynamics 'linear first order'. Also, e.g., de=-sinh(ke) is a (nonlinear) first order system.

Indeed, you could come up with a general polynomial describing your system. However, I guess symmetry is, as you said one desired property.

Basically, I'd agree with your suggestion of the first option. Regarding naming - I leave it up to you. Additional options could also be TDynFirstOrder -> TDynFirstOrderLinear and keep TDynFirstOrderCubic or TDynFirstOrder -> TDynLinear and TDynFirstOrderCubic -> TDynCubic assuming that we only deal with first order systems anyway.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/neckutrek/hiqp/issues/18#issuecomment-267004452, or mute the thread https://github.com/notifications/unsubscribe-auth/ADmjhb8uXpMSGjI57b9AA0VtjbomJc1cks5rH8qwgaJpZM4LMFai .

neckutrek commented 7 years ago

Naming of task dynamics and definitions has been updated. TDynLinear, TDynCubic and TDynHyperSin are now available and are tested once.

Close issue?