Počítání počtu iterací prostřednictvím ROS účastníka uzel

0

Otázka

Snažím se psát účastník, který bude pořizovat snímky z kamery v altánu, simulace a uložit je. Jsem schopen pořizovat fotografie a uložit je, nicméně jsem se snaží přírůstek název obrázku pokaždé, ale já jsem najít to těžké, aby tak učinily. Snažil jsem se vytvořit třídu, a pak zvýšit počet (image_number) uvnitř třídy pokaždé, když jsem spustit image_callback funcion, nicméně jsem si chybu. Také jsem se snažil definovat globální proměnné a postupně, ještě to nebylo poznat proměnné uvnitř funkce. Mám připojený kód a chybovou níže, jakákoliv pomoc je velmi ceněn!

# rospy for the subscriber
import rospy, time
# ROS Image message
from sensor_msgs.msg import Image
# ROS Image message -> OpenCV2 image converter
from cv_bridge import CvBridge, CvBridgeError
# OpenCV2 for saving an image
import cv2

# Instantiate CvBridge
bridge = CvBridge()
  
class Image(object):
    def __init__(self):
        self.image_number = 0
        #rospy.init_node('image_listener')
        # Define your image topic
        image_topic = "/wamv/sensors/cameras/front_left_camera/image_raw"
        # Set up your subscriber and define its callback
        rospy.Subscriber(image_topic, Image, self.image_callback)
        #rospy.spin()
    
    def image_callback(self, msg):
        print("Received an image!")
        try:
            # Convert your ROS Image message to OpenCV2
            cv2_img = bridge.imgmsg_to_cv2(msg, "bgr8")
        except CvBridgeError as e:
            print(e)
        else:
            # Save your OpenCV2 image as a jpeg 
            cv2.imwrite('croc_{}'.format(self.image_number)+'.png', cv2_img)
            print("Saved Image!")
            self.image_number += 1 
            time.sleep(3.0) 

if __name__ == '__main__':
    rospy.init_node('image_listener')
    image_node = Image()

a chyba:

Traceback (most recent call last):
  File "/home/jehan/PycharmProjects/spawner/take_photo.py", line 73, in <module>
    image_node = Image()
  File "/home/jehan/PycharmProjects/spawner/take_photo.py", line 54, in __init__
    rospy.Subscriber(image_topic, Image, self.image_callback)
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/topics.py", line 563, in __init__
    super(Subscriber, self).__init__(name, data_class, Registration.SUB)
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/topics.py", line 144, in __init__
    raise ValueError("data_class [%s] is not a message data class"%data_class.__class__.__name__)
ValueError: data_class [type] is not a message data class
class global-variables python ros
2021-11-21 23:59:44
1

Nejlepší odpověď

1

Váš problém není pultu. To je skutečnost, vaše třída se nazývá Imagestejně jako typ zprávy. To znamená, že budete re-definování přes importované typ zprávy. A pak, když jdete vytvořit účastníkovi Image typ je vlastně třída, ne ROS typ zprávy. Já bych navrhnout pomocí jiný název třídy jako takové:

class ImageNode(object):
image_node = ImageNode()
2021-11-22 15:14:33

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................