Как я могу подписаться на событие, используя функцию subscribeToEvent
ALMemory
, для которой требуется правильная область действия Python при использовании ROS (rospy), которая инициирует модули вне моего кода?
Этот вопрос похож на этот вопрос о подписке Naoqi, но отличается тем, что не использовался роспы, что критично для реализации.
Мой текущий код таков:
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 с его последствиями, когда я не инициирую модули самостоятельно и, следовательно, не могу передать его конструктор?
Я не могу установить дополнительные библиотеки, потому что я использую университетский компьютер. .