drton / flightplot Goto Github PK
View Code? Open in Web Editor NEWPX4/APM flight log plotter
PX4/APM flight log plotter
Personnaly, I think it's really hard to see the yellow lines on white. Any easy way you could get rid of yellow? Or make it darker?
I've added codegen-free mavlink library to jMAVlib and now it should be easy to add mavlink logs support. Message definitions XML file can be selected in runtime, so in Open dialog we should be able to choose "APM / PX4 / Custom XML". Maybe it will be time for custom Open dialog.
It would be extremely cool if one could use the CLI to plot an image using a FlightPlot preset. :) @DrTon I think you already had something like this in mind?
For instance
flightplot plot -r 1024x1024 log1.bin preset.fplot out.png
Hi Anton
I think it would be a great idea to add a feature to FlightPlot which allows to visualize the attitude/position of the vehicle. I have done a python script which allows me to do that https://github.com/tumbili/FlightAnalyzer but it would be great if this is possible with FlightPlot.
I think for heavy maneuvers euler angles are not good to be analyzed anymore and quaternions are not very intuitive either. Would you be interested in helping to add this feature? I will have some spare time soon and am willing to invest it.
I found a guide about how to use flight to tune controller,the website is http://www.pixhawk.org/dev/flightplot_pos_control
but I have some questions as following
1、what it says hold altitude means switch to ALTCTL mode?
2、how to use flightplot to tune position controller and attitude controller?
The build seems to be broken on Mac using JDK 8u73. Following the instructions on README.md
, I first ran into a build error due to a missing jMAVlib/src
directory. I attempted to fix that, but then the build fails due to a complaint about missing packages. I'm unfamiliar with the java build process, so cannot troubleshoot further than this. I have included the console output below:
Last login: Wed Feb 17 06:19:18 on ttys005
06:19:22 ~/Documents$ git clone https://github.com/DrTon/FlightPlot.git
Cloning into 'FlightPlot'...
remote: Counting objects: 2275, done.
remote: Total 2275 (delta 0), reused 0 (delta 0), pack-reused 2275
Receiving objects: 100% (2275/2275), 3.22 MiB | 1.48 MiB/s, done.
Resolving deltas: 100% (1141/1141), done.
Checking connectivity... done.
06:19:36 ~/Documents$ cd FlightPlot/
06:19:39 (master) ~/Documents/FlightPlot$ ant
Buildfile: /Users/kenz/Documents/FlightPlot/build.xml
make_dirs:
[mkdir] Created dir: /Users/kenz/Documents/FlightPlot/out/production/FlightPlot
compile:
BUILD FAILED
/Users/kenz/Documents/FlightPlot/build.xml:24: srcdir "/Users/kenz/Documents/FlightPlot/jMAVlib/src" does not exist!
Total time: 0 seconds
06:19:41 (master) ~/Documents/FlightPlot$ mkdir -p jMAVlib/src
06:19:48 (master) ~/Documents/FlightPlot$ ant
Buildfile: /Users/kenz/Documents/FlightPlot/build.xml
make_dirs:
compile:
[javac2] Compiling 74 source files to /Users/kenz/Documents/FlightPlot/out/production/FlightPlot
[javac2] warning: [options] bootstrap class path not set in conjunction with -source 1.6
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/FlightPlot.java:10: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.FormatErrorException;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/FlightPlot.java:11: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.LogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/FlightPlot.java:12: error: package me.drton.jmavlib.log.px4 does not exist
[javac2] import me.drton.jmavlib.log.px4.PX4LogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/FlightPlot.java:13: error: package me.drton.jmavlib.log.ulog does not exist
[javac2] import me.drton.jmavlib.log.ulog.ULogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/FlightPlot.java:100: error: cannot find symbol
[javac2] private LogReader logReader = null;
[javac2] ^
[javac2] symbol: class LogReader
[javac2] location: class FlightPlot
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/LogInfo.java:3: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.LogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackExportDialog.java:4: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.FormatErrorException;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackExportDialog.java:5: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.LogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/FlightPlot.java:1051: error: cannot find symbol
[javac2] private void generateSeries() throws IOException, FormatErrorException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
[javac2] ^
[javac2] symbol: class FormatErrorException
[javac2] location: class FlightPlot
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/LogInfo.java:39: error: cannot find symbol
[javac2] public void updateInfo(LogReader logReader) {
[javac2] ^
[javac2] symbol: class LogReader
[javac2] location: class LogInfo
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackExportDialog.java:50: error: cannot find symbol
[javac2] private LogReader logReader;
[javac2] ^
[javac2] symbol: class LogReader
[javac2] location: class TrackExportDialog
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackExportDialog.java:196: error: cannot find symbol
[javac2] public void display(LogReader logReader, Range chartRange) {
[javac2] ^
[javac2] symbol: class LogReader
[javac2] location: class TrackExportDialog
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReader.java:3: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.FormatErrorException;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReader.java:18: error: cannot find symbol
[javac2] TrackPoint readNextPoint() throws IOException, FormatErrorException;
[javac2] ^
[javac2] symbol: class FormatErrorException
[javac2] location: interface TrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/AbstractTrackReader.java:3: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.FormatErrorException;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/AbstractTrackReader.java:4: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.LogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/AbstractTrackReader.java:14: error: cannot find symbol
[javac2] protected final LogReader reader;
[javac2] ^
[javac2] symbol: class LogReader
[javac2] location: class AbstractTrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/AbstractTrackReader.java:18: error: cannot find symbol
[javac2] public AbstractTrackReader(LogReader reader, TrackReaderConfiguration config) throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class LogReader
[javac2] location: class AbstractTrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/AbstractTrackReader.java:18: error: cannot find symbol
[javac2] public AbstractTrackReader(LogReader reader, TrackReaderConfiguration config) throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class FormatErrorException
[javac2] location: class AbstractTrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/AbstractTrackReader.java:24: error: cannot find symbol
[javac2] protected long readUpdate(Map<String, Object> data) throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class FormatErrorException
[javac2] location: class AbstractTrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/PX4TrackReader.java:3: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.FormatErrorException;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/PX4TrackReader.java:4: error: package me.drton.jmavlib.log.px4 does not exist
[javac2] import me.drton.jmavlib.log.px4.PX4LogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/PX4TrackReader.java:22: error: cannot find symbol
[javac2] public PX4TrackReader(PX4LogReader reader, TrackReaderConfiguration config) throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class PX4LogReader
[javac2] location: class PX4TrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/PX4TrackReader.java:22: error: cannot find symbol
[javac2] public PX4TrackReader(PX4LogReader reader, TrackReaderConfiguration config) throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class FormatErrorException
[javac2] location: class PX4TrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/PX4TrackReader.java:27: error: cannot find symbol
[javac2] public TrackPoint readNextPoint() throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class FormatErrorException
[javac2] location: class PX4TrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:3: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.FormatErrorException;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:4: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.LogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:5: error: package me.drton.jmavlib.log.px4 does not exist
[javac2] import me.drton.jmavlib.log.px4.PX4LogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:6: error: package me.drton.jmavlib.log.ulog does not exist
[javac2] import me.drton.jmavlib.log.ulog.ULogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:14: error: cannot find symbol
[javac2] public static TrackReader getTrackReader(LogReader reader, TrackReaderConfiguration config) throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class LogReader
[javac2] location: class TrackReaderFactory
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:14: error: cannot find symbol
[javac2] public static TrackReader getTrackReader(LogReader reader, TrackReaderConfiguration config) throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class FormatErrorException
[javac2] location: class TrackReaderFactory
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/ULogTrackReader.java:3: error: package me.drton.jmavlib.log does not exist
[javac2] import me.drton.jmavlib.log.FormatErrorException;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/ULogTrackReader.java:4: error: package me.drton.jmavlib.log.ulog does not exist
[javac2] import me.drton.jmavlib.log.ulog.ULogReader;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/ULogTrackReader.java:23: error: cannot find symbol
[javac2] public ULogTrackReader(ULogReader reader, TrackReaderConfiguration config) throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class ULogReader
[javac2] location: class ULogTrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/ULogTrackReader.java:23: error: cannot find symbol
[javac2] public ULogTrackReader(ULogReader reader, TrackReaderConfiguration config) throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class FormatErrorException
[javac2] location: class ULogTrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/ULogTrackReader.java:28: error: cannot find symbol
[javac2] public TrackPoint readNextPoint() throws IOException, FormatErrorException {
[javac2] ^
[javac2] symbol: class FormatErrorException
[javac2] location: class ULogTrackReader
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/EulerFromQuaternion.java:3: error: package me.drton.jmavlib.conversion does not exist
[javac2] import me.drton.jmavlib.conversion.RotationConversion;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/GlobalPositionProjection.java:3: error: package me.drton.jmavlib.geo does not exist
[javac2] import me.drton.jmavlib.geo.GlobalPositionProjector;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/GlobalPositionProjection.java:4: error: package me.drton.jmavlib.geo does not exist
[javac2] import me.drton.jmavlib.geo.LatLonAlt;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/GlobalPositionProjection.java:13: error: cannot find symbol
[javac2] private GlobalPositionProjector positionProjector = new GlobalPositionProjector();
[javac2] ^
[javac2] symbol: class GlobalPositionProjector
[javac2] location: class GlobalPositionProjection
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/NEDFromBodyProjection.java:4: error: package me.drton.jmavlib.conversion does not exist
[javac2] import me.drton.jmavlib.conversion.RotationConversion;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PosRatePIDControlSimulator.java:5: error: package me.drton.jmavlib.processing does not exist
[javac2] import me.drton.jmavlib.processing.DelayLine;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PosRatePIDControlSimulator.java:20: error: cannot find symbol
[javac2] private DelayLine<Double> delayLine = new DelayLine<Double>();
[javac2] ^
[javac2] symbol: class DelayLine
[javac2] location: class PosRatePIDControlSimulator
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:3: error: package me.drton.jmavlib.conversion does not exist
[javac2] import me.drton.jmavlib.conversion.RotationConversion;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:4: error: package me.drton.jmavlib.geo does not exist
[javac2] import me.drton.jmavlib.geo.GlobalPositionProjector;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:5: error: package me.drton.jmavlib.geo does not exist
[javac2] import me.drton.jmavlib.geo.LatLonAlt;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:6: error: package me.drton.jmavlib.processing does not exist
[javac2] import me.drton.jmavlib.processing.DelayLine;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:50: error: cannot find symbol
[javac2] private GlobalPositionProjector positionProjector;
[javac2] ^
[javac2] symbol: class GlobalPositionProjector
[javac2] location: class PositionEstimator
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:52: error: cannot find symbol
[javac2] private DelayLine<double[][]> delayLineGPS;
[javac2] ^
[javac2] symbol: class DelayLine
[javac2] location: class PositionEstimator
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:3: error: package me.drton.jmavlib.conversion does not exist
[javac2] import me.drton.jmavlib.conversion.RotationConversion;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:4: error: package me.drton.jmavlib.geo does not exist
[javac2] import me.drton.jmavlib.geo.GlobalPositionProjector;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:5: error: package me.drton.jmavlib.geo does not exist
[javac2] import me.drton.jmavlib.geo.LatLonAlt;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:6: error: package me.drton.jmavlib.processing does not exist
[javac2] import me.drton.jmavlib.processing.DelayLine;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:72: error: cannot find symbol
[javac2] private GlobalPositionProjector positionProjector = new GlobalPositionProjector();
[javac2] ^
[javac2] symbol: class GlobalPositionProjector
[javac2] location: class PositionEstimatorKF
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:74: error: package DelayLine does not exist
[javac2] private List<DelayLine.Tick<GVector>> xBuffer;
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/FlightPlot.java:802: error: cannot find symbol
[javac2] LogReader logReaderNew;
[javac2] ^
[javac2] symbol: class LogReader
[javac2] location: class FlightPlot
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/FlightPlot.java:805: error: cannot find symbol
[javac2] logReaderNew = new PX4LogReader(logFileName);
[javac2] ^
[javac2] symbol: class PX4LogReader
[javac2] location: class FlightPlot
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/FlightPlot.java:807: error: cannot find symbol
[javac2] logReaderNew = new ULogReader(logFileName);
[javac2] ^
[javac2] symbol: class ULogReader
[javac2] location: class FlightPlot
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:15: error: cannot find symbol
[javac2] if (reader instanceof PX4LogReader) {
[javac2] ^
[javac2] symbol: class PX4LogReader
[javac2] location: class TrackReaderFactory
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:16: error: cannot find symbol
[javac2] return new PX4TrackReader((PX4LogReader) reader, config);
[javac2] ^
[javac2] symbol: class PX4LogReader
[javac2] location: class TrackReaderFactory
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:17: error: cannot find symbol
[javac2] } else if (reader instanceof ULogReader) {
[javac2] ^
[javac2] symbol: class ULogReader
[javac2] location: class TrackReaderFactory
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/export/TrackReaderFactory.java:18: error: cannot find symbol
[javac2] return new ULogTrackReader((ULogReader) reader, config);
[javac2] ^
[javac2] symbol: class ULogReader
[javac2] location: class TrackReaderFactory
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/EulerFromQuaternion.java:55: error: cannot find symbol
[javac2] double[] euler = RotationConversion.eulerAnglesByQuaternion(q);
[javac2] ^
[javac2] symbol: variable RotationConversion
[javac2] location: class EulerFromQuaternion
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/GlobalPositionProjection.java:13: error: cannot find symbol
[javac2] private GlobalPositionProjector positionProjector = new GlobalPositionProjector();
[javac2] ^
[javac2] symbol: class GlobalPositionProjector
[javac2] location: class GlobalPositionProjection
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/GlobalPositionProjection.java:30: error: cannot find symbol
[javac2] positionProjector.init(new LatLonAlt(Double.parseDouble(ref[0]), Double.parseDouble(ref[1]), 0.0));
[javac2] ^
[javac2] symbol: class LatLonAlt
[javac2] location: class GlobalPositionProjection
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/GlobalPositionProjection.java:42: error: cannot find symbol
[javac2] LatLonAlt latLonAlt = new LatLonAlt(latNum.doubleValue(), lonNum.doubleValue(), 0.0);
[javac2] ^
[javac2] symbol: class LatLonAlt
[javac2] location: class GlobalPositionProjection
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/GlobalPositionProjection.java:42: error: cannot find symbol
[javac2] LatLonAlt latLonAlt = new LatLonAlt(latNum.doubleValue(), lonNum.doubleValue(), 0.0);
[javac2] ^
[javac2] symbol: class LatLonAlt
[javac2] location: class GlobalPositionProjection
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/NEDFromBodyProjection.java:87: error: cannot find symbol
[javac2] r.set(RotationConversion.rotationMatrixByEulerAngles(roll.doubleValue() + param_Att_Offsets[0],
[javac2] ^
[javac2] symbol: variable RotationConversion
[javac2] location: class NEDFromBodyProjection
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PosRatePIDControlSimulator.java:20: error: cannot find symbol
[javac2] private DelayLine<Double> delayLine = new DelayLine<Double>();
[javac2] ^
[javac2] symbol: class DelayLine
[javac2] location: class PosRatePIDControlSimulator
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:107: error: cannot find symbol
[javac2] delayLineGPS = new DelayLine<double[][]>();
[javac2] ^
[javac2] symbol: class DelayLine
[javac2] location: class PositionEstimator
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:108: error: cannot find symbol
[javac2] positionProjector = new GlobalPositionProjector();
[javac2] ^
[javac2] symbol: class GlobalPositionProjector
[javac2] location: class PositionEstimator
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:162: error: cannot find symbol
[javac2] rot.set(RotationConversion.rotationMatrixByEulerAngles(roll.doubleValue(), pitch.doubleValue(),
[javac2] ^
[javac2] symbol: variable RotationConversion
[javac2] location: class PositionEstimator
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:194: error: cannot find symbol
[javac2] positionProjector.init(new LatLonAlt(lat, lon, alt));
[javac2] ^
[javac2] symbol: class LatLonAlt
[javac2] location: class PositionEstimator
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimator.java:199: error: cannot find symbol
[javac2] double[] gpsProj = positionProjector.project(new LatLonAlt(lat, lon, alt));
[javac2] ^
[javac2] symbol: class LatLonAlt
[javac2] location: class PositionEstimator
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:72: error: cannot find symbol
[javac2] private GlobalPositionProjector positionProjector = new GlobalPositionProjector();
[javac2] ^
[javac2] symbol: class GlobalPositionProjector
[javac2] location: class PositionEstimatorKF
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:136: error: package DelayLine does not exist
[javac2] xBuffer = new ArrayList<DelayLine.Tick<GVector>>();
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:194: error: cannot find symbol
[javac2] rot.set(RotationConversion.rotationMatrixByEulerAngles(roll.doubleValue(), pitch.doubleValue(),
[javac2] ^
[javac2] symbol: variable RotationConversion
[javac2] location: class PositionEstimatorKF
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:232: error: cannot find symbol
[javac2] positionProjector.init(new LatLonAlt(lat, lon, alt));
[javac2] ^
[javac2] symbol: class LatLonAlt
[javac2] location: class PositionEstimatorKF
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:236: error: cannot find symbol
[javac2] double[] gpsXYZ = positionProjector.project(new LatLonAlt(lat, lon, alt));
[javac2] ^
[javac2] symbol: class LatLonAlt
[javac2] location: class PositionEstimatorKF
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:344: error: package DelayLine does not exist
[javac2] xBuffer.add(new DelayLine.Tick<GVector>(time, new GVector(x)));
[javac2] ^
[javac2] /Users/kenz/Documents/FlightPlot/src/me/drton/flightplot/processors/PositionEstimatorKF.java:366: error: package DelayLine does not exist
[javac2] DelayLine.Tick<GVector> tick = null;
[javac2] ^
[javac2] Note: Some input files use unchecked or unsafe operations.
[javac2] Note: Recompile with -Xlint:unchecked for details.
[javac2] 81 errors
[javac2] 1 warning
BUILD FAILED
/Users/kenz/Documents/FlightPlot/build.xml:24: Compile failed; see the compiler error output for details.
Total time: 2 seconds
06:19:51 (master) ~/Documents/FlightPlot$
Now jMAVlib included as submodule but is has submodule la4j inside, it may be confusing and ugly. How to do this better? At least jMAVlib will be updated from time to time and I want to get the change in FlightPlot easyly. @AndreasAntener, any ideas?
This would aid in recognizing dropouts in the log.
Hi first thanks for the great app. I have this rather inconvenient problem with the view. Here our home spot is at 600-650 meters altitude we fly at 600-900 meters height so When I turn on the GPS.Alt in the view the number is so high that all the other graphics get almost like a line around the 0 point. It is especially inconvenient when we have to analyze VTOL transitions. So please can you add a way that FlightPlot detects where the 0 ground is and provide in some way Relative Altitude Visualization instead of the GPS.Alt in real numbers.
I would expect an option to close the program in the File menu.
It's possible to open and update periodically files with mavlink logs, or even open serial device and implement realtime plotting. This will require custom "Open file/device" dialog and some plot interface changes ("realtime" checkbox). Mavlink support is already implemented. Anybody interested in helping with this?
If a foldername contains the german letter "ü", it won't be displayed in the "Open file" dialog.
I am getting the following error while building FlightPlot in Ubuntu
path/FlightPlot/build.xml:24: srcdir "path/FlightPlot/jMAVlib/src" does not exist!
Hi @DrTon
First, many thanks for creating and maintaining this project! It's been very useful to us (PX4 team), and we would like to continue using it. However in several weeks you have not answered to any pull request, and we would like to continue the development (in particular adding/extending support for the ULog file format). So this is not an easy step, but should we not hear back from you, we will keep our own fork at https://github.com/PX4/FlightPlot and release versions for it.
Should you decide to take up development again, you can of course take over and be the primary maintainer. We can also do a shared maintainership if you have too many other things to do, or some other model, but the current state hinders development.
To reproduce:
The first parameter from the newly selected processor will now have the value from the previously modified parameter
Note sure if I'm doing something wrong, but broken now on 16.04, tried oracle java 6/8.
java.lang.NullPointerException
at me.drton.jmavlib.log.px4.PX4LogReader.applyMsg(PX4LogReader.java:305)
at me.drton.jmavlib.log.px4.PX4LogReader.readUpdate(PX4LogReader.java:353)
at me.drton.flightplot.FlightPlot.generateSeries(FlightPlot.java:1068)
at me.drton.flightplot.FlightPlot.access$2100(FlightPlot.java:63)
at me.drton.flightplot.FlightPlot$34.run(FlightPlot.java:981)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:672)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:633)
at java.awt.EventQueue$2.run(EventQueue.java:631)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:642)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
at java.awt.Dialog$1.run(Dialog.java:1052)
at java.awt.Dialog$3.run(Dialog.java:1104)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:1102)
at java.awt.Component.show(Component.java:1591)
at java.awt.Component.setVisible(Component.java:1543)
at java.awt.Window.setVisible(Window.java:843)
at java.awt.Dialog.setVisible(Dialog.java:987)
at me.drton.flightplot.FlightPlot$7.actionPerformed(FlightPlot.java:213)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6297)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
at java.awt.Component.processEvent(Component.java:6062)
at java.awt.Container.processEvent(Container.java:2039)
at java.awt.Component.dispatchEventImpl(Component.java:4660)
at java.awt.Container.dispatchEventImpl(Container.java:2097)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
at java.awt.Container.dispatchEventImpl(Container.java:2083)
at java.awt.Window.dispatchEventImpl(Window.java:2489)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:674)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:633)
at java.awt.EventQueue$2.run(EventQueue.java:631)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:647)
at java.awt.EventQueue$3.run(EventQueue.java:645)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:644)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
^Yjava.lang.NullPointerException
at me.drton.jmavlib.log.px4.PX4LogReader.applyMsg(PX4LogReader.java:305)
at me.drton.jmavlib.log.px4.PX4LogReader.readUpdate(PX4LogReader.java:353)
at me.drton.flightplot.FlightPlot.generateSeries(FlightPlot.java:1068)
at me.drton.flightplot.FlightPlot.access$2100(FlightPlot.java:63)
at me.drton.flightplot.FlightPlot$34.run(FlightPlot.java:981)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:672)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:633)
at java.awt.EventQueue$2.run(EventQueue.java:631)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:642)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
at java.awt.Dialog$1.run(Dialog.java:1052)
at java.awt.Dialog$3.run(Dialog.java:1104)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:1102)
at java.awt.Component.show(Component.java:1591)
at java.awt.Component.setVisible(Component.java:1543)
at java.awt.Window.setVisible(Window.java:843)
at java.awt.Dialog.setVisible(Dialog.java:987)
at me.drton.flightplot.FlightPlot$7.actionPerformed(FlightPlot.java:213)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6297)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
at java.awt.Component.processEvent(Component.java:6062)
at java.awt.Container.processEvent(Container.java:2039)
at java.awt.Component.dispatchEventImpl(Component.java:4660)
at java.awt.Container.dispatchEventImpl(Container.java:2097)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
at java.awt.Container.dispatchEventImpl(Container.java:2083)
at java.awt.Window.dispatchEventImpl(Window.java:2489)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:674)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:633)
at java.awt.EventQueue$2.run(EventQueue.java:631)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:647)
at java.awt.EventQueue$3.run(EventQueue.java:645)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:644)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
example KMZ file from the MatrixPilot team: https://copy.com/EwpjLqTocNjcEopK
Google Earth snapshot of landing:
I'm newbie of development of flightplot.
I think flightplot is very useful application for pixhawk.
In order to develop with other developer, I think the readme should be more detailed.
Especially, how to compile, how to insert module, and so on....
I just install intelliJ. However, I cannot compile with many problem.
please explain how to compile it...
I think it would be more intuitive if you apply the offset first and then the scale.
So
(value - offset) * scale
instead of
value * scale - offset
For example:
PWM values from 1000 to 2000
(value-1500)*0.001
What do you think?
I tune my Optical Flow sensor, and with help of Expression fields I'd like to bring several fields to single scale (for example: optical_flow_0.pixel_flow_y_integral * 100, or optical_flow_0.quality / 100)
But I found out, when I use Expression field - not only expression is calculated, but also LPF is applied somehow, which changes the appearence of the field graphic completely.
For example: this if graphics for optical_flow_0.pixel_flow_y_integral - red - Simple, Blue - Expression.
LPF = 0, should be no filtering, but graphics completely different.
How to turn off the low pass filtering in the Expression field?
"Add" in the "Fields List" just adds a Simple Processors
Don't know yet if this is a FlightPlot issue or if there's something wrong with a new type of sdlog2 message.
We fail to parse the following logs:
http://dash.oznet.ch/view/kmLXNmL78tTqqLv4b3M2Ka
http://dash.oznet.ch/view/2EryWM2L5d7NkfKp7nwKPW
It always breaks after the new MACS message:
PX4/PX4-Autopilot@e097aff#diff-d92320704a8bd89ce2c077e7824982faR534
@Tumbili : maybe you have an idea? I don't see an obvious error, but it seems that after the MACS message I read an unknown message type from time to time.
I have got a problem to read ulog file ( recorded from pixhawk with px4 firmware), I have try with MAVGCL this application can show the data inside the log but cannot export to google map file, However, I was use FlightPlot to open and generate google map from px4log ( I think it is an old version of px4 log past 6 months ago), now it only able to load but no data on screen and cannot export to google map.
Anyone know how to fix this problem?.
Unable to load a file into FlightPlot generated by latest (stable branch) code:
console output:
fubarn:px4fw todd$ java -jar /Users/todd/Downloads/FlightPlot.app/Contents/Resources/Java/flightplot.jar
Log parsing errors:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: toIndex = 100
at java.util.ArrayList.subListRangeCheck(ArrayList.java:1004)
at java.util.ArrayList.subList(ArrayList.java:996)
at me.drton.flightplot.FlightPlot.printLogErrors(FlightPlot.java:1011)
at me.drton.flightplot.FlightPlot.openLog(FlightPlot.java:829)
at me.drton.flightplot.FlightPlot.showOpenLogDialog(FlightPlot.java:795)
at me.drton.flightplot.FlightPlot$6.actionPerformed(FlightPlot.java:207)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6535)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Hi,
On the main page of flightplot, I saw that there is an AUR package for Archlinux. The package is not available nowaday. https://aur.archlinux.org/packages/java-flightplot-git/
It's ok for me to run Flightplot with java -jar but the main page is not up to date.
We are using PX4 and with the old PX4log format the export works. But with the new ULOG format the export generates empty 1K files.
Then add offset to all fields we know they contain global altitude.
Should be a checkbox to enable/disable
By accident I wanted to open a logfile which is presumably empty. Unfortunately this crashes FlightPlot.
It would be nice if an error is thrown instead. The empty logfile is attached.
empty.px4log.zip
I'd like to suggest something like the 3 clause BSD or MIT license, but obviously its up to you.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.