2015-10-16 4 views
1

Большинство программ и примеров, которые я видел инициирует rospy абонента в функции, такие какДолжен ли абонент rospy быть в функции?

def listener(): 
    rospy.Subscriber('/heylookitsanoutput',Image,imagecallback) 
    rospy.spin() 

Но это необходимо, чтобы держать это внутри функции? Может ли он работать как MQTT, где вы бросаете подписчика в начале функции, с обратным вызовом, выполненным при просмотре чего-либо сообщения в подписанной теме?

Я могу понять необходимость сделать это, так как вам, вероятно, понадобится rospy.spin(), чтобы ждать ввода, который вы ищете, но если обратный вызов может быть вызван как прерываемое событие, это может быть лучше для моего сценарий (обновление окон изображений при появлении новых изображений).

Спасибо!

ответ

1

Вы можете инициировать абонент rospy также вне функции, i.e в блоке if __name__ == "__main__":. Его поведение было бы абсолютно таким же, с обратным вызовом, выполненным, увидев что-то сообщение в подписке.

Я думаю, что основной смысл встраивания этой команды внутри функции - это возможность легко импортировать их в какой-либо другой модуль и получить лучшую организацию кода.

Смежные вопросы