Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python和ROS订阅Naoqi中的事件?_Python_Ros_Nao Robot_Rospy - Fatal编程技术网

如何使用Python和ROS订阅Naoqi中的事件?

如何使用Python和ROS订阅Naoqi中的事件?,python,ros,nao-robot,rospy,Python,Ros,Nao Robot,Rospy,如何使用ALMemory的subscribebetoEvent函数订阅事件,该函数需要正确的Python作用域,同时使用ROS(rospy)在我的代码之外启动模块 这个问题与rospy类似,但不同之处在于没有使用rospy,这对实现至关重要 我目前的代码就是这样 main.py nao.py 我想要的是mainBehavior.py,使用nao.py,有它的函数robothasfold在机器人摔倒时开火。但是,当前代码不会产生这种行为(它会忽略任何下降),但也不会产生错误。我尝试使用。但是,本教

如何使用
ALMemory
subscribebetoEvent
函数订阅事件,该函数需要正确的Python作用域,同时使用ROS(rospy)在我的代码之外启动模块

这个问题与rospy类似,但不同之处在于没有使用rospy,这对实现至关重要

我目前的代码就是这样
main.py

nao.py

我想要的是mainBehavior.py,使用nao.py,有它的函数
robothasfold
在机器人摔倒时开火。但是,当前代码不会产生这种行为(它会忽略任何下降),但也不会产生错误。我尝试使用。但是,本教程使用单个python文件,其中的方法不是由ROS实例化的。因此,我无法使用行
pythonModule=myModule(“pythonModule”)
。我试图通过声明一个指向
self
的全局变量来获得这个Python作用域(在这个作用域上,前面链接的问题的答案指出“Python变量必须与您创建的模块名同名”)

如何创建所需的行为,使用
subscribeToEvent
检测坠落的机器人,使用ROS,其后果是自己没有启动模块,因此无法通过其构造函数?

我无法安装任何其他库,因为我使用的是大学计算机。

您的示例代码使用“naoqi”库,但现在使用“qi”库更方便了(您可以使用“pip install qi”获得它,它已经在您的robot 2.1或更高版本中出现)。在该版本中,您可以直接传递回调,有关允许您执行
事件.connect(“MyALMemoryKey”,my_回调)”的帮助程序库,请参阅(传递函数,而不仅仅是它的名称,它不关心函数来自何处)

在引擎盖下,它可以执行以下操作:

ALMemory.subscriber("MyALMemoryKey").signal.connect(my_callback)
(注意,这里ALMemory是一个服务(qi框架),而不是一个模块(naoqi框架)


您可以直接使用该助手库(参见文档,以及使用它的一些示例),或者在代码中使用相同的逻辑(只要有一个工作示例开始,就不会太复杂)。

您的示例代码使用“naoqi”库,但现在使用“qi”库更方便了(您可以通过“pip install qi”获得它),在版本2.1或更高版本中,它已经出现在您的robot上)。在该版本中,您可以直接传递回调,有关允许您执行
事件的帮助程序库,请参阅。connect(“MyALMemoryKey”,my_回调)
(您传递函数,而不仅仅是它的名称,它不关心函数来自何处)

在引擎盖下,它可以执行以下操作:

ALMemory.subscriber("MyALMemoryKey").signal.connect(my_callback)
(注意,这里ALMemory是一个服务(qi框架),而不是一个模块(naoqi框架)


您可以直接使用该帮助程序库(参见文档,以及使用它的一些示例),或者在代码中使用相同的逻辑(只要有一个可用的示例开始,就不会太复杂)。

谢谢!不幸的是,我们使用的是大学计算机,无法安装任何其他库。使用“在代码中使用相同的逻辑”你的意思是也要使用connect()函数?那么我如何获得订户(使用naoQi)?你甚至不能用pip install--user安装其他库?这不需要任何超级用户权限;你也可以在这里下载Python SDK:(如果你没有注册(免费)帐户,你可能会得到“不允许”)谢谢!很遗憾,我们使用的是大学计算机,无法安装任何其他库。使用“在代码中使用相同的逻辑”时,您的意思是同时使用connect()函数?那么我如何获得订户(使用naoQi)?您甚至不能使用pip install--user安装其他库?这不需要任何超级用户权限;您也可以在此处下载Python SDK:(如果您没有注册(免费)帐户,您可能会得到“不允许”)您好,您能试着在mainBehavior.py开头声明一个变量吗:“mainBehavior Method=None”(因为稍后只说global不足以真正创建具有全局作用域的变量)您好,您能否尝试在变量的mainBehavior.py开头使用初始声明:“mainBehavior Method=None”(因为以后只说global不足以真正创建具有全局范围的变量)
ALMemory.subscriber("MyALMemoryKey").signal.connect(my_callback)