Dynamic Ship Domain Linear Velocity Obstacle (DSDLVO) is a project implemented in Java, which combines the Dynamic Ship Domains of Bakdi et al, 2020 with the linear velocity obstacle algorithm from Huang et al,2018.
The project uses AIS data read from a CSV file acquired from Danish Maritime Authority (FTP link).
This project is made as a part of a bachelor project from Aalborg University.
The program comes with the Java 16 project and a python 3.8 project.
The Java project contains the implementation of the dynamic ship domain and the velocity obstacle algorithm, as well as a CSV reader which reads the AIS data.
The following must be done in order to run the program:
- Select an input file:
The GitHub repository contains a set of predefined InputFiles.
Upon opening the application, the user will be prompted to select the input file, and define the MMSI which should be considered as Own Ship. A list of MMSI's can be seen at Default MMSI's
The program repository also contains a python script to define a custom input file. Input File Creator
If an external input file is used, it should adhere to the same standards as the defined inputs files. The entries are comma separated, and the columns SOG, COG ,Length ,Heading ,longitude ,latitude should be floating point values. - Define MMSI
When running the program, the Own Ship (OS) should be defined. Therefore, the MMSI of the ship that should be interpreted as the OS, should be defined. - Build the project
After the correct file have been selected, the project should be built. - Run the project
When running the program, the user is presented with an interface containing a ship (OS) with its ship domain in the center. In the top right the user is presented with 3 sliders.
- Time factor
Simulation speed control which defines the speed of the simulation. - Time frame
This defines the time frame in which the VO should look for collisions (Minutes). - Zoom
Allows you to zoom in and out.
As the program runs through a simulation with other ships, the time frame can be increased/decreased to find the time in which a collision may occur.
If no collisions are detected within the current time frame, the cones will remain grey as seen in the image bellow.
Whereas if a collision is detected, the cone will turn red (see image below).
The python input file creator reads the content of input.txt, which should be structured as a CSV file.
The CSV file should have the following structure:
X | Y | SOG | COG | Heading | Length | Width |
---|---|---|---|---|---|---|
X Coordinates, which will be converted to longitude. | Y coordinates, which will be converted to latitude. | Speed of the vessel in knots. | Course over ground, which defines the direction the ship is sailing. This will be a constant direction. | Heading in degrees. | Length of the ship in meters. | Width of the ship in meters. |
The first line in the input file defines a ship with MMSI 1, second row defines a ship with MMSI 2, and each line will add a new ship to generated_file.csv.
The input file generator overrides the InputFiles/generated_file.csv. To use this, the input file in the Java program should be defined as the generated_file.
After having defined the inputfile.txt, the python project should be built and run. Upon running, the python project will prompt for the amount of minutes that should be simulated.
File path | Own ship MMSI |
---|---|
test/Testfiles/TestInput.csv | 219004612 |
test/TestFiles/TestInput2.csv | 211235221 |
InputFiles/RealWorld/AarhusEncounter_Small.csv | 218176000 |
InputFiles/aisdk_20190510.csv | 219017081 |
InputFiles/RealWorld/EXPRESS_1_&_BALTIC_CONDOR.csv | 219017081 |
InputFiles/RealWorld/SKULD_&_ENSCO_72.csv | 212172000 |
InputFiles/RealWorld/FRANK_&_LILLY.csv | 305369000 |
InputFiles/RealWorld/TOENNE_&_HELLE.csv | 219001359 |
InputFiles/RealWorld/TOENNE_&_HELLE.csv | 219798000 |
InputFiles/RealWorld/Bornholm_12.csv | 377739000 |
InputFiles/RealWorld/Bornholm_13.csv | 377739000 |
InputFiles/RealWorld/Simulation1.csv | 1 |
InputFiles/Crossings/collision.csv | 1 |
InputFiles/Overtakings/overtaking_starboard.csv | 1 |
InputFiles/generated_file.csv | 1 |