我想在我的应用中停止并通过ALTactileGesture
启动ServiceManager
服务。我正在使用Choregraphe
和python框。我尝试了不同的选项来启动ServiceManager
,但没有一个可行。有没有办法做到这一点?
编辑:
我已经尝试self.sm = session.service('ServiceManager')
但是没有用。
我们的想法是在应用启动后立即停止ALTactileGesture
:
(1)ServiceManager.stopService('ALTactileGesture')
(见this)
并在应用程序结束前启动/重新启动ALTactileGesture
:
(2)ServiceManager.startService('ALTactileGesture')
我的问题是如何到达ServiceManager
,以便我可以使用(1)和(2)?
答案 0 :(得分:1)
在机器人外壳(旧式代理连接)中试试这个:
$ python
import naoqi
s = naoqi.ALProxy("ALServiceManager", "localhost", 9559 )
s.stopService('ALTactileGesture')
>>> False
s.startService('ALTactileGesture')
>>> False # (a bit weird, but ...)
所以我认为它没有完全正常工作,但至少你可以按要求连接到ServiceManager ......
答案 1 :(得分:1)
你必须明白,“服务”这个词在NAOqi中实际上意味着两个不同的东西。见an explanation here:
NAOqi服务(也称为“模块”),公开API并且是 注册到ServiceDirectory。你可以用qicli打电话给他们, 订阅他们的信号等。
systemd services ,它们是一个打包的独立可执行文件 应用程序包,在其带有标记的清单中声明。 这些由ALServiceManager管理,ALServiceManager可以启动和停止它们 (他们将有自己的过程)。为了清楚起见,这些是 在本文档中称为“可执行文件”。
两者之间的混淆因共同的事实而增加 模式是编写一个可执行文件,其唯一目的是运行NAOqi 服务,有时用同一名称识别两者(例如两者 被称为“ALFuchsiaBallTracker”)。
您的问题是NAOqi服务ALTactileGesture
由在ID ALTactileGesture-serv
下注册的可执行文件运行。所以你需要做
ALServiceManager.stop("ALTactileGesture-serv")
(我刚刚测试过,它工作正常)
(编辑)顺便说一下,我不确定实际停止和启动ALTactileGesture是做你想做的事情的最佳方式(对我来说似乎有些笨拙),但 if < / em>你想这样做,这就是:)