Pepper Robot: как перенести обнаружение ориентиров Python в Choregraphe?

Я пытаюсь написать небольшую программу, чтобы Пеппер проверяла ориентиры внутри комнаты через Choregraphe. Обычный код Python для определения ориентиров работает нормально, но я не могу перенести его на Choregraphe. http://doc.aldebaran.com/2-5/dev/python/examples/vision/landmark.html

Я уже мог импортировать простой файл Python в Choregraphe в соответствии с этим видео, но всегда возникает ошибка при выполнении этого с обнаружением ориентира. https://www.youtube.com/watch?v=orDWxHQxw5s

Этот код

введите описание изображения здесь

дает это сообщение об ошибке:

[ERROR] behavior.box :createPythonModule:0
_Behavior__lastUploadedChoregrapheBehaviorbehavior_11118986952:/Landmark 
Detektor_1: Box creation failed with the error: <type 
'exceptions.RuntimeError'> Application was already initialized

Как мне успешно перенести обнаружение ориентиров Python в код Choregraphe?

Привет Фредерик


person Frederik Best    schedule 19.06.2018    source источник


Ответы (1)


Я бы не рекомендовал делать слишком много кастомного Python прямо в Choregraphe. Конечно, это возможно, но часто бывает сложно отлаживать и поддерживать.

Причина, по которой они работают по-разному, заключается в том, что автономные сценарии Python должны заботиться о подключении к роботу, управлении сеансами и т.д., и все это уже обрабатывается, когда Python выполняется в Choregraphe.

Итак, некоторые подходы:

  • Попробуйте сделать это внутри коробки для хореграфа, как вы это делаете. Я не рекомендую это, но в основном вам не нужен qi.Application, а внутри коробки вы можете получить сеанс с self.session() (вместо application.session или ALProxy в автономном Python). Это будет работать, но будет сложно отслеживать ваш проект с помощью системы управления версиями и трудно его отлаживать (например, если у вас где-то бесконечный цикл, он может продолжать работать, даже если поведение остановлено, и все ваши журналы будут потеряно посреди всех остальных журналов NAOqi).
  • Поместите свой код во внешнюю библиотеку (без qi.Application и т. Д.) И внутри Choregraphe: добавьте путь этой библиотеки к sys.path, чтобы вы могли импортировать его и использовать. Это упростит обслуживание и организацию кода, но при этом по-прежнему будут возникать те же проблемы с отладкой (но я все еще видел, как он использовался в успешных приложениях).
  • Выполните свой код как процесс вне Choregraphe - на этот раз вам нужно сохранить qi.Application () и т. Д. И запустить этот скрипт из Choregraphe. Вы можете увидеть пример этой работы в robot-jumpstarter, в частности в проекте "pythonapp", который номинально является поведением Choregraphe, но все, что он делает, это запускает внешний скрипт, который содержит всю логику (и если скрипт дает сбой, он останавливает приложение, а если приложение останавливается, оно останавливает скрипт, без каких-либо шансов на то, что код призрачного Python все еще работает так же, как и в случае с Choregraphe, и ваши журналы находятся в отдельном файле в /var/log/naoqi/servicemanager/). Я обычно так и делаю.

(отредактируйте, чтобы добавить) Одним из преимуществ этого последнего подхода является то, что вы можете запускать автономный скрипт Python на своем рабочем компьютере (передавая --qi-url your-peppers-ip в качестве параметра командной строки) во время его тестирования (так что вы получаете все ваши журналы прямо в вашей любимой среде IDE и только эти журналы), и как только вы будете удовлетворены результатом, установите его на роботе с помощью Choregraphe).

person Emile    schedule 19.06.2018
comment
Большое спасибо, Эмиль! Я собираюсь попробовать это в последнем подходе и поддерживать с вами связь. Ага, призрачный питон очень часто работает с моим Пеппером ... - person Frederik Best; 19.06.2018