2016-11-06 6 views
0

Итак, я пытаюсь создать программу в ROS, используя Python, который публикует изображения, но у меня есть две вещи, которые я импортирую, которые называются «Image». Когда я запускаю программу, я получаю это сообщение об ошибке.Модель подписчика подписчика перегруженных имен

File "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/topics.py", line 812, in __init__ 
    super(Publisher, self).__init__(name, data_class, Registration.PUB) 
    File "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/topics.py", line 138, in __init__ 
    raise ValueError("data_class [%s] is not a class"%data_class) 
ValueError: data_class [<module 'PIL.Image' from '/usr/lib/python2.7/dist-packages/PIL/Image.pyc'>] is not a class 

Когда я вынимаю линии импортеров PIL изображения и ImageFilter, линия инициализации image1, а линия публикации image1, программа прекрасно работает, потому что (я думаю), что нет никакой путаницы между двумя импортированными объектами изображения. Есть ли способ рассказать программе о различии между двумя изображениями?

#!/usr/bin/env python 

import rospy 
from sensor_msgs.msg import Image 
from PIL import Image, ImageFilter 

def camera(): 
    pub = rospy.Publisher('rgb', Image, queue_size=10) 
    image1 = Image.open('dog.png') 
    pub.publish(image1) 
if __name__ == '__main__': 
    try: 
     camera() 
    except rospy.ROSInterruptException: 
     pass 

ответ

1

Вы можете переименовать вещи во время импорта:

from sensor_msgs.msg import Image as ImageMsg 

Таким образом, вы можете избежать столкновения имя.

+0

Кроме того, в вашем коде есть больше ошибок: 1) вы не инициализируете узел ros (используя 'rospy.init_node()' и 2) вы не можете напрямую публиковать изображение PIL, но вы должны его преобразовать к сообщению изображения ROS. – luator

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

  • Нет связанных вопросов^_^