Git Product home page Git Product logo

flightplot's People

Contributors

andreasantener avatar drton avatar dyeldandi avatar gitter-badger avatar kd0aij avatar kubark42 avatar pigeonhunter avatar stmoon avatar thomasgubler avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flightplot's Issues

Don't plot in yellow

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?

MAVLink logs support

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.

CLI to save plot as image

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

Add feature to visualize flight.

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.

Build broken on OSX 10.10.5

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$ 

Use jMAVlib and la4j gracefully

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?

GPS.Altitude View Problem

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.

gpsalt

Open mavlink files or serial ports for realtime plotting.

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?

Error while building in Ubuntu

I am getting the following error while building FlightPlot in Ubuntu
path/FlightPlot/build.xml:24: srcdir "path/FlightPlot/jMAVlib/src" does not exist!

FlightPlot Fork

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.

FYI @kd0aij @dagar @AndreasAntener @LorenzMeier

Null Pointer on Ubuntu 16.04

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)

Could you please explain how to compile in README ?

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...

Apply offset before scale

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?

How to turn OFF Low-pass filter in Expression?

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?

Can't parse certain VTOL logs

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.

Ulog is fully support or not?

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?.

problem loading log file

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)

19_53_36.px4log.zip

ULOG: Cannot export KMZ or GPX.

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.

General global altitude field offset

  • Either specify manually
  • Or take starting altitude from some global alt field automatically

Then add offset to all fields we know they contain global altitude.
Should be a checkbox to enable/disable

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.