Custom Flight Log - change datatype

1 view (last 30 days)
Antoine Dilly
Antoine Dilly on 23 Feb 2021
Commented: Antoine Dilly on 25 Feb 2021
i have one problem with the "Custom Flight Log" example.
after loading the data from a file:
Data = load('xxx.mat');
logData = Data;
Plotter = flightLogSignalMapping;
I need to make the timeAccess function. But inside my Data struct is a time array from the type double (The data is saved as milliseconds)
timeAccess = @(x)x.time;
How can i change the double type to milliseconds type ?
The problem is the data is should not be changed, because it has the right structure (0.0083).
And the fuction:
MS = milliseconds(X)
would change the data.
So how i change only the format to milliseconds ?
i am happy for any help

Answers (2)

Jianxin Sun
Jianxin Sun on 23 Feb 2021
Hi Antoine,
Is your data X == 0.0083 seconds or 0.0083 milliseconds? If it is the former, you can use
timeAccess = @(x)seconds(x.time);
The custom flight log expects a duration type from timeAccess return and the function above converts double type to a duration, such as 0.0083 seconds (8.3 ms).
Thanks,
Jianxin.

Antoine Dilly
Antoine Dilly on 23 Feb 2021
Thanks for the fast respond
This was also my first idea:
timeAccess = @(x)seconds(x.time);
But i get some error then i run my code:
Data = load('xxx.mat');
logData = Data;
Plotter = flightLogSignalMapping;
timeAccess = @(x)seconds(x.time);
GPS = @(x)[x.lat,x.lon,x.alt];
mapSignal(Plotter, "GPS", timeAccess, GPS);
predefinedPlots = show(Plotter,logData,"PlotsToShow","Compass");
Error using array2timetable (line 86)
The VariableNames property must contain one name for each variable in the table.
Error in uav.internal.log.Analyzer/extract (line 155)
tbls{idx} = array2timetable(v(timeFilter,:), 'RowTimes',
t(timeFilter), ...
Error in uav.internal.log.Analyzer/show (line 177)
signal = obj.extract(source, matchedSignalNames{sIdx}, ts,
te);
Error in flightLogSignalMapping/show (line 318)
handles = obj.Analyzer.show(data, ts, te, plotsToShow);
Error in VisualizeCustomFlightLog (line 12)
predefinedPlots = show(Plotter,logData,"PlotsToShow","Compass");
  2 Comments
Jianxin Sun
Jianxin Sun on 23 Feb 2021
Hi Antoine,
For a GPS signal, we are expecting 6 elements when extracting its data:
"GPS#" "Latitude, Longitude, Altitude, GroundSpeed, CourseAngle, SatellitesVisible"
You can see the information above using
info(customPlotter, "Signal", "GPS#")
When you create the GPS function handle, consider fills the fields you don't have with zeros
GPS = @(x)[x.lat, x.lon, x.alt, zeros(size(x.lat, 1), 3)]
Thanks,
Jianxin

Sign in to comment.

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!