我有一組包含元數據的圖像,包括來自數據集的時間戳和odometry數據。我想將這個時間序列的圖像轉換成一個rosbag,這樣我就可以輕鬆地將它插入我將寫入的代碼中,並在測試後實時切換數據。在本教程中,編程數據保存到rosbag過程似乎工作,如:(Python)將圖像時間序列轉換爲ROS包
import rosbag
from std_msgs.msg import Int32, String
bag = rosbag.Bag('test.bag', 'w')
try:
str = String()
str.data = 'foo'
i = Int32()
i.data = 42
bag.write('chatter', str)
bag.write('numbers', i)
finally:
bag.close()
對於圖像,數據類型是不同的,但過程是相同的。但是,當我有相互關聯的數據時,例如每個圖像應與時間戳和測距記錄配對。這個示例代碼似乎不連貫地寫出「喋喋不休」和「數字」。發佈數據的方式是什麼,以便每個圖像自動與其他數據配對?
換句話說,我需要在下面的代碼註釋行幫助:
import rosbag
import cv2
from std_msgs.msg import Int32, String
from sensor_msgs.msg import Image
bag = rosbag.Bag('test.bag', 'w')
for data in data_list:
(imname, timestamp, speed) = data
ts_str = String()
ts_str.data = timestamp
s = Float32()
s.data = speed
image = cv2.imread(imname)
# convert cv2 image to rosbag format
# write image, ts_str and s to the rosbag jointly
bag.close()
請問語法則是: H = std_msgs.msg.Header() s.Header = H bag.write( '速度',S) 我不熟悉的編程方式張貼到rosbag,所以發佈了幾個具有相同名稱的消息(就像在我寫的那個循環中)好嗎? 此外,將numpy數組(或opencv圖像)轉換爲sensor_msg.Image的語法是什麼?找不到合適的Python語法。 –
@HalT我添加了一個如何設置消息時間戳的例子(不需要創建一個單獨的Header對象)。要將OpenCV圖像轉換爲ROS消息,請參閱[ROS維基的cv_bridge](http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython)。 – luator