def __get_ros_publishers(self, reader): topics_types = RosUtil.get_topics_types(reader) for ros_topic, data_type in topics_types.items(): if not ros_topic in self.ros_publishers: ros_data_class = RosUtil.get_data_class(data_type) self.ros_publishers[ros_topic] = rospy.Publisher(ros_topic, ros_data_class, queue_size=64) time.sleep(1)
def __publish_msgs(self, bag_path): reader = rosbag.Bag(bag_path) self.__get_ros_publishers(reader) for ros_topic, ros_msg, _ in reader.read_messages(): if self.use_time == "received": RosUtil.set_ros_msg_received_time(ros_msg) self.ros_publishers[ros_topic].publish(ros_msg) reader.close()
def __process_s3_pcl_files(self, ros_topic=None, files=None, resp=None, frame_id=None, s3_client=None, lidar_view=None, vehicle_transform_matrix=None): for f in files: try: path = resp.get(block=True).split(" ", 1)[0] npz = np.load(path) pcl_ts = int(f[2]) points, reflectance = RosUtil.parse_pcl_npz( npz=npz, lidar_view=lidar_view, vehicle_transform_matrix=vehicle_transform_matrix) if not np.isnan(points).any(): self.__record_pcl_msg(ros_topic=ros_topic, points=points, reflectance=reflectance, pcl_ts=pcl_ts, frame_id=frame_id, s3_client=s3_client) os.remove(path) except BaseException as _: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_tb(exc_traceback, limit=20, file=sys.stdout) self.logger.error(str(exc_type)) self.logger.error(str(exc_value))
def __record_bus(self, manifest=None, ros_topic=None, frame_id=None): self.bus_topic = ros_topic while True: rows = None while not rows and manifest.is_open(): rows = manifest.fetch() if not rows: break for row in rows: try: ros_msg = RosUtil.bus_msg(row=row, frame_id=frame_id) self.__record_ros_msg(topic=ros_topic, msg=ros_msg, ts=ros_msg.header.stamp) self.__topic_sleep(ros_topic=ros_topic) except BaseException as _: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_tb(exc_traceback, limit=20, file=sys.stdout) self.logger.error(str(exc_type)) self.logger.error(str(exc_value)) if self.request['preview']: break self.topic_active[ros_topic] = False
def __record_image_msg(self, ros_topic=None, image=None, image_ts=None, frame_id=None, s3_client=None): try: ros_image_msg = self.img_cv_bridge.cv2_to_imgmsg(image) RosUtil.set_ros_msg_header(ros_msg=ros_image_msg, ts=image_ts, frame_id=frame_id) self.__record_ros_msg(topic=ros_topic, msg=ros_image_msg, ts=ros_image_msg.header.stamp, s3_client=s3_client) self.__topic_sleep(ros_topic=ros_topic) except BaseException as _: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_tb(exc_traceback, limit=20, file=sys.stdout) self.logger.error(str(exc_type)) self.logger.error(str(exc_value))
def __record_images_from_fs(self, manifest=None, ros_topic=None, sensor=None, frame_id=None): image_reader = dict() image_data = dict() image_ts = dict() image_request = self.request.get("image", "original") if image_request == "undistorted": lens, dist_parms, intr_mat_dist, intr_mat_undist = self.__get_camera_info( sensor=sensor) while True: files = None while not files and manifest.is_open(): files = manifest.fetch() if not files: break count = read_images_from_fs(data_store=self.data_store, files=files, image_reader=image_reader, image_data=image_data, image_ts=image_ts) for i in range(0, count): image_reader[i].join() if image_request == "undistorted": image = RosUtil.undistort_image( image=image_data[i], lens=lens, dist_parms=dist_parms, intr_mat_dist=intr_mat_dist, intr_mat_undist=intr_mat_undist) else: image = image_data[i] self.__record_image_msg(ros_topic=ros_topic, image=image, image_ts=image_ts[i], frame_id=frame_id) if self.request['preview']: break self.topic_active[ros_topic] = False
def __record_pcl_from_fs(self, manifest=None, ros_topic=None, sensor=None, frame_id=None): pcl_reader = dict() pcl_ts = dict() npz = dict() lidar_view = self.request.get("lidar_view", "camera") vehicle_transform_matrix = self.__sensor_to_vehicle_matrix( sensor=sensor) if lidar_view == "vehicle" else None while True: files = None while not files and manifest.is_open(): files = manifest.fetch() if not files: break count = read_pcl_from_fs(data_store=self.data_store, files=files, pcl_reader=pcl_reader, pcl_ts=pcl_ts, npz=npz) for i in range(0, count): pcl_reader[i].join() points, reflectance = RosUtil.parse_pcl_npz( npz=npz[i], lidar_view=lidar_view, vehicle_transform_matrix=vehicle_transform_matrix) if not np.isnan(points).any(): self.__record_pcl_msg(ros_topic=ros_topic, points=points, reflectance=reflectance, pcl_ts=pcl_ts[i], frame_id=frame_id) if self.request['preview']: break self.topic_active[ros_topic] = False
def __record_pcl_msg(self, ros_topic=None, points=None, reflectance=None, pcl_ts=None, frame_id=None, s3_client=None): try: ros_pcl_msg = RosUtil.pcl_dense_msg(points=points, reflectance=reflectance, ts=pcl_ts, frame_id=frame_id) self.__record_ros_msg(topic=ros_topic, msg=ros_pcl_msg, ts=ros_pcl_msg.header.stamp, s3_client=s3_client) self.__topic_sleep(ros_topic=ros_topic) except BaseException as _: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_tb(exc_traceback, limit=20, file=sys.stdout) self.logger.error(str(exc_type)) self.logger.error(str(exc_value))
def __process_s3_image_files(self, ros_topic=None, files=None, resp=None, frame_id=None, s3_client=None, image_request=None, lens=None, dist_parms=None, intr_mat_dist=None, intr_mat_undist=None): for f in files: try: path = resp.get(block=True).split(" ", 1)[0] image_data = cv2.imread(path) if image_request == "undistorted": image = RosUtil.undistort_image( image_data, lens=lens, dist_parms=dist_parms, intr_mat_dist=intr_mat_dist, intr_mat_undist=intr_mat_undist) else: image = image_data image_ts = int(f[2]) self.__record_image_msg(ros_topic=ros_topic, image=image, image_ts=image_ts, frame_id=frame_id, s3_client=s3_client) os.remove(path) except BaseException as _: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_tb(exc_traceback, limit=20, file=sys.stdout) self.logger.error(str(exc_type)) self.logger.error(str(exc_value))