Как импортировать модули (используя относительно большие пакеты внутри них) в приложении в Choregraphe? - PullRequest
0 голосов
/ 24 августа 2018

В эти дни я борюсь с приложением, которое я создал с помощью проекта Github: Pepper Project robot-jumpstarter

В начале все работало очень хорошо, но после того, как я добавил модуль в папку «scripts» (как на картинке 1), больше нет. Моя основная идея - импортировать класс из «IntersectionPointOfTwoCircles.py» в «main_localization.py», чтобы основная работа работала нормально. PathForMainAndSoOn

И поскольку пакеты «sympy» и «numpy» нужны в «IntersectionPointOfTwoCircles.py», сначала я попытался поместить эти два пакета в папку «scripts», но это привело к тому, что Choregraphe очень часто реагировал только примерно через 5-10 минут или иногда не реагирует. Вот как выглядит путь «локализации» pml-файла Choregraphe:

PathForChoregraphePMLFile

Тогда я позволил пакетам теперь находиться вне папки приложения.

PathForImpoartedPackages

Код для «Main_localization»:

class MyClass(GeneratedClass):
    executable_id = "localization"
    def onLoad(self):
        self.listener_id = None
        self.executable_manager = self.session().service("ALServiceManager")
        executable_name = self.getParameter("Executable Name")
        if ALProxy("ALSystem").systemVersion() < "2.3":
            self.executable_id = executable_name
        if "." not in executable_name:
            self.logger.info("Warning: You will have conflicts if several packages have executables called '%s'" % executable_name)
            self.logger.info("Use a newer version of NAOqi to have executables prefixed with the package ID, or prefix it yourself, in the form with <package>.<executable ID>")
        else:
            self.executable_id = self.packageUid() + "." + executable_name

    def disconnect(self):
        try:
            self.executable_manager.serviceStopped.disconnect(self.listener_id)
        except Exception as e:
            pass

    def onUnload(self):
        self.executable_manager.stopService(self.executable_id)
        self.disconnect()

    def onInput_onStart(self):
        self.listener_id = self.executable_manager.serviceStopped.connect(self.onExecutableStopped)
        if not self.executable_manager.startService(self.executable_id):
            self.logger.info("Failed to start App Executable '%s', stopping." % repr(self.executable_id))
            self.onStopped()
            self.disconnect()

    def onExecutableStopped(self, stopped_executable, reason):
        if stopped_executable == self.executable_id:
            self.logger.info("App Executable Stopped: " + self.executable_id)
        self.onStopped()
        self.disconnect()

    def onInput_onStop(self):
        self.onUnload()
        self.onStopped()

И сообщение об ошибке:

[INFO ] .box :onInput_onStart:29 _Behavior__lastUploadedChoregrapheBehavior1081224720:/Localization_19: Failed to start App Executable ''.lastUploadedChoregrapheBehavior.output.localization'', stopping. 
[INFO ] behavior.box :onInput_onStart:29 _Behavior__lastUploadedChoregrapheBehavior1069884112:/Localization_19: Failed to start App Executable ''.lastUploadedChoregrapheBehavior.output.localization'', stopping. 
[INFO ] behavior.box :onInput_onStart:29 _Behavior__lastUploadedChoregrapheBehavior1149770056:/Localization_19: Failed to start App Executable ''.lastUploadedChoregrapheBehavior.output.localization'', stopping. 

Кто-нибудь знает, что я могу сделать сейчас?

1 Ответ

0 голосов
/ 24 августа 2018

Ваши библиотеки Python действительно должны быть в вашем пакете, в идеале в вашей папке "scripts" с другими вашими модулями Python, чтобы вы могли импортировать их.

Если библиотеки большие, это действительно может сделать ваш проект красивымбольшой, и, следовательно, установка с Choregraphe довольно медленная, но это обязательно произойдет, если вы захотите включить эти библиотеки.Если вы поместите эти библиотеки за пределы папки «app», они не будут включены в пакет, скопированный на робота, поэтому они не смогут работать после установки на роботе.

ОДНАКО - numpy уже должен бытьустановлен на вашем роботе, нет необходимости включать его в свой пакет!Этого может быть достаточно, чтобы сделать ваш пакет меньше (numpy довольно большой).

(редактировать) Вы также можете установить библиотеки с PIP, как объяснено в ответе здесь: Установить вещи на Pepper

pip install --user --upgrade pip

/home/nao/.local/bin/pip install --user whatever-package-you-need

Вам нужно будет сделать то же самое тонкое на каждом роботе, на котором вы хотите использовать свой пакет.

...