2016-11-06 3 views
0

Also ich versuche, ein Programm in ROS mit Python zu erstellen, die Bilder veröffentlicht, aber ich habe zwei Dinge, die ich importieren, die beide "Bild" genannt werden. Wenn ich das Programm ausführe, erhalte ich diese Fehlermeldung.Publisher Subscriber Model Überladen Import Namen

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 

Wenn ich die Zeilen importieren PIL Bild und Imagefilter herausnehmen, die Linie zu initialisieren image1, und die Zeile Veröffentlichung image1, das Programm funktioniert gut, weil (glaube ich) zwischen zwei importierte Bildobjekte keine Verwirrung ist. Gibt es eine Möglichkeit, dem Programm mitzuteilen, zwischen den beiden Bildern zu unterscheiden?

#!/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 

Antwort

1

können Sie Dinge umbenennen während des Imports:

from sensor_msgs.msg import Image as ImageMsg 

Auf diese Weise können Sie den Namen Kollision vermeiden.

+0

Abgesehen davon gibt es mehr Bugs in Ihrem Code: 1) Sie initialisieren nicht einen Ros-Knoten (mit 'rospy.init_node()' und 2) Sie können nicht direkt ein PIL-Bild veröffentlichen, aber Sie müssen es konvertieren zu einer ROS-Bildnachricht. – luator

Verwandte Themen