Как инициировать Aldebaran ServiceManager?

Я хочу остановить и запустить службу ALTactileGesture через ServiceManager во время моего приложения. Я использую коробки Choregraphe и python. Я пробовал разные варианты запуска ServiceManager, но ни один из них не работает. Есть ли способ сделать это?

Редактировать:

Я уже пробовал self.sm = session.service('ServiceManager'), но не получилось. Идея состоит в том, чтобы остановить ALTactileGesture сразу после запуска приложения:
(1) ServiceManager.stopService('ALTactileGesture') (см. это)

и запустить/перезапустить ALTactileGesture до завершения работы приложения:
(2) ServiceManager.startService('ALTactileGesture')

Мой вопрос: как добраться до ServiceManager, чтобы я мог использовать (1) и (2)?


person dim    schedule 08.11.2017    source источник
comment
Я думаю, что служба запущена по умолчанию, вам просто нужно подключиться к сигналу/событию, создаваемому этим модулем (в некоторых версиях это подписка, которая запускает службу). Вы видели такую ​​страницу: doc.aldebaran.com /2-4/naoqi/sensors/altactilegesture.html   -  person Alexandre Mazel    schedule 09.11.2017
comment
@AlexandreMazel, это полезная ссылка, но, к сожалению, она не работает. Я обновил свой вопрос, чтобы быть более ясным.   -  person dim    schedule 09.11.2017
comment
Ваш вопрос решился? тогда отметь правильный ответ   -  person Oswald    schedule 25.03.2018


Ответы (2)


Вы должны понимать, что слово «сервис» на самом деле означает две разные вещи в NAOqi. См. объяснение здесь:

Службы NAOqi (также называемые «модулями»), которые предоставляют API и регистрируются в ServiceDirectory. Вы можете звонить им с помощью qicli, подписываться на их сигналы и т. д.

службы systemd, которые представляют собой автономные исполняемые файлы, упакованные в пакет приложения, объявленные в его манифесте тегом. Они управляются ALServiceManager, который может запускать и останавливать их (у них будет свой собственный процесс). Для ясности в этом документе они называются «исполняемыми файлами».

Путаница между ними усугубляется тем фактом, что распространенным шаблоном является написание исполняемого файла, единственной целью которого является запуск службы NAOqi, а иногда идентификация обоих с одним и тем же именем (например, оба называются «ALFuchsiaBallTracker»).

Ваша проблема в том, что служба NAOqi ALTactileGesture запускается исполняемым файлом, зарегистрированным под идентификатором ALTactileGesture-serv. Так что вам нужно сделать

ALServiceManager.stop("ALTactileGesture-serv")

(только что проверил, все работает)

(редактировать) кстати, я не уверен, что на самом деле остановка и запуск ALTactileGesture - лучший способ сделать то, что вы пытаетесь сделать (мне это кажется немного хакерским), но if хочешь сделать так, вот как :)

person Emile    schedule 29.12.2017

Просто попробуйте это в оболочке робота (прокси-соединение старого стиля):

$ python
import naoqi
s = naoqi.ALProxy("ALServiceManager", "localhost", 9559 )
s.stopService('ALTactileGesture')
>>> False
s.startService('ALTactileGesture')
>>> False # (a bit weird, but ...)

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

person Alexandre Mazel    schedule 10.11.2017
comment
Это полезно, но, к сожалению, не сработало. Моя цель — остановить службу ALTactileGesture во время приложения, потому что робот теряет фокус при прикосновении к голове из-за приложения dialog_touch из основного канала. - person dim; 13.11.2017
comment
Тогда это еще одна причина, см. stackoverflow.com/a/46208416/912510. - person JLS; 14.11.2017