Package: ashapi
ashapiASHAPI-AutonomousShipHandlingApplicationProgrammingInterface - компонентШлюз программного интерфейсаИмитационного Программного Комплекса Автономного Судовождения (ИПКАС).Шлюз программного интерфейса(ШПИ) обеспечивает открытость системы компьютерного моделирования сценариев автономного судовождения для сторонних разработчиков.
ФункциональностьШПИдублирует функциональность компонентаИспытатель, однако вместо предоставления графического интерфейса для управления исследованием вручную,ШПИпредоставляет программный интерфейс для реализации автоматизированных сценариев, осуществляющих компьютерное моделирование, загрузку, сбор и анализ данных, управление судном и другие возможности.ШПИявляется клиентом сервера, имеет доступ ко всем параметрам внутреннего двустороннего протокола передачи данных, и предназначен для передачи данных симуляции стороннему приложению, приема управляющих команд и данных от стороннего приложения для управления симуляцией.ШПИпозволяет подключать к объектам сцены симуляции алгоритмы автономного судовождения, написанные на языках высокого уровня, запускать и отлаживать их.ШПИпредоставляет функции для управления временем симуляции, добавления моделей судов в сцену, считывания показаний датчиков и состояния моделируемых систем судна, управление движителями, рулями и другими исполнительными устройствами, загрузки данных областей маневрирования, маршрутов и т.п.Ключевой особенностьюШПИявляется возможность перезагрузки или переключения алгоритмов в любой момент без необходимости перезагрузки текущей сцены симуляции, к которой подключен интерфейс. Такая возможность ускоряет цикл «изменение-отладка», поскольку состояние сцены симуляции не уничтожается и может быть использовано снова в точке, где произошел сбой отлаживаемой программы или требуется переключение на другую систему управления.Пример использованияДля написания собственного сценария проще всего отнаследоваться от определённого вШПИклассаSimcomplexTask, переопределить пару волшебных методов, подписаться на события симуляции и выполнить задание. В примере ниже показано как распечатать перечень объектов, доступных в симуляции:from ashapi import Config, SimcomplexTask, local_server


class SceneObjectsTask(SimcomplexTask):

    def init(self, path):
        self.scene_path = path

    def setup(self):
        self.done = False
        print(f"Opening scene '{self.scene_path}'")
        self.scene.open(
            self.scene_path,
            self.on_scene_opened
        )

    def on_scene_opened(self, response):
        print(f"Opened scene: '{self.scene_path}'")
        print(f"Opened scene contains {len(self.scene.objects)} object(s).")
        if self.scene.objects:
            print("Objects:")
            for o in self.scene.objects:
                print(f'    {o.uid}: {o.code}, "{o.name}"')
        self.done = self.scene.path == self.scene_path
        self.complete()

    def result(self):
        return self.done



if __name__ == '__main__':

    config = Config.localhost()

    with local_server(config):

        task = SceneObjectsTask(config, "api/all_models_nv.stexc")

        result = task.run()Установка$ pip install ashapiЗависимостиPython>= 3.8aiohttpsimcomplex(ИПКАС - Имитационный Программный Комплекс Автономного Судовождения)