# How to define a path from a set of x-y points and estimate its smoothness?

4 views (last 30 days)

Show older comments

Hi to everyone,

I have a set of x-y points that define a path in a XY graph. How can I estimate the smoothness of the path?

I know that in Matlab there is a function called "smoothness" that does what I want but the input is a "path object", which I do not fully understand. So, the question I made before could also be rewritten as: "Can I obtain a path object from a set of x-y points?".

Thank you for your help!

##### 0 Comments

### Answers (1)

William Rose
on 29 Sep 2021

Edited: William Rose
on 29 Sep 2021

Example with two paths, each with 51 waypoints. Path A is a sequence of random points. Path B is a circle.

It seems that path objects must be in three dimensions, so I have added a third dimension, which is zero for all points. You also need to define a space containing the path. This space should be larger than the path, to avoid bumping into the edges. I suspect the extra margin should be at least the minimum turning radius, whose default value is 1.

N=21; %number of waypoints

A=[2*rand(N,2)-1,zeros(N,1)]; %path of random points

B=[cos(0:2*pi/(N-1):2*pi)',sin(0:2*pi/(N-1):2*pi)',zeros(N,1)]; %unit circle path

figure;

plot(A(:,1),A(:,2),'r.-',B(:,1),B(:,2),'b.-'); %plot waypoints

legend('Waypoints A','Waypoints B');

axis equal;

dubinsSpace=stateSpaceDubins([-2 2; -2 2; -1 1]); %define a space for the paths

%dubinsSpace.MinTurningRadius=.001; %change MinTurningRadius from the default value

pathobjA=navPath(dubinsSpace); %create a path object

pathobjB=navPath(dubinsSpace); %create a path object

append(pathobjA,A); %add waypoints to path object A

append(pathobjB,B); %add waypoints to path object B

pathMetricsObjA=pathmetrics(pathobjA); %compute path metrics for path A

pathMetricsObjB=pathmetrics(pathobjB); %compute path metrics for path B

smA=smoothness(pathMetricsObjA);

smB=smoothness(pathMetricsObjB);

fprintf('Smoothness of path A=%.3f, path B=%.3f\n',smA,smB);

Run the code above. Results differ for each run, due to the random numbers. The help for smoothness says "Values close to 0 indicate a smoother path. Straight-line paths return a value of 0.". Therefore the reults above indicate that path A is smoother than path B. That is clearly contrary to our concept of smoothness. Therefore I would not use this smoothness estimate. I would google to see what other estimates exist. I would consider making my own. It might involve the average value of the third derivative ("jerk").

Experiment with how changing the minimum turning radius alters the result. See if interpolating more points changes the smoothness.

Good luck!

##### 1 Comment

William Rose
on 29 Sep 2021

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!