GithubHelp home page GithubHelp logo

jonasbrondum / cyber-resilient-marine-navigation Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 485 KB

Selected code from my M.Sc. thesis: Cyber-resilient multi-modal sensor fusion for autonomous ship navigation

Python 100.00%
error-state-kalman-filter kalman-filter lidar multi-modal open-source-map sensor-fusion template-matching compass gnss-denied-environments gps gps-denied imu localization marine

cyber-resilient-marine-navigation's Introduction

Cyber-resilient multi-modal sensor fusion for autonomous shipnavigation

This repository is a selection of code used in my master thesis with the title: Cyber-resilient multi-modal sensor fusion for autonomous shipnavigation. I've tried to clean the code and make it as readable as possible. Hopefully, this can be useful for anyone wanting to implement their own error-state kalman filter.

Project abstract

Ensuring the integrity of navigation sensors is paramount for safe maritime navigation. Un- fortunately, cyber-attacks targeting satellite positioning information and onboard sensors have exposed vulnerabilities, posing a significant threat to navigation safety. In near-coast and urban environments with high traffic density and static structures, the risk of collisions and grounding is elevated. Without a navigator’s sanity check of crucial information such as position, heading, and velocity, cyber attacks could lead to accidents by compromising accurate data.

This thesis addresses the challenge of enhancing the cyber-resilience of maritime surface vessel navigation systems. Various sensor systems are evaluated, and auxiliary sensing methods are proposed to create a GNSS-independent navigation system. The thesis introduces two methods—point cloud registration and template matching—for an auxiliary positioning system. Additionally, an observer is designed to leverage the existing array of sensors within a framework supported by auxiliary measurements.

The developed navigation system is tested using real-world data collected in Copen- hagen’s inner harbor. Despite the absence of GNSS measurements, the system pro- duces sufficiently accurate positioning. The resulting position estimate demonstrates the cyber-resilience of the proposed solution for GNSS-independent navigation.

Contents

The project consisted of several methods for calculating an odometry to use in localization.

  1. LiDAR odometry from point cloud registration. This is located in lidar_odometry.py.
  2. Template matching (TM) odometry using LiDAR with electronic navigational charts (ENC) or open-street map (OSM). This is located in tm_odometry.py.

These odometries were along with GPS, Compass, and IMU measurements used in the error-state Kalman filter for continuous localization. The error-state kalman filter is implemented as a class in eskf.py.

Project pipeline

The pipeline is combined in pipeline.py

Dataset

The pipeline as it is implemented here makes use of pickled DataFrames. The data used for the project is not for public use, so it is, unfortunately, unavailable for me to share. The loadData()in data_samples.py can easily be modified to fit other data storage.

The dataset was partitioned into smaller sets for development such that the relative East-North-Up coordinate system could be utilized.

The current structure accomodates 5 DataFrames:

lidar_df

timestamp path
Unix Epoch format path to .pcd-files

gps_df

timestamp latitude longitude East North sog cog
in Unix Epoch format - - - - speed over ground course over ground

imu_df

timestamp q0 q1 q2 q3 ax ay az gx gy gz
in Unix Epoch format quaternions - - - acceleration - - angular velocities - -

heading_df

timestamp heading uncorrected heading vessel
in Unix Epoch format - -

enc_df

timestamp path enc_max_range latitude longitude pxwidth
in Unix Epoch format path to enc-generated images max range in meters center of image center of image pixelwidth of the image

How-to

Project requirements can be installed from requirements.txt.

pipeline.py is set up to run with the project parameters.

Note: The parameters used for the different sections of the pipeline are mostly defined in the parameters.pyclass with the call of loadParameters().

Quality statement

This is research quality code, not suitable for production or any real use case. The code is provided as-is with no guarantees or warranties.

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.