2019-12-06 15:42:39
先暫時做個資料保存
要同時用兩個紅外相機,但是沒有做硬件上的 時間戳同步,就是筆記本上同時插着兩個相機。
兩個topic發布各自相機的圖像,然后要有個節點同時訂閱兩個topic並把兩張圖像拼接成一張圖像再做處理。
直接搜 ros sub two topic結果都是2個callback函數,各自處理各自的topic,和想要的不太一樣。
自己融合兩個線程中時間戳不那么嚴格一致的數據太麻煩了
想要的是兩張圖片的時間戳如果相近,就當做是在同一時刻采集的,然后合成一張圖像或者一個topic。
然后發現了下面的鏈接:
https://www.cnblogs.com/gdut-gordon/p/10293446.html
http://wiki.ros.org/message_filters#Example_.28Python.29-1
https://blog.csdn.net/chishuideyu/article/details/77479758
應該是一個 message_filters ,使用其 ApproximateTime Policy ,然后就只有一個callback了
https://stackoverflow.com/questions/48830056/use-data-from-multiple-topics-in-ros-python
這個看起來也有點用,先保存
2019-12-06 16:42:49
下面是部分代碼,直接改的上面的鏈接里的代碼,384*288 的兩張圖像
1 def callback(left_data, right_data): 2 temper_left = bridge1.imgmsg_to_cv2(left_data, "mono16") 3 temper_right = bridge2.imgmsg_to_cv2(right_data, "mono16") 4 5 6 disp1 = cv2.normalize(temper_left, None, 0, 255, cv2.NORM_MINMAX) 7 disp1 = disp1.astype(np.uint8) 8 disp_color1 = cv2.applyColorMap(disp1, color_map_choice ) 9 10 11 disp2 = cv2.normalize(temper_right, None, 0, 255, cv2.NORM_MINMAX) 12 disp2 = disp2.astype(np.uint8) 13 disp_color2 = cv2.applyColorMap(disp2, color_map_choice ) 14 15 disp = np.concatenate((disp_color1, disp_color2), axis=1 ) 16 17 cv2.imshow("Image window", disp) 18 cv2.waitKey( 10 ) 19 20 21 22 def gotdesired(): 23 rospy.init_node('image_converter', anonymous=True) 24 25 26 sub_left = message_filters.Subscriber("left_infra", Image, queue_size=1, buff_size=110592*6 ) 27 sub_right = message_filters.Subscriber("right_infra", Image, queue_size=1, buff_size=110592*6 ) 28 29 ts = message_filters.ApproximateTimeSynchronizer([sub_left, sub_right], 10, 0.1, allow_headerless = True) 30 ts.registerCallback(callback) 31 32 # spin() simply keeps python from exiting until this node is stopped 33 rospy.spin()