6 from pathlib
import Path
10 from sensor_msgs.msg
import Image
11 from geometry_msgs.msg
import Twist
16 def __init__(self, duration, camera_topic, vel_topic, output_dir):
24 rospy.loginfo(
"Making directory for saved images (if it doesn't exist).")
26 if output_dir[0] !=
"/":
27 self.
path = os.path.join(Path.home(), output_dir)
29 self.
path = output_dir
31 Path(self.
path).mkdir(parents=
True, exist_ok=
True)
33 date = datetime.datetime.now()
43 rospy.loginfo(
"Opening label file (creating if doesn't exist).")
53 rospy.loginfo(
"Wating for twist msg.")
56 if self.
end_time <= time.monotonic():
57 rospy.loginfo(
"Saved enough data. Finishing node.")
59 rospy.signal_shutdown(
"Saved enough data. Finishing node.")
61 if self.
label != (0.0, 0.0):
62 cv_img = self.
bridge.imgmsg_to_cv2(data, desired_encoding=
"bgr8")
66 filename=os.path.join(self.
path, img_name),
68 params=[cv2.IMWRITE_JPEG_QUALITY, 100],
77 self.
label = (round(data.linear.x, 2), round(data.angular.z, 2))
87 help=
"duration of recording the data",
92 default=
"camera/image_raw",
96 help=
"name of the topic with view from robot",
106 help=
"name of the velocity topic",
116 help=
"name of an output directory for saved images",
120 if __name__ ==
"__main__":
121 rospy.init_node(
"data_saver")
123 parser = argparse.ArgumentParser(description=
"Record video from rover as images.")
126 rosargv = rospy.myargv(argv=sys.argv)
127 args = parser.parse_args(rosargv[1:])
129 saver =
DataSaver(args.duration, args.camera_topic, args.vel_topic, args.output_dir)