# ashapipro

`ASHAPIPRO` - **A**utonomous **S**hip **H**andling **A**pplication **P**rogramming **I**nterface **Pro**totypes library - компонент `Библиотека прототипов` Имитационного Программного Комплекса Автономного Судовождения (**ИПКАС**).

`Библиотека прототипов` содержит примеры реализации систем управления движением судна, разработанные на основе известных алгоритмов и доступные стороннему разработчику, а также коллекцию примеров использования внешнего программного интерфейса комплекса, что облегчает сторонним разработчикам процесс ознакомления с доступными средствами разработки и набором доступных сигналов и данных симуляции.

Библиотека прототипов реализуется на языке Python на основе внешних программных интерфейсов, предоставляемых компонентом `Шлюз программного интерфейса` ([ashapi](https://pypi.org/project/ashapi/)). Таким образом системы управления, реализованные в библиотеке прототипов, получают доступ ко всем данным симуляции и осуществляют управление через `Шлюз программного интерфейса`.

Исследователь, который использует имитационный программный комплекс как интегрированную среду для разработки и тестирования своих проектов в сфере автономного судовождения, может воспользоваться предоставленными системами управления и/или алгоритмами напрямую для проведения испытания, или включить их в код своего проекта, что позволит ускорить разработку более высокоуровневых систем управления.

## Примеры использования

### Tutorials

В модуле `tutorials` даны примеры использования модуля `ashapi` совместно с ИПКАС:

- `tutorials/objects`

  Примеры работы с данными ИПКАС (получение списка моделей, областей маневрирования,сцен, записей и обработка этих данных).

- `tutorials/environment`

  Примеры получения свойств и установки настроек окружающей среды проводимого испытания (ветер, волнение, течение, время суток, условия видимости и погодные условия).

- `tutorials/objects`

  Примеры получения набора объектов в проводимом испытании, получение их свойств и управление параметрами объектов и оборудования, добавление объектов.

- `tutorials/recording`

  Примеры загрузки сохранённых файлов записи испытаний и работы с ними (запуск воспроизведения, перемотка времени, установка скорости воспроизведения, пошаговое воспроизведение и прочее).

- `tutorials/routes`

  Примеры получения набора маршрутов в проводимом испытании, получение данных о наборе точек маршрута и их свойств, добавление и редактирование маршрутов.

- `tutorials/scene`

  Примеры загрузки сохранённых сцен испытаний, создание новых сцен, и примеры работы с данными сцены (получение набора объектов, маршрутов и т.п.).

- `tutorials/simulation`

  Примеры управления симуляцией (запуск, пауза, изменение скорости симуляции, пошаговое исполнение).

### Autopilot

В модуле `autopilot` дан пример реализации модели автопилота. Приведены реализации регуляторов управления курсом и скоростью судна, а также реализация регулятора, осуществляющего управление судном для удержания его на маршруте.

Примеры использования регуляторов для управления судном в ИПКАС даны в модуле `tutorials`:

  - Управление курсом:

    `tutorials/objects/cargo_keep_course.py`

  - Управление скоростью:

    `tutorials/objects/cargo_keep_speed.py`

  - Удержание на маршруте:

    `tutorials/routes/tuga_follow_route.py`


### Routes

В модуле `routes` даны реализация алгоритмов построения графов и поиска пути в графе, которые могут быть использованы для построения навигационных маршрутов в акватории. Построение графов производится на основе данных области маневрирования ИПКАС.

Примеры построения маршрутов в области маневрирования ИПКАС даны в модуле `tutorials`:

  - Построение маршрута по алгоритму А* (поиск кратчайшего пути) на графе, в основе которого лежит разбиение области на квадратные ячейки (вершины графа), а рёбрами являются 8 ближайших (соседних) ячеек:

    `tutorials/routes/build_astar_path_on_area_neighbours_graph.py`

  - Построение маршрута по алгоритму Беллмана-Форда (поиск кратчайшего пути), с использованием графа на вершинах буферного полигона:

    `tutorials/routes/build_bellman_ford_path_on_area_polygon_graph.py`

  - Построение маршрута по алгоритму Дейкстры (поиск пути) на графе "все со всеми", в основе которого лежит разбиение области на квадратные ячейки (вершины графа), а рёбрами являются все ячейки, доступные из вершины по прямой:

    `tutorials/routes/build_dijkstra_path_on_area_all_to_all_graph.py`


## Установка

```
$ pip install ashapipro
```

## Зависимости

- [**simcomplex** (ИПКАС - Имитационный Программный Комплекс Автономного Судовождения)](https://www.simtech.spb.ru/ipkas)

- [**Python**](https://www.python.org/) **>= 3.8**

- [**ashapi**](https://pypi.org/project/ashapi/)

- [**geopandas**](https://pypi.org/project/geopandas/)

- [**networkx**](https://pypi.org/project/networkx/)

- [**folium**](https://pypi.org/project/folium/)

- [**matplotlib**](https://pypi.org/project/matplotlib/)

- [**mapclassify**](https://pypi.org/project/mapclassify/)

