Ich habe eine Reihe von Bildern mit Metadaten einschließlich Zeitstempel und Odometriedaten aus einem Datensatz. Ich möchte diese Zeitreihe von Bildern in einen Rossbag umwandeln, damit ich es aus dem Code, den ich schreibe, herausstöpseln und nach dem Testen in Echtzeit umschalten kann. Durch das Tutorial, scheint der Prozess der programmatisch Daten zu einem rosbag Speicher wie zu arbeiten:(Python) Konvertieren von Bildzeitreihe in ROS-Tasche
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()
Für Bilder, der Datentyp anders ist, aber das Verfahren ist das gleiche. Wenn ich jedoch Daten habe, die miteinander verknüpft werden sollen, z. Jedes Bild sollte mit einem Zeitstempel und einer Odometrie-Aufzeichnung gepaart werden. Dieser Beispielcode scheint "Chatter" und "Nummern" getrennt zu schreiben. Wie würden die Daten so veröffentlicht, dass sie für jedes Bild automatisch mit anderen Daten gepaart werden?
Mit anderen Worten, ich muß mit den kommentierten Zeilen im folgenden Code helfen:
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()
Würde die Syntax dann: h = std_msgs.msg.Header() s.Header = h bag.write ('Geschwindigkeit', s) ich bin nicht vertraut mit zu einem rosbag programmatisch veröffentlichen, so schreibt mehrere Nachrichten mit dem gleichen Namen (wie in der Schleife, die ich geschrieben habe) ok? Auch, was ist die Syntax für die Umwandlung eines numpy Array (oder opencv Bild) in ein sensor_msg.Image? Kann die passende Python-Syntax nicht finden. –
@HalT Ich habe ein Beispiel hinzugefügt, wie der Zeitstempel für die Nachrichten festgelegt wird (es muss kein separates Header-Objekt erstellt werden). Informationen zum Konvertieren von OpenCV-Bildern in ROS-Nachrichten finden Sie im [ROS-Wiki für cv_bridge] (http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython). – luator