Как заставить модуль функционировать и быть узнаваемым из Choreographe на роботе Nao?

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

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

[python]
/home/nao/tellAJoke.py

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

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

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

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()

person Nicholas Hernandez    schedule 30.08.2018    source источник


Ответы (1)


Вот руководство по созданию сервисов (он же «модули», но этот термин сбивает с толку, потому что он имеет другое значение в 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

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

  • установить на робота ведьму Choregraphe
  • работать в автономном режиме с помощью python tell-a-joke / app / scripts / tellajoke.py --qi-url your-naos-ip

... и в обоих случаях вы сможете вызвать его из ящиков Choregraphe и т. д.

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

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

person Emile    schedule 31.08.2018
comment
Спасибо за это, Robot Jumpstarter кажется действительно удобным для использования в будущем, но я думаю, что моя проблема немного другая. Я могу создать модуль (службы используют qiMessaging, который мы еще не пытаемся использовать), однако я не могу установить его на роботе, чтобы он распознал его как модуль или хореографический блок. - person Nicholas Hernandez; 31.08.2018
comment
ах, теперь, когда вы добавили свой код, я обновил его. Я думаю, ваша проблема в том, что ваша программа завершается. Кстати, у вас есть особая причина не использовать qimessaging? - person Emile; 31.08.2018
comment
В документации к используемой нами версии указано, что она находится в стадии бета-тестирования. Так что мы этим еще не пользовались. - person Nicholas Hernandez; 10.09.2018