如何使用ALMemory
'ssubscribeToEvent
函数订阅事件,该函数需要正确的 Python 范围,同时使用 ROS(rospy)在我的代码之外启动模块?
这个问题和这个 Naoqi 订阅问题类似,但不同之处在于没有使用 rospy,这对实现至关重要。
我当前的代码就是这样;
主要行为.py
from nao.nao import Nao
class mainBehaviour(AbstractBehaviour):
def init(self):
global mainBehaviourMethod
mainBehaviourMethod = self
self.nao.setCallOnFall("mainBehaviourMethod", "robotHasFallen")
def update(self):
print("Update")
def robotHasFallen(self, eventName, val, subscriberIdentifier):
print("FALLING")
nao.py
from naoqi import ALProxy, ALModule, ALBroker
import rospy
from math import radians
import weakref
class Nao(object):
def __init__(self):
self.nao_ip = rospy.get_param("nao_ip")
self.port = 9559
self.memory_proxy = ALProxy("ALMemory", self.nao_ip, self.port)
def setCallOnFall(self, module, method):
self.memory_proxy.subscribeToEvent("robotHasFallen", module, method)
我想要的是使用 nao.py 的 mainBehaviour.py robotHasFallen
在机器人跌倒时触发其功能。但是,当前代码不会产生这种行为(它忽略任何下降),但也不会产生错误。我尝试使用此 ALMemory 教程来实现这一点。但是,本教程使用单个 python 文件,其中的方法不是由 ROS 实例化的。因此我无法使用 line pythonModule = myModule("pythonModule")
。我试图通过声明一个指向self
.
如何创建所需的行为,subscribeToEvent
使用 ROS 检测倒下的机器人,其后果是自己不启动模块,因此无法传递其构造函数?
我无法安装任何其他库,因为我使用的是大学计算机。