2

I would like to stop and start ALTactileGesture service through ServiceManager during my app. I'm using Choregraphe and python boxes. I have tried different options to initiate ServiceManager but none of them works. Is there any way of doing this?

Edit:

I have already tried self.sm = session.service('ServiceManager') but did not work. The idea is to stop ALTactileGesture as soon as the app has started:
(1) ServiceManager.stopService('ALTactileGesture') (see this)

and start/restart ALTactileGesture before the application ends:
(2) ServiceManager.startService('ALTactileGesture')

My question is how to reach ServiceManager so I can then use (1) and (2)?

4

2 回答 2

1

你要明白,“服务”这个词在NAOqi里其实是两个不同的意思。在这里查看解释

NAOqi 服务(也称为“模块”),公开 API 并注册到 ServiceDirectory。您可以使用 qicli 调用他们,订阅他们的信号等。

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

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

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

ALServiceManager.stop("ALTactileGesture-serv")

(我刚刚测试过,效果很好)

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

于 2017-12-29T13:43:31.277 回答
1

只需在机器人外壳中试试这个(旧式代理连接):

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

所以我认为它没有完全工作,但至少你可以按要求连接到 ServiceManager ......

于 2017-11-10T17:45:33.423 回答