精华内容
下载资源
问答
  • 视频rosbag数据集——实例运行环环境相应代码操作 运行环环境 ubuntu 16.04 + ros kinetic + python 3.6 相应代码 github下载相关的源代码仓库 连接:link 操作 运行vedio_to_bag.py -h 查看相应的参数(如,视频...

    视频转为rosbag的.bag数据集——实例

    背景

    ros处理的数据都是各种类型的消息,往ros输入图像集或视频数据时,就需要将图像或者视频数据转为ros可以处理的话题消息,rosbag是保存和查看ros话题消息的有效工具。

    运行环环境

    ubuntu 16.04 + ros kinetic + python 3.6

    相应代码

    github下载相关的源代码仓库
    连接:相关的仓库

    操作

    终端通过cd命令进入脚本的文件路径,运行vedio_to_bag.py -h 查看相应的参数(如,视频文件路径和视频文件名称,输出rosbag文件的路径和名称)。
    运行图
    按照所需参数的要求输入相关的参数。

    展开全文
  • orb-slam下跑自己的.bag数据集

    千次阅读 2019-06-13 16:46:05
    上一篇博客已经有了关于如何录制.bag数据集的过程感兴趣的可以参照 https://mp.csdn.net/postedit/91386068 因为我跑的是双目摄像头 所以首先在orb-slam2下找到ros_stereo.cc文件然后对其中的rostopic节点进行修改 ...

     

    上一篇博客已经有了关于如何录制.bag数据集的过程感兴趣的可以参照 https://mp.csdn.net/postedit/91386068

    因为我跑的是双目摄像头 所以首先在orb-slam2下找到ros_stereo.cc文件然后对其中的rostopic节点进行修改 首先先找到自己对应的节点在 自己录制的.bag 数据集下打开终端执行 rosbag info xxx.bag在里面的topics中可以找到自己对应的节点,我的节点是"/mynteye/left/imag_color"和"/mynteye/right/imag_color"所以对应的将 ros_stereo.cc中的

    message_filters::Subscriber<sensor_msgs::Image>left_sub(nh,"/camera/left/image_raw",1);修改为

    message_filters::Subscriber<sensor_msgs::Image>left_sub(nh,"/mynteye/left/imag_color,1);

     

    message_filters::Subscriber<sensor_msgs::Image>left_sub(nh,"/camera/right/image_raw",1);修改为

    message_filters::Subscriber<sensor_msgs::Image>left_sub(nh,"/mynteye/right/imag_color,1);

    注:修改完ros_stereo.cc文件之后需要重新编译否则运行不会成功

    在自己的工作空间下如我的工作空间为 ~/catkin_ws/src/MYNT-EYE-ORB-SLAM2-Sample下运行rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt config/mynteye_s_stero.yaml false(运行的命令具体要根据你自己的来进行修改)

    在录制的 rosbag目录下运行 rosbag play ~/catkin_ws/src/MYNT-EYE-ORB-SLAM2-Sample/mynteye1.bag(我的rosbag的名称为mynteye1.bag)

    此时如果一切正常的话就可以看到自己录制的数据集转换成出来的运行效果来是不是很有成就感呢 ^ ^

    展开全文
  • SLAM之BundleFusion测试自制Rosbag数据集的可行方案

    千次阅读 热门讨论 2019-07-02 07:46:56
    SLAM之BundleFusion测试自制Rosbag数据集 前言 最近在做三维重建与轨迹定位相关的研究,需要以一些传统的重建算法做Baselines,我们选择了KinectFusion、ElasticFusion、BundleFusion、ORB-SLAM、VINS等典型的算法...

    SLAM之BundleFusion测试自制Rosbag数据集

    前言

    最近在做三维重建与轨迹定位相关的研究,需要以一些传统的重建算法做Baselines,我们选择了KinectFusion、ElasticFusion、BundleFusion、ORB-SLAM、VINS等典型的算法为基础,为了使发布的数据集更具有代表性,我们采用了RealSense录制了ROS格式的数据集,并基于此数据集和SLAM算法展开研究。下面是我基于BundleFusion跑通自制数据集的记录,由于本人接触三维相关技术不久,相关操作有些生疏请多见谅。

    本机配置

    显卡:NVIDIA GTX 1060

    内存:16GB

    环境:Ubuntu+Windows+Visual Studio2013

    大致流程

    1. 已录制好的Rosbag格式的数据集
    2. 基于VS2013测试BundleFusion的Demo
    3. 将源深度图和源RGB封装成.sens格式
    4. 提取Rosbag中的深度图和RGB,制作成源格式
    5. 将制作数据集封装成.sens格式
    6. 查看BundleFusion对自制数据集的效果

    效果展示

    我们在实验室搭建了规则的轨道,RealSense在轨道上匀速移动录制了Rosbag数据集,下图是BundleFusion对我们自己数据集重建的结果。

    具体流程

    基于VS2013测试BundleFusion的Demo

    https://graphics.stanford.edu/projects/bundlefusion/ (BF官网)

    https://bericht.neopostmodern.com/posts/artist-guide-to-bundlefusion (如何配置BF)

    其中在官网页面,我们要下载一个Dataset作为Demo,例如我下载了apt1作为我的样例来研究。

    其中,解压apt1.zip,是原始深度图、RGB图像以及其他信息,这些数据会被封装成.sens文件作为BF的输入。

    关于数据的具体内容,官网有给出详细说明:

    Each sequence contains:

    • Color frames (frame-XXXXXX.color.jpg): RGB, 24-bit, JPG
    • Depth frames (frame-XXXXXX.depth.png): depth (mm), 16-bit, PNG (invalid depth is set to 0)
    • Camera poses (frame-XXXXXX.pose.txt): camera-to-world (invalid transforms -INF)
    • Camera calibration (info.txt): color and depth camera intrinsics and extrinsics.

    We also have the above data in our custom .sens format, please see the c++ reader for how to load the file.

    这里官网给出了如何载入.sens的程序,是基于VS2013运行的SensReaderNoMLib,但是可惜我们需要实现封装原始数据到.sens的操作,这个程序缺乏各种依赖,不能满足我们的需求,因此我后续操作从BF源程序中修改,里面的依赖较为完善。

    配置BundleFusion过程中需要注意的几点是

    • 依赖需要下载完整,并且保持原始的目录结构以避免大的修改
    BundleFusion-master/
      external/
        mLib/ # this is the submodule you replaced
          data/
          src/
          [...]
      FriedLiver/
        [...]
        FriedLiver.sln
        [...]
    mLibExternal/ # you downloaded this from Dropbox
      include
      libsWindows
      [...]
    
    • 我尝试过VS2015,但遇到的“尝试引用已删除的函数”的报错我没办法解决,因此我就安装了官方的VS2013,最终一路无报错。
    • 我使用的是CUDA 8.0,源程序使用的是CUDA 7.0,因此需要将FriedLiver.vcxproj中的7.0改成8.0程序才能加载。
    • zParametersBundlingDefault.txt和zParametersDefault.txt拷贝到BundleFusion-master\FriedLiver\x64\Release文件夹里面,方便可执行程序直接运行。
    • 修改zParametersDefault.txt中第二行s_sensorIdx = 8,即指定使用离线数据。
    • 修改第58行,指定你要重建的.sens数据存放的位置,建议给出绝对路径
    s_binaryDumpSensorFile = 
    "D:/Compressed/BundleFusion-master/FriedLiver/x64/data/sequence.sens";
    
    • 编译通过后,执行程序,会出现命令行窗口显示正在处理第几帧,同时出现深度图窗口,程序结束之后会在上一级目录的data中生成ply点云文件,我在上一级目录中有创建data文件夹。即创建目录BundleFusion-master/FriedLiver/x64/data。

    将源深度图和源RGB封装成.sens格式

    因为找不到几个封装sens格式的方法,最终在BundleFusion源程序中找到相关函数,但做了一些尝试以及小修改之后可以了,因此我最终就编译了两个程序,一个生成sens,另一个跑sens生成ply。

    首先解压zip,我们先查看一下源数据的格式。

    在sensorData.h中可以看到,作者有给出对该类数据封装成.sens的相关实现(loadFromImages)。

    因此,在主程序中,我将原来的main函数注释掉,然后添加一个新的main用于生成sens。

    int main()
    {
    	ml::SensorData sd;
    	sd.loadFromImages("D:/Compressed/BundleFusionData", "frame-", "jpg");
    	sd.saveToFile("D:/Compressed/test.sens");
    }
    

    但最后还是抛出了类型异常。

    throw MLIB_EXCEPTION("unknown compression type");
    

    但在代码中有句注释,我根据该注释指定了深度图的类型,但是不管用。

    //by default use TYPE_OCCI_USHORT (it's just the best)
    //ml::SensorData::COMPRESSION_TYPE_DEPTH compressionDepth =ml::SensorData::COMPRESSION_TYPE_DEPTH::TYPE_OCCI_USHORT;
    

    最终我采取的方式是,在判定类型的函数里面强行指定TYPE_OCCI_USHORT类型,这样确实不会抛出异常,而且也成功生成了sens。但这样大家懂的,不严谨。下面是我在sensorData.h指定COMPRESSION_TYPE_DEPTH类型的函数,COMPRESSION_TYPE_COLOR判断正常,所以只需要设置一下depth就好。

    void compressDepth(const unsigned short* depth, unsigned int width, unsigned int height, COMPRESSION_TYPE_DEPTH type)
    
    unsigned short* decompressDepthAlloc(unsigned int width, unsigned int height, COMPRESSION_TYPE_DEPTH type)
    
    unsigned short* decompressDepthAlloc_stb(COMPRESSION_TYPE_DEPTH type) 
    
    unsigned int short* decompressDepthAlloc_occ(unsigned int width, unsigned int height, COMPRESSION_TYPE_DEPTH type)
    
    unsigned short* decompressDepthAlloc_raw(COMPRESSION_TYPE_DEPTH type) const
    

    我在调试的过程中发现,可指定的COMPRESSION_TYPE_DEPTH类型有三种:

    • TYPE_RAW_USHORT
    • TYPE_ZLIB_USHORT
    • TYPE_OCCI_USHORT

    官方推荐说“by default use TYPE_OCCI_USHORT (it’s just the best)”,但是尽管实验,我发现,除了TYPE_ZLIB_USHORT,其他两种类型生成的sens都无法重建出结果。因此,我在上述五个函数的开头都加入了下面这个语句指定type。

    type = TYPE_ZLIB_USHORT;
    

    这时候我们重新编译,运行,确实成功生成了sens,并且能够重建出点云,然后我将生成的可执行程序改个名字,避免被我下次重新编译程序覆盖了。

    提取Rosbag中的深度图和RGB,制作成源格式

    因为我的ROS配置在Ubuntu中,所以接下来我到Ubuntu系统中去将我们之前录制的Rosbag中的深度图和RGB提取出来,然后我继续在Windows中做处理。

    因为我们用RealSense录制的数据包含Depth、RGB、IMU,而这里BundleFusion只用到Depth和RGB,因此我提取了rosbag中的这两个数据,这里我新建两个文件夹存放它们。

    执行python脚本文件,提取数据(我尝试过roslaunch同步extract的方法,我这里没成功)

    import roslib
    import rosbag
    import rospy
    import cv2
    import os
    from sensor_msgs.msg import Image
    from cv_bridge import CvBridge
    from cv_bridge import CvBridgeError
    rgb = '/home/michael/slam/rosImage/rgb/'
    depth = '/home/michael/slam/rosImage/depth/'
    bridge = CvBridge()
    with rosbag.Bag('/home/michael/data_2019-06-15-20-36-24.bag', 'r') as bag:
        for topic,msg,t in bag.read_messages():
            if topic == "/camera/aligned_depth_to_color/image_raw": 
                cv_image = bridge.imgmsg_to_cv2(msg)
                timestr = "%.6f" %  msg.header.stamp.to_sec()
                image_name = timestr+ ".png"
                cv2.imwrite(depth + image_name, cv_image)  
            if topic == "/camera/color/image_raw": 
                cv_image = bridge.imgmsg_to_cv2(msg,"bgr8")
                timestr = "%.6f" %  msg.header.stamp.to_sec()
                image_name = timestr+ ".jpg"
                cv2.imwrite(rgb + image_name, cv_image)

    由于保留了时间戳,可以很轻易根据时间顺序和名称将深度图和RGB一一对应上,这里我将数据打包然后拷贝到我Windows继续处理。

    将制作数据集封装成.sens格式

    因为原始数据中有RGB、Depth、Pose、info这几个信息,但是位姿应该是重建过程中估计的,应该不可能一开始就保留了相机位姿,因此我觉得Pose数据应该是验证的作用,在重建过程中应该不需要,于是我把原来的pose.txt都move到Pose_txt文件夹里面,根据格式生成了全部相同的pose.txt,再放入源数据生成sens,看看对重建效果有没有影响(因为我没有去看源代码)。

    import os
    files=os.listdir("Pose_txt")
    for ff in files:
        fp=open("Test_txt/"+ff,"w")
        fp.write("1 0 0 0\n0 1 0 0\n0 0 1 0\n0 0 0 1")
        fp.close()

    最终结果和之前没有差别,因此这里我认为,pose.txt对重建结果没有影响,影响重建结果的数据是RGB和Depth。接下来我将之前的depth文件夹和rgb文件夹放到ROSImages文件夹里面,然后根据时间顺序我对图片数据做了一下处理。

    import shutil
    dp="ROSImages/depth/" # depth path
    rp="ROSImages/rgb/" # rgb path
    tp="ROSImages/testData/" # testData path
    depths=os.listdir(dp)
    depths.sort(cmp=None, key=None, reverse=False)
    count=0
    for dep in depths:
        if os.path.exists(rp+dep.split("png")[0]+"jpg")==True:
            rName="frame-"+str(count).zfill(6)+".color.jpg"
            dName="frame-"+str(count).zfill(6)+".depth.png"
            shutil.copy(dp+dep,tp+dName)
            shutil.copy(rp+dep.split("png")[0]+"jpg",tp+rName)
            count=count+1

    最后我成功生成了和原始数据一样的格式,并且我将pose.txt和info.txt也拷贝进去,保持和原来的格式一致。

    info的内容我也没有去怎么改,还没有开始深入研究,具体一些参数之后应该都需要调整。

    m_versionNumber = 4
    m_sensorName = StructureSensor
    m_colorWidth = 640
    m_colorHeight = 480
    m_depthWidth = 640
    m_depthHeight = 480
    m_depthShift = 1000
    m_calibrationColorIntrinsic = 582.871 0 320 0 0 582.871 240 0 0 0 1 0 0 0 0 1 
    m_calibrationColorExtrinsic = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 
    m_calibrationDepthIntrinsic = 583 0 320 0 0 583 240 0 0 0 1 0 0 0 0 1 
    m_calibrationDepthExtrinsic = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 
    m_frames.size = 1924

    我查看过我的数据,深度和RGB的分辨率一样是640x480,因此我没有变,图片数量m_frames.size我改和我实际情况一致,相机内参我还没调整,我只是先尝试一下是否可以成功重建。最终重建出来的结果还可以,在这里做一个小的记录,之后的工作会更严谨一些,希望大家一起进步。

    展开全文
  • 然后对图片和imu数据录制,考虑rosbag文件大小,对灰度图进行录制 rosbag record /mynteye/left/image_mono /mynteye/right/image_mono /mynteye/imu/data_raw 相机默认帧率较高,导致bag文件过大,可设置相机帧率...

    数据集录制:
    使用的相机是双目深度版,首先启动launch文件

    roslaunch mynteye_wrapper_d display.launch
    

    然后对图片和imu数据录制,考虑到RGB图像会导致rosbag文件过大,因此对灰度图进行录制

    rosbag record /mynteye/left/image_mono /mynteye/right/image_mono /mynteye/imu/data_raw
    

    相机默认帧率较高,导致bag文件过大,可设置相机帧率为10hz

    rosrun topic_tools throttle messages /mynteye/left/image_raw 10 /left
    rosrun topic_tools throttle messages /mynteye/right/image_raw 10 /right
    

    该指令为ROS指令。作用是订阅了/mynteye/left/image_mono,然后将采样频率降到10Hz,并降低采样频率后的图像数据发布新的名为/left的topic。

    最后,使用rosbag录制感兴趣的三个话题

    rosbag record /left /right /mynteye/imu/data_raw
    

    rosbag中提取图片:
    新建 extract_images.py

    # coding:utf-8
    #!/usr/bin/python
    
    # Extract images from a bag file.
    
    import roslib   #roslib.load_manifest(PKG)
    import rosbag
    import rospy
    import decimal
    import cv2
    from sensor_msgs.msg import Image
    from cv_bridge import CvBridge
    from cv_bridge import CvBridgeError
      
    
    left_path = '/home/wb/MYNT-EYE-S-SDK/dataset/left/'   # 左目图像的路径,需提前手动创建,也可以使用程序自动创建
    right_path = '/home/wb/MYNT-EYE-S-SDK/dataset/right/'
      
    class ImageCreator():
        def __init__(self):
            self.bridge = CvBridge()
            with rosbag.Bag('/home/wb/MYNT-EYE-S-SDK/2020-08-05-23-05-50.bag', 'r') as bag:  # 读取bag文件,注意设置正确的bag文件路径
                for topic,msg,t in bag.read_messages():
                    if topic == "/left": # 左目图像的topic
                            try:
                                cv_image = self.bridge.imgmsg_to_cv2(msg,"bgr8")
                            except CvBridgeError as e:
                                print e
                            # %.6f表示小数点后带有6位,可根据精确度需要修改
                            timestr = "%.6f" % msg.header.stamp.to_sec()
                            image_name = timestr + ".png" #图像命名:时间戳.png
                            cv2.imwrite(left_path + image_name, cv_image)  # 保存图像
                    elif topic == "/right": # 右目图像的topic
                            try:
                                cv_image = self.bridge.imgmsg_to_cv2(msg,"bgr8")
                            except CvBridgeError as e:
                                print e
                            # %.6f表示小数点后带有6位,可根据精确度需要修改
                            timestr = "%.6f" % msg.header.stamp.to_sec()
                            image_name = timestr + ".png" #图像命名:时间戳.png
                            cv2.imwrite(right_path + image_name, cv_image)  # 保存图像
      
    if __name__ == '__main__': 
        try:
            image_creator = ImageCreator()
        except rospy.ROSInterruptException:
            pass
    
    

    对于小觅相机的白色斑点,是IR模式导致的,可进行关闭,在MYNT-EYE-D-SDK/wrappers/ros/src/mynteye_wrapper_d/launch/mynteye.launch中可以关闭,修改如下:

    <!-- IR intensity -->
      <arg name="ir_intensity" default="4" />
    

    default="4"修改为default="0"

    展开全文
  • 除了上面kitti2bag数据集转化工具外,我们再介绍另一个非常好用的工具 这里阿里员工在github上开源的工具包,大家可以通过下面的链接进行访问 lidar2rosbag_KITTI 工具非常好用,建议star或者fork方便下次使用 ...
  • rosbag包转kitti数据集

    2021-06-21 16:02:56
    但是,大多数现有感知网络框架的数据格式与 KITTI 数据集的数据格式一致。在 KITTI 数据集中,图像文件保存为 .png 格式,PointCloud 文件保存为 .bin 文件。所以我们需要完成从.bag 文件到.png 和.bin 文件的转换
  • 1. 从KITTI数据集生成stereo rosbag python img2bag_kitti_StereoBag.py /*/00 img2bag_kitti_StereoBag_seq00.rosbag /*/00/times.txt Python 脚本可以在此处找到 ...
  • 想要将 KITTI 的 raw_data 转化为bag文件以便于在ROS中可以用rosbag play bag文件名的方式进行 play,然后在RVIZ中可以看到效果。于是需要用到 kitti2bag 。安装之后对RVIZ进行设置使得能够播放KITTI数据集
  • KITTI数据集bin转化为bag 参考链接: 数据集中必须包含times.txt**!!!** (1)(2)都提到的阿里员工转化工具lidar2rosbag_KITTI https://github.com/AbnerCSZ/lidar2rosbag_KITTI (1)关于KITTI数据中点云bin文件...
  • kitti数据集仅velodyne数据转rosbag 最近做3D激光雷达,于是在kitti上下了个80g的数据集,发现.bin不会用,想转成rosbag,发现官方推荐的工具似乎还要把相机数据一起下载下来。。 搞了半天,后来找到一个很好的工具...
  • 数据集轻松转换为ROS bag文件! 合作 这个包引起了更多人的浓厚兴趣,这比我一开始就想的要多。 看到这个我真的很高兴。 我看到了许多PR和问题,但是我的日常工作不允许我进一步推进此存储库。 为了使这个程序包...
  • kaggle上的数据集: 电影评论文本情感分析(Bag of Words Meets Bags of Popcorn)
  • kitti数据集转换bag包——图文教程

    千次阅读 2021-01-04 11:30:38
    前言:在做实验言过程中遇到了想要使用kitti数据集,而我想要的输入数据为bag包文件,故而需要将kitti数据集转化为rosbag包,经过查找相关资料终于实现,现分享出来yon供大家一起交流使用,如有不当之处,欢迎评论...
  • 将KITTI数据集转化为ROS bag包——kitti2bag使用教程 kitti2bag是把kitti的数据转换成rosbag的工具。本文主要记录下如何使用该工具,省的以后会忘掉。 1.安装kitti2bag pip install kitti2bag 注意这一步安装如果...
  • 一、下载KITTI数据集 下载地址一:KITTI 数据集官网:http://www.cvlibs.net/datasets/kitti/raw_data.php 下载地址二:链接: https://pan.baidu.com/s/1PCe6OD-QRVbPGWlq0cqPmw 密码: kjw9 再次感谢知乎大佬下载好...
  • 该脚本可以将KITTI数据集中的图像序列换转成ROS中的.bag文件格式。具体使用方法代码中给了示例。例如:将双目数据转换成.bag文件: python img2bag_kitti_StereoBag.py /home/Andy/my_workspace/Dataset/KITTI/01 ...
  • 将kitti的数据转为rosbag, 仅测试于grayscale数据集,测试过程如下.1. 在KITTI网页下载odometry dataset (grayscale, 22GB), 并解压.2. 指定image路径, 生成的bag名,时间戳路径, 然后运行.python img2bag_kitti_odo....
  • kaggle 电影评论文本情感分析(Bag of Words Meets Bags of Popcorn)数据集,和官方的一致。
  • Gmapping数据集数据解析

    千次阅读 2019-01-11 19:43:42
    gmapping测试数据解析 在安装Gmapping的过程中,我们使用了下载到的数据集来进行...数据集下载:激光雷达数据集.bag 数据集发布的话题 下载一个数据机后,我们运行一下数据集: 先roscore: roscore 新开终端 ro...
  • KITTI数据集下载链接(我保存到了百度网盘方便下载) 链接: https://pan.baidu.com/s/15_acpKSKjpSsfWzcJMl53g 密码: h31o --来自百度网盘超级会员V4的分享 安装kitti2bag 参考另一篇文章 将...
  • ros数据集录制:rosbag record

    千次阅读 2020-12-13 15:28:24
    1.查看话题 查看topic列表: rostopic list 打印topic内容: rostopic echo /topic 2.话题录制rosbag record ...rosbag record /topic1 /topic2 -o out.bag 3.话题回放 基本功能: rosbag play &
  • KITTI数据集的下载与转为rosbag

    千次阅读 2020-04-05 18:00:20
    需要用到KITTI数据集,将下载期间遇到的一些问题记录下,看到的可以少踩点坑。由于后面很有可能会用到ROS里面,所以实验了一下将其转为rosbag

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,111
精华内容 6,044
关键字:

bag数据集