日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

KITTI数据集去除camera生成bag包(kitti2bag)

發布時間:2024/3/7 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 KITTI数据集去除camera生成bag包(kitti2bag) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

改kitti2bag權限

在usr下搜索kitti2bag,找到后在對應位置下打開終端,終端輸入:

sudo chmod 777 kitti2bag

更改kitti2bag源碼

可以用vscode搜索camera,將有關代碼全部刪除即可,如下代碼所示:

#!/usr/bin/python # -*- coding: utf-8 -*-import systry:import pykitti except ImportError as e:print('Could not load module \'pykitti\'. Please run `pip install pykitti`')sys.exit(1)import tf import os import cv2 import rospy import rosbag import progressbar from tf2_msgs.msg import TFMessage from datetime import datetime from std_msgs.msg import Header from sensor_msgs.msg import Imu, PointField, NavSatFix import sensor_msgs.point_cloud2 as pcl2 from geometry_msgs.msg import TransformStamped, TwistStamped, Transform from cv_bridge import CvBridge import numpy as np import argparsedef save_imu_data(bag, kitti, imu_frame_id, topic):print("Exporting IMU")for timestamp, oxts in zip(kitti.timestamps, kitti.oxts):q = tf.transformations.quaternion_from_euler(oxts.packet.roll, oxts.packet.pitch, oxts.packet.yaw)imu = Imu()imu.header.frame_id = imu_frame_idimu.header.stamp = rospy.Time.from_sec(float(timestamp.strftime("%s.%f")))imu.orientation.x = q[0]imu.orientation.y = q[1]imu.orientation.z = q[2]imu.orientation.w = q[3]imu.linear_acceleration.x = oxts.packet.afimu.linear_acceleration.y = oxts.packet.alimu.linear_acceleration.z = oxts.packet.auimu.angular_velocity.x = oxts.packet.wfimu.angular_velocity.y = oxts.packet.wlimu.angular_velocity.z = oxts.packet.wubag.write(topic, imu, t=imu.header.stamp)def save_dynamic_tf(bag, kitti, kitti_type, initial_time):print("Exporting time dependent transformations")if kitti_type.find("raw") != -1:for timestamp, oxts in zip(kitti.timestamps, kitti.oxts):tf_oxts_msg = TFMessage()tf_oxts_transform = TransformStamped()tf_oxts_transform.header.stamp = rospy.Time.from_sec(float(timestamp.strftime("%s.%f")))tf_oxts_transform.header.frame_id = 'world'tf_oxts_transform.child_frame_id = 'base_link'transform = (oxts.T_w_imu)t = transform[0:3, 3]q = tf.transformations.quaternion_from_matrix(transform)oxts_tf = Transform()oxts_tf.translation.x = t[0]oxts_tf.translation.y = t[1]oxts_tf.translation.z = t[2]oxts_tf.rotation.x = q[0]oxts_tf.rotation.y = q[1]oxts_tf.rotation.z = q[2]oxts_tf.rotation.w = q[3]tf_oxts_transform.transform = oxts_tftf_oxts_msg.transforms.append(tf_oxts_transform)bag.write('/tf', tf_oxts_msg, tf_oxts_msg.transforms[0].header.stamp)elif kitti_type.find("odom") != -1:timestamps = map(lambda x: initial_time + x.total_seconds(), kitti.timestamps)for timestamp, tf_matrix in zip(timestamps, kitti.T_w_cam0):tf_msg = TFMessage()tf_stamped = TransformStamped()tf_stamped.header.stamp = rospy.Time.from_sec(timestamp)tf_stamped.header.frame_id = 'world't = tf_matrix[0:3, 3]q = tf.transformations.quaternion_from_matrix(tf_matrix)transform = Transform()transform.translation.x = t[0]transform.translation.y = t[1]transform.translation.z = t[2]transform.rotation.x = q[0]transform.rotation.y = q[1]transform.rotation.z = q[2]transform.rotation.w = q[3]tf_stamped.transform = transformtf_msg.transforms.append(tf_stamped)bag.write('/tf', tf_msg, tf_msg.transforms[0].header.stamp)def save_velo_data(bag, kitti, velo_frame_id, topic):print("Exporting velodyne data")velo_path = os.path.join(kitti.data_path, 'velodyne_points')velo_data_dir = os.path.join(velo_path, 'data')velo_filenames = sorted(os.listdir(velo_data_dir))with open(os.path.join(velo_path, 'timestamps.txt')) as f:lines = f.readlines()velo_datetimes = []for line in lines:if len(line) == 1:continuedt = datetime.strptime(line[:-4], '%Y-%m-%d %H:%M:%S.%f')velo_datetimes.append(dt)iterable = zip(velo_datetimes, velo_filenames)bar = progressbar.ProgressBar()for dt, filename in bar(iterable):if dt is None:continuevelo_filename = os.path.join(velo_data_dir, filename)# read binary datascan = (np.fromfile(velo_filename, dtype=np.float32)).reshape(-1, 4)# create headerheader = Header()header.frame_id = velo_frame_idheader.stamp = rospy.Time.from_sec(float(datetime.strftime(dt, "%s.%f")))# fill pcl msgfields = [PointField('x', 0, PointField.FLOAT32, 1),PointField('y', 4, PointField.FLOAT32, 1),PointField('z', 8, PointField.FLOAT32, 1),PointField('i', 12, PointField.FLOAT32, 1)]pcl_msg = pcl2.create_cloud(header, fields, scan)bag.write(topic + '/pointcloud', pcl_msg, t=pcl_msg.header.stamp)def get_static_transform(from_frame_id, to_frame_id, transform):t = transform[0:3, 3]q = tf.transformations.quaternion_from_matrix(transform)tf_msg = TransformStamped()tf_msg.header.frame_id = from_frame_idtf_msg.child_frame_id = to_frame_idtf_msg.transform.translation.x = float(t[0])tf_msg.transform.translation.y = float(t[1])tf_msg.transform.translation.z = float(t[2])tf_msg.transform.rotation.x = float(q[0])tf_msg.transform.rotation.y = float(q[1])tf_msg.transform.rotation.z = float(q[2])tf_msg.transform.rotation.w = float(q[3])return tf_msgdef inv(transform):"Invert rigid body transformation matrix"R = transform[0:3, 0:3]t = transform[0:3, 3]t_inv = -1 * R.T.dot(t)transform_inv = np.eye(4)transform_inv[0:3, 0:3] = R.Ttransform_inv[0:3, 3] = t_invreturn transform_invdef save_static_transforms(bag, transforms, timestamps):print("Exporting static transformations")tfm = TFMessage()for transform in transforms:t = get_static_transform(from_frame_id=transform[0], to_frame_id=transform[1], transform=transform[2])tfm.transforms.append(t)for timestamp in timestamps:time = rospy.Time.from_sec(float(timestamp.strftime("%s.%f")))for i in range(len(tfm.transforms)):tfm.transforms[i].header.stamp = timebag.write('/tf_static', tfm, t=time)def save_gps_fix_data(bag, kitti, gps_frame_id, topic):for timestamp, oxts in zip(kitti.timestamps, kitti.oxts):navsatfix_msg = NavSatFix()navsatfix_msg.header.frame_id = gps_frame_idnavsatfix_msg.header.stamp = rospy.Time.from_sec(float(timestamp.strftime("%s.%f")))navsatfix_msg.latitude = oxts.packet.latnavsatfix_msg.longitude = oxts.packet.lonnavsatfix_msg.altitude = oxts.packet.altnavsatfix_msg.status.service = 1bag.write(topic, navsatfix_msg, t=navsatfix_msg.header.stamp)def save_gps_vel_data(bag, kitti, gps_frame_id, topic):for timestamp, oxts in zip(kitti.timestamps, kitti.oxts):twist_msg = TwistStamped()twist_msg.header.frame_id = gps_frame_idtwist_msg.header.stamp = rospy.Time.from_sec(float(timestamp.strftime("%s.%f")))twist_msg.twist.linear.x = oxts.packet.vftwist_msg.twist.linear.y = oxts.packet.vltwist_msg.twist.linear.z = oxts.packet.vutwist_msg.twist.angular.x = oxts.packet.wftwist_msg.twist.angular.y = oxts.packet.wltwist_msg.twist.angular.z = oxts.packet.wubag.write(topic, twist_msg, t=twist_msg.header.stamp)def main():parser = argparse.ArgumentParser(description = "Convert KITTI dataset to ROS bag file the easy way!")# Accepted argument valueskitti_types = ["raw_synced", "odom_color", "odom_gray"]odometry_sequences = []for s in range(22):odometry_sequences.append(str(s).zfill(2))parser.add_argument("kitti_type", choices = kitti_types, help = "KITTI dataset type")parser.add_argument("dir", nargs = "?", default = os.getcwd(), help = "base directory of the dataset, if no directory passed the deafult is current working directory")parser.add_argument("-t", "--date", help = "date of the raw dataset (i.e. 2011_09_26), option is only for RAW datasets.")parser.add_argument("-r", "--drive", help = "drive number of the raw dataset (i.e. 0001), option is only for RAW datasets.")parser.add_argument("-s", "--sequence", choices = odometry_sequences,help = "sequence of the odometry dataset (between 00 - 21), option is only for ODOMETRY datasets.")args = parser.parse_args()bridge = CvBridge()compression = rosbag.Compression.NONE# compression = rosbag.Compression.BZ2# compression = rosbag.Compression.LZ4if args.kitti_type.find("raw") != -1:if args.date == None:print("Date option is not given. It is mandatory for raw dataset.")print("Usage for raw dataset: kitti2bag raw_synced [dir] -t <date> -r <drive>")sys.exit(1)elif args.drive == None:print("Drive option is not given. It is mandatory for raw dataset.")print("Usage for raw dataset: kitti2bag raw_synced [dir] -t <date> -r <drive>")sys.exit(1)bag = rosbag.Bag("kitti_{}_drive_{}_{}.bag".format(args.date, args.drive, args.kitti_type[4:]), 'w', compression=compression)kitti = pykitti.raw(args.dir, args.date, args.drive)if not os.path.exists(kitti.data_path):print('Path {} does not exists. Exiting.'.format(kitti.data_path))sys.exit(1)if len(kitti.timestamps) == 0:print('Dataset is empty? Exiting.')sys.exit(1)try:# IMUimu_frame_id = 'imu_link'imu_topic = '/kitti/oxts/imu'gps_fix_topic = '/kitti/oxts/gps/fix'gps_vel_topic = '/kitti/oxts/gps/vel'velo_frame_id = 'velo_link'velo_topic = '/kitti/velo'T_base_link_to_imu = np.eye(4, 4)T_base_link_to_imu[0:3, 3] = [-2.71/2.0-0.05, 0.32, 0.93]# tf_statictransforms = [('base_link', imu_frame_id, T_base_link_to_imu),(imu_frame_id, velo_frame_id, inv(kitti.calib.T_velo_imu)),]util = pykitti.utils.read_calib_file(os.path.join(kitti.calib_path, 'calib_cam_to_cam.txt'))# Exportsave_static_transforms(bag, transforms, kitti.timestamps)save_dynamic_tf(bag, kitti, args.kitti_type, initial_time=None)save_imu_data(bag, kitti, imu_frame_id, imu_topic)save_gps_fix_data(bag, kitti, imu_frame_id, gps_fix_topic)save_gps_vel_data(bag, kitti, imu_frame_id, gps_vel_topic)save_velo_data(bag, kitti, velo_frame_id, velo_topic)finally:print("## OVERVIEW ##")print(bag)bag.close()elif args.kitti_type.find("odom") != -1:if args.sequence == None:print("Sequence option is not given. It is mandatory for odometry dataset.")print("Usage for odometry dataset: kitti2bag {odom_color, odom_gray} [dir] -s <sequence>")sys.exit(1)bag = rosbag.Bag("kitti_data_odometry_{}_sequence_{}.bag".format(args.kitti_type[5:],args.sequence), 'w', compression=compression)kitti = pykitti.odometry(args.dir, args.sequence)if not os.path.exists(kitti.sequence_path):print('Path {} does not exists. Exiting.'.format(kitti.sequence_path))sys.exit(1)kitti.load_calib() kitti.load_timestamps() if len(kitti.timestamps) == 0:print('Dataset is empty? Exiting.')sys.exit(1)if args.sequence in odometry_sequences[:11]:print("Odometry dataset sequence {} has ground truth information (poses).".format(args.sequence))kitti.load_poses()try:util = pykitti.utils.read_calib_file(os.path.join(args.dir,'sequences',args.sequence, 'calib.txt'))current_epoch = (datetime.utcnow() - datetime(1970, 1, 1)).total_seconds()# Exportsave_dynamic_tf(bag, kitti, args.kitti_type, initial_time=current_epoch)finally:print("## OVERVIEW ##")print(bag)bag.close()if __name__ == '__main__':main()

總結

以上是生活随笔為你收集整理的KITTI数据集去除camera生成bag包(kitti2bag)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产精品天堂 | 国产男女av | 国产又黄又粗又硬 | 福利在线一区二区三区 | 免费不卡的av | 日日狠狠久久偷偷四色综合免费 | 日本女人毛片 | 狠狠操夜夜 | 午夜精品久久久久久久99热浪潮 | 亚洲国产成人自拍 | 热玖玖| 国产美女激情 | 香港a毛片 | 国产精品电影在线观看 | 亚洲精品一区在线 | 精品xxxx| 在线黄色免费 | 少妇极品熟妇人妻无码 | 欧美精品在线观看视频 | 黄色大片免费网站 | 色播综合网 | 成人在线视频在线观看 | 九色丨蝌蚪丨成人 | 久久久999久久久 | 日本国产在线视频 | 欧美成人aaa片一区国产精品 | 成人一级片在线观看 | 91九色成人| 亚洲涩涩视频 | 成人区视频 | 九九热视频精品在线观看 | 成人av一级 | 欧洲一级片 | 精品视频不卡 | 成人欧美一区二区三区在线播放 | 婷婷成人av | 亚洲精品字幕在线观看 | 国产精品探花一区二区在线观看 | 欧美久久久一区二区三区 | 久久91亚洲精品中文字幕奶水 | 久久婷婷一区 | 97人妻精品一区二区三区视频 | 这里只有精品6 | 第一次破处视频 | 日本bdsm视频 | 91日韩 | 日本视频网站在线观看 | 未满十八18禁止免费无码网站 | 花房姑娘免费全集 | 91精品综合久久 | 好男人在线视频www 亚洲福利国产 | 国产成人精品一区二区色戒 | 午夜剧场免费在线观看 | 久久久久久一 | 日韩mv欧美mv国产网站 | 四虎网站在线播放 | 视频1区 | 国产欧美一区二区三区精华液好吗 | 国产成人在线观看网站 | 乱淫的女高中暑假调教h | 理论片国产 | 中文一二区 | 俄罗斯精品一区二区三区 | 美女精品 | 久久精品6 | 人人曰| 国产精品无码网站 | 上原亚衣av一区二区三区 | av老司机在线观看 | 精品aaa| 国产午夜精品福利视频 | 日韩视频免费播放 | 亚洲成色网 | 天堂аⅴ在线最新版在线 | 精品免费国产一区二区三区 | 天天操夜夜骑 | 久久久久久久网站 | 欧美成人免费看 | 全球av在线 | 亚洲色成人一区二区三区小说 | 麻豆网站在线看 | 亚洲欧美日韩一区二区三区在线观看 | 成人污 | 精品久久久久久久久久久国产字幕 | 干美女视频 | 精品久久影视 | 亚洲第一天堂久久 | 日本a天堂 | 欧美另类在线观看 | 黄视频在线免费看 | 亚洲区第一页 | 被绑在床强摁做开腿呻吟 | 色屁屁草草影院ccyycom | 夜av| 四色最新网址 | 成年人在线视频网站 | 青青毛片 | 欧美一级久久 | 国产主播一区二区三区 |