Skip to content

ignatpenshin/navigation_engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

version 0.0.2 (Tested on python3.10)

New in v.0.0.2:
[1] Moved from KML to GeoJSON. It's simplier and faster to parse.
[2] Intermediate .csv files removed from using
[3] Add DataGrabbler class. It unifies DataFrame build process 
[4] Navigator class refactored from main() to its own utils.navigator.py file
[5] Now we use general classifier based in utils.grabbler.py

Updates in v.0.0.2:
[1] point_base got new structure: [id, geometry, Tag, Description]
[2] rails.get_closest_line(points) ready for active using (updating)
[3] osm_router now in helpers. Just for test some tools/features.
[4] _init_kd_tree got its own method in Navigator()

Open Questions:
[1] How to work with polygons. Tool for fast routing.
[2] How to make OSM_routing faster. Multiprocess optimizations.
[3] Own rail LineString -> MultiDiGraph.
[4] Web map with route streaming.
[5] SharedMemory stability - need tests. 
Install:

git clone https://github.com/ignatpenshin/navigation_engine.git
cd navigator
pip install -r requirements.txt

Run:

python main.py

Usage doc:

  1. main.py will create Navigator class instance and run Navigator.tracking_info() it will emulate train-motion data and build kd-tree for 5 closest points:

  2. closest points are shared with utils.shared_memory.RamBox object so, you can use it that way:

    from utils.shared_memory import RamBox
    from time import sleep
    
    data = RamBox(name = "point_routing", role = "r")
    
    while True:
        s = data.read()
        if type(s) == list:
            print(s)
            sleep(1)
        continue

    shared data contains next info (for example):

    data: list[dict[str, int|float|str|tuple[float, float]]]
    
    data = [{'Pose': (37.419485, 55.727001), 'Speed': 13.9, 'Heading': 271.27}, 
            {'id': 341, 'coords': (37.415335, 55.726974),'Tag': "path", 'Description': None,  'direct_m': 260.74}, 
            {'id': 696, 'coords': (37.41496, 55.726992), 'Tag': "platform", 'Description': None, 'direct_m': 284.32}, 
            {'id': 697, 'coords': (37.414956, 55.726977),'Tag': "crossing", 'Description': None,  'direct_m': 284.58}, 
            {'id': 117, 'coords': (37.41485, 55.727057), 'Tag': "tongue", 'Description': None, 'direct_m': 291.3}, 
            {'id': 343, 'coords': (37.414614, 55.726994),'Tag': "station", 'Description': "Усово",  'direct_m': 306.06}
           ]
    
                    ### Data Description ###
    
    # data[0]   -> Train:           Pose (lon, lat: WGS-84), 
    #                               Speed (km/h), 
    #                               Heading (azimuth to North in degrees)
    
    # data[1:6] -> Point info dict: id (point index from DB), 
    #                               coords (lon, lat: WGS-84)
    #                               Tag (type: str from classifier)
    #                               Description (Optional[str] augmented info)
    #                               direct_m (distance to point in meters)
  3. You can check

    python test_shared.py 

    to make sure the system is working.

  4. By the way: Sometimes there is no detected points around. So you will take only train coords in shared data list.

About

Navigation Engine

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages