Как заставить модуль функционировать и быть узнаваемым из хореографии на роботе Nao? - PullRequest
0 голосов
/ 31 августа 2018

Я использую робота Nao и Python SDK и пытаюсь создать свой собственный модуль для него. Сейчас это просто фиктивный модуль с одной функцией: getJoke().

У меня есть файл tellAJoke.py, расположенный под путем /home/nao/tellAJoke.py, и я обновил файл autoload.ini, добавив в него следующее:

[python]
/home/nao/tellAJoke.py

Когда я загружаю робота, он говорит, что он обычно делает при запуске, но также и то, что возвращает моя getJoke() функция: «Это плохая шутка».

Я не уверен, что я делаю здесь не так. Когда я запускаю код на ssh и запускаю код, он работает нормально, но никогда, когда я хочу импортировать модуль с ALProxy в Хореографии.

РЕДАКТИРОВАТЬ: я добавил фактический фиктивный код, который у меня есть.

from naoqi import ALBroker
from naoqi import ALModule
from naoqi import ALProxy
import sys

class JokerModule(ALModule):
    """Tells you a random joke"""
    def __init__(self, name):
        print "WE HAVE INITED"


        self.tts = ALProxy("ALTextToSpeech")
        ALModule.__init__(self, name)

        global memory
        memory = ALProxy("ALMemory")
        memory.subscribeToEvent("SayingJoke", "Joker", "getJoke")

    def getJoke(self, *_args):
        """Returns a joke"""
        self.tts.say("Joke time!")

def main():
    """main entry point"""
    pip = '192.168.1.104'
    pport = 9559

    myBroker = ALBroker("myBroker", '0.0.0.0', 0, pip, pport)

    global Joker
    Joker = JokerModule("Joker")
    speechProxy = ALProxy("ALTextToSpeech")
    Joker.getJoke()

if __name__ == '__main__':
    main()

1 Ответ

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

Вот руководство по созданию сервисов (он же «модули», но этот термин сбивает с толку, потому что он имеет другое значение в Python): http://doc.aldebaran.com/2-4/dev/libqi/guide/py-service.html (этот документ для NAOqi 2.4, но все должно работать в основном одинаково для 2.1, который чаще используется на NAO)

Но, возможно, вы захотите попробовать Robot Jumpstarter , который содержит шаблоны для различных типовых проектов, включая службу python (которая работает, как описано в документе выше).

клонируйте его и запустите python jumpstart.py python-service Tell-A-Joke TellAJoke

... и он сгенерирует проект, который вы можете:

  • установить на робота ведьму Хореграф
  • запускать в автономном режиме с python, расскажи анекдот / app / scripts / tellajoke.py --qi-url your-naos-ip

... и в обоих случаях вы сможете звонить из ящиков с хореографом и т. Д.

(редактировать)

Теперь, когда вы опубликовали свой код - в данном конкретном случае ваша проблема заключается только в том, что после Joker.getJoke () ваша программа достигает конца и завершается. Обычный «современный» способ сделать это будет с помощью qi.Application (), которая будет .run () (все, что делается в шаблоне Jumpstarter). Вы можете сделать некоторое время True: sleep (1) или что-то, что не очень красиво, но будет работать (я рекомендую перейти на NAOqi 2, и вместо использования ALProxy и ALBroker используйте session.service и qi.Application ... два совместимы)

...