如何发起Aldebaran ServiceManager?

问题描述 投票:2回答:2

我想在我的应用程序中停止并通过ALTactileGesture启动ServiceManager服务。我正在使用Choregraphe和python盒子。我尝试了不同的选项来启动ServiceManager,但没有一个可行。有没有办法做到这一点?

编辑:

我已经尝试过self.sm = session.service('ServiceManager')但没有奏效。这个想法是在应用程序启动后立即停止ALTactileGesture: (1)ServiceManager.stopService('ALTactileGesture')(见this

并在应用程序结束前启动/重启ALTactileGesture: (2)ServiceManager.startService('ALTactileGesture')

我的问题是如何到达ServiceManager所以我可以使用(1)和(2)?

nao-robot pepper choregraphe
2个回答
1
投票

你必须明白,“服务”这个词在NAOqi中实际上意味着两个不同的东西。见an explanation here

NAOqi服务(也称为“模块”),它公开API并注册到ServiceDirectory。你可以用qicli打电话给他们,订阅他们的信号等。

systemd服务,它是打包在应用程序包中的独立可执行文件,在其带有标记的清单中声明。这些由ALServiceManager管理,他们可以启动和停止它们(它们将拥有自己的进程)。为清楚起见,这些文档中称为“可执行文件”。

两者之间的混淆是因为一个共同的模式是编写一个可执行文件,其唯一目的是运行NAOqi服务,有时用同一名称识别两者(例如,两者都被称为“ALFuchsiaBallTracker”)。

你的问题是NAOqi服务ALTactileGesture是由在ALTactileGesture-serv ID下注册的可执行文件运行的。所以你需要这样做

ALServiceManager.stop("ALTactileGesture-serv")

(我刚试过它,它工作正常)

(编辑)顺便说一句,我不确定实际上停止和启动ALTactileGesture是做你想做的事情的最佳方式(对我来说似乎有些笨拙),但是如果你想这样做的话,这是如何:)


1
投票

只需在机器人shell(旧式代理连接)中尝试此操作:

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

所以我认为它不是完全有效,但至少你可以按要求连接到ServiceManager ......

© www.soinside.com 2019 - 2024. All rights reserved.