# KDL - Trajectory generation with non-zero initial velocity

Submitted by phamelin on Fri, 2010-01-29 15:48 |

Hi,

I need to modify a trajectory profile while it's not completely done. I'm

currently using the VelocityProfile_Trap class to generate a trajectory but

unfortunately I see no way to force an initial velocity. I saw the

VelocityProfile_TrapHalf class but it seems that the initial velocity must

be egal to the desired maximum velocity. Is there a way to do that with the

current classes of KDL or I would need to code a new type of profile?

Thank you,

Philippe Hamelin

»

- Login to post comments

## KDL - Trajectory generation with non-zero initial velocity

On Fri, 29 Jan 2010, Philippe Hamelin wrote:

> I need to modify a trajectory profile while it's not completely done. I'm currently using the

> VelocityProfile_Trap class to generate a trajectory but unfortunately I see no way to force an

> initial velocity. I saw the VelocityProfile_TrapHalf class but it seems that the initial velocity

> must be egal to the desired maximum velocity. Is there a way to do that with the current classes

> of KDL or I would need to code a new type of profile?

The algorithm to work with arbitrary initial or end velocities is _much_

more complex than the current one, and it does not have a closed form

solution. Even the numerical solution is _very_ complex... So what you are

searching for is not so easy :-( (I have spent/lost several months on that

problem when I was a PhD student...)

We have some people working on better algorithms, via (convex)

optimization, but those algorithms are not yet mature...

Herman

## KDL - Trajectory generation with non-zero initial velocity

We already have a working implementation of a "n-axis" generic trajectory

generation in our library called Microb (

http://www.robotique.ireq.ca/microb/). However, it uses the matrix library

(Vectmath) of Microb of that I wouldn't like to be dependant in my Orocos

program. I think that I will try to re-code this class using only stl

containers. Thus, maybe we will submit it to KDL in the futur.

Philippe

2010/1/29 Herman Bruyninckx <Herman [dot] Bruyninckx [..] ...>

> On Fri, 29 Jan 2010, Philippe Hamelin wrote:

>

> I need to modify a trajectory profile while it's not completely done. I'm

>> currently using the

>> VelocityProfile_Trap class to generate a trajectory but unfortunately I

>> see no way to force an

>> initial velocity. I saw the VelocityProfile_TrapHalf class but it seems

>> that the initial velocity

>> must be egal to the desired maximum velocity. Is there a way to do that

>> with the current classes

>> of KDL or I would need to code a new type of profile?

>>

>

> The algorithm to work with arbitrary initial or end velocities is _much_

> more complex than the current one, and it does not have a closed form

> solution. Even the numerical solution is _very_ complex... So what you are

> searching for is not so easy :-( (I have spent/lost several months on that

> problem when I was a PhD student...)

>

> We have some people working on better algorithms, via (convex)

> optimization, but those algorithms are not yet mature...

>

> Herman

>

## KDL - Trajectory generation with non-zero initial velocity

On Fri, 29 Jan 2010, Philippe Hamelin wrote:

> We already have a working implementation of a "n-axis" generic trajectory generation in our

> library called Microb (http://www.robotique.ireq.ca/microb/). However, it uses the matrix library

> (Vectmath) of Microb of that I wouldn't like to be dependant in my Orocos program. I think that I

> will try to re-code this class using only stl containers. Thus, maybe we will submit it to KDL in

> the futur.

Perfect! Do you really have closed form solution?!?! :-)

Herman

>

> Philippe

>

> 2010/1/29 Herman Bruyninckx <Herman [dot] Bruyninckx [..] ...>

> On Fri, 29 Jan 2010, Philippe Hamelin wrote:

>

> I need to modify a trajectory profile while it's not completely done. I'm

> currently using the

> VelocityProfile_Trap class to generate a trajectory but unfortunately I see no

> way to force an

> initial velocity. I saw the VelocityProfile_TrapHalf class but it seems that

> the initial velocity

> must be egal to the desired maximum velocity. Is there a way to do that with

> the current classes

> of KDL or I would need to code a new type of profile?

>

>

> The algorithm to work with arbitrary initial or end velocities is _much_

> more complex than the current one, and it does not have a closed form

> solution. Even the numerical solution is _very_ complex... So what you are

> searching for is not so easy :-( (I have spent/lost several months on that

> problem when I was a PhD student...)

>

> We have some people working on better algorithms, via (convex)

> optimization, but those algorithms are not yet mature...

>

> Herman

>

>

>

>

--

K.U.Leuven, Mechanical Eng., Mechatronics & Robotics Research Group

<http://people.mech.kuleuven.be/~bruyninc> Tel: +32 16 328056

EURON Coordinator (European Robotics Research Network) <http://www.euron.org>

Open Realtime Control Services <http://www.orocos.org>

Associate Editor JOSER <http://www.joser.org>, IJRR <http://www.ijrr.org>

## KDL - Trajectory generation with non-zero initial velocity

2010/1/29 Herman Bruyninckx <Herman [dot] Bruyninckx [..] ...>

> On Fri, 29 Jan 2010, Philippe Hamelin wrote:

>

> We already have a working implementation of a "n-axis" generic trajectory

>> generation in our

>> library called Microb (http://www.robotique.ireq.ca/microb/). However, it

>> uses the matrix library

>> (Vectmath) of Microb of that I wouldn't like to be dependant in my Orocos

>> program. I think that I

>> will try to re-code this class using only stl containers. Thus, maybe we

>> will submit it to KDL in

>> the futur.

>>

>

> Perfect! Do you really have closed form solution?!?! :-)

>

>

No this is a numeric solution. The algorithm just consider the 4 possible

cases of the trapezoidal velocity profile, ie:

1. v_init < v_max & v_final < v_max

2. v_init < v_max & v_final > v_max

3. v_init > v_max & v_final < v_max

4. v_init > v_max & v_final > v_max

For each cases, there's a set of 3 equations. Then the velocity is

integrated to obtain the position. This is not the best solution, but at

least this works for arbitrary initial and final conditions.

Philippe