ros中同時訂閱兩個topic(2張圖像)合並成一個topic(1張圖像)


2019-12-06 15:42:39

先暫時做個資料保存

要同時用兩個紅外相機,但是沒有做硬件上的 時間戳同步,就是筆記本上同時插着兩個相機。

兩個topic發布各自相機的圖像,然后要有個節點同時訂閱兩個topic並把兩張圖像拼接成一張圖像再做處理。

直接搜 ros sub two topic結果都是2個callback函數,各自處理各自的topic,和想要的不太一樣。

自己融合兩個線程中時間戳不那么嚴格一致的數據太麻煩了

 

想要的是兩張圖片的時間戳如果相近,就當做是在同一時刻采集的,然后合成一張圖像或者一個topic。

然后發現了下面的鏈接:

https://stackoverflow.com/questions/55458218/is-it-possible-to-time-synchronize-two-topics-in-ros-of-same-message-type 

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  

https://github.com/DiaboloKiat/sis_lab_all/blob/de74759c3779aa32916a5c61dbc735f8d17c909c/03-ROS_tutorial_1/catkin_ws/src/tutorial/src/test_my_message.py

應該是一個 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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM