Темы ROS 2 синхронизируются

#python-2.7 #camera #usb #ros #basler

#python-2.7 #камера #usb #розенкранц #basler

Вопрос:

У меня есть исследовательский проект, в котором используются 2 камеры Basler (обе a2A1920-16ucPRO) для создания карты несоответствий. Я извлекаю изображения через ROS. Для этого я подписался на 2 Темы, где я регулярно получаю изображения с частотой 2 герца. Проблема в том, что эти 2 изображения имеют разницу во времени в 5-10 миллисекунд, но мне нужно получить синхронно 2 изображения. Камеры подключены к моему компьютеру через USB. Есть ли способ установить что-то в ROS, чтобы я получал 2 изображения одновременно? Или есть другое решение? Вот мой код:

 import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError import cv2 import time import message_filters Instantiate CvBridge  bridge = CvBridge()  def callback1(b1, b2):  print("Aufruf beide Kameras!")  try:    cv2_img1 = bridge.imgmsg_to_cv2(b1, "bgr8")  cv2_img2 = bridge.imgmsg_to_cv2(b2, "bgr8")   except CvBridgeError, e:  print(e)  else:    img_gray_left=cv2.cvtColor(cv2_img1, cv2.COLOR_BGR2GRAY)   img_gray_right=cv2.cvtColor(cv2_img2, cv2.COLOR_BGR2GRAY)  dimension=(1024,440)  resized1=cv2.resize(img_gray_left, dimension, interpolation=cv2.INTER_AREA)  resized2=cv2.resize(img_gray_right, dimension, interpolation=cv2.INTER_AREA)  cv2.imwrite('multilayer-stixel-world/build/myimages_ros/camera_image_left.pgm', resized1)  cv2.imwrite('multilayer-stixel-world/build/myimages_ros/camera_image_right.pgm', resized2)      def main():  rospy.init_node('image_listener', anonymous=True)  image_topic1 = message_filters.Subscriber('/ace_RGB_Left/pylon_camera_node/image_raw', Image)  image_topic2 = message_filters.Subscriber('/ace_RGB_Right/pylon_camera_node/image_raw',Image)  ts = message_filters.ApproximateTimeSynchronizer([image_topic1, image_topic2],2, 0.005)  ts.registerCallback(callback1)  rospy.spin()  if _name_ == '_main_':  main()  

Функция сообщения «TimeSynchronizer» не работает, потому что метки времени не подходят идеально. Поэтому я использую функцию «Approximatimesynchronizer» с допуском 5 миллисекунд. Но этого недостаточно.

Комментарии:

1. Поскольку это Python, вы не сможете получить оба изображения одновременно; на самом деле это было бы верно для любого языка. Почему вам нужно, чтобы дельта была меньше, чем

2. Я выбрал дельту меньше 5, потому что хотел посмотреть, сколько сообщений пройдет. Я выяснил, что на каждые два сообщения приходится примерно одно сообщение. Таким образом, с помощью Python невозможно синхронизировать эти 2 сообщения?

3. Я думаю, что все еще остается вопрос, почему вы хотите, чтобы они были идеально синхронизированы. Метки времени msg будут созданы, когда фактическое изображение попадет в ROS. Также невозможно полностью гарантировать, что метки времени на 100% синхронизированы ни в Python, ни в c . Тем не менее, в зависимости от вашего приложения может быть другой приемлемый подход.

4. Мне нужны синхронные изображения, потому что я создаю изображение несоответствия из этих двух в машине во время вождения. И если вы едете, например, со скоростью 100 км/ч, разница составляет около 13 сантиметров, и это искажает изображение несоответствия.