Как я могу подписаться на событие, используя функцию ALMemory
subscribeToEvent
, которая требует правильной области действия Python при использовании ROS (rospy), который запускает модули вне моего кода?
Этот вопрос похож на этот вопрос о подписке для Naoqi , но отличается тем, что rospy не использовался, что крайне важно для реализации.
Мой текущий код как таковой;
mainBehaviour.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)
Я хочу, чтобы mainBehaviour.py, используя nao.py, имел функцию robotHasFallen
срабатывать при падении робота. Тем не менее, текущий код не производит это поведение (он игнорирует любое падение), но также не выдает ошибку. Я попытался реализовать это, используя этот учебник ALMemory . Тем не менее, это руководство использует один файл Python, в котором методы не создаются ROS. Поэтому я не могу использовать строку pythonModule = myModule("pythonModule")
. Я попытался все еще получить эту область видимости Python (в которой ответ на ранее связанный вопрос гласит: «переменная python должна иметь то же имя, что и имя создаваемого вами модуля»), объявив глобальную переменную, указывающую на self
.
Как я могу создать желаемое поведение, обнаружив упавшего робота с помощью subscribeToEvent
, используя ROS с его последствиями - я сам не запускаю модули и, следовательно, не могу передать его конструктор?
Я не могу установить дополнительные библиотеки, потому что использую университетский компьютер.