• kitti-b站教程


      Kittidata处理-B站教程

    一,kitti资料介绍与可视化

    1,所用数据集

    2011_09_26_drive_0005_sync

    2,使用kitti2bag,把kitti数据集转换为ros的bag文件,可供ros读取。

      1,安装kitti2bag

       pip install kitti2bag

      2,用kitti2bag命令把数据转换为包

      

      

       在下面放着三个标定文件

      kitti2bag -t 2011_09_26 -r 0005 raw_synced

      上面的数据参考数据集的序号:2011_09_26_drive_0005_sync

      

       生成以下的话题

      

    3,执行生成的bag文件

    rqt_bag kitti_2011_09_26_drive_0005_synced.bag 

     

      选中一个话题,右键可以查看相关的图像

    4,也可以用rviz查看

    roscore

    rviz

    rosbag play -l kitti_2011_10_03_drive_0042_synced.bag 

    只转化lidar数据为bag文件:

    KITTI数据集bin转化为bag

    二,发布照片

    使用自己写的程序来publish照片,并用rviz可视化

    1,建立功能包kitti_tutorial 依赖于rospy

    python代码如下

    # coding=UTF-8
    #! /usr/bin/env python
    import  rospy
    from sensor_msgs.msg import Image
    import cv2 #图片以opencv的形式展现,导入opencv的包
    import os #文件拼接要用这个
    from cv_bridge import CvBridge
    
    """
        1,导入包
        2,创建节点
        3,创建发布者
        4,发布者循环发布数据
    """
    
    DATA_PATH = "/home/l/kittidata/1kittiros/RawData/2011_09_26/2011_09_26_drive_0005_sync"
    
    if __name__ == "__main__":
        frame = 0
        # 1,导入包
        rospy.init_node("kitti_node", anonymous=True)
        cam_pub = rospy.Publisher("kitti_cam", Image, queue_size=10)
        brideg = CvBridge() #cv的图片格式转换为ros图片格式的桥梁
        rate = rospy.Rate(10)
    
        while not rospy.is_shutdown():
            #文件路径拼接,%010d 是一个十位的整数,%0是第零号,0000000000
            # img = cv2.imread(os.path.join(DATA_PATH, "image_02/data/%010d.png"%0))
            img = cv2.imread(os.path.join(DATA_PATH, "image_02/data/%010d.png"%frame))
            #把cv和ros的图片格式进行相互的转换
            cam_pub.publish(brideg.cv2_to_imgmsg(img,"bgr8"))
            rospy.loginfo("left color camera published")
            frame += 1
            #frame最大为153,过了153后,不会出错,然后循环,从零开始
            frame %=154
            rate.sleep()

    三,发布点云资料

    发布点云资料,在rviz中

    # coding=UTF-8
    #! /usr/bin/env python
    import  rospy
    from std_msgs.msg import Header
    from sensor_msgs.msg import Image, PointCloud2 #ros里专门用来发布点云的格式
    import sensor_msgs.point_cloud2 as pcl2
    import cv2 #图片以opencv的形式展现,导入opencv的包
    import os #文件拼接要用这个
    from cv_bridge import CvBridge
    import numpy as np #导入处理数据的资料库
    """
        1,导入包
        2,创建节点
        3,创建发布者
        4,发布者循环发布数据
    """
    
    DATA_PATH = "/home/l/kittidata/1kittiros/RawData/2011_09_26/2011_09_26_drive_0005_sync"
    
    if __name__ == "__main__":
        frame = 0
        # 1,导入包
        rospy.init_node("kitti_node", anonymous=True)
        cam_pub = rospy.Publisher("kitti_cam", Image, queue_size=10)
        pcl_pub = rospy.Publisher("kitti_point_cloud", PointCloud2, queue_size=10)
        brideg = CvBridge() #cv的图片格式转换为ros图片格式的桥梁
        rate = rospy.Rate(10)
    
        while not rospy.is_shutdown():
            #文件路径拼接,%010d 是一个十位的整数,%0是第零号,0000000000
            # img = cv2.imread(os.path.join(DATA_PATH, "image_02/data/%010d.png"%0))
            img = cv2.imread(os.path.join(DATA_PATH, "image_02/data/%010d.png"%frame))
            #把cv和ros的图片格式进行相互的转换
            cam_pub.publish(brideg.cv2_to_imgmsg(img,"bgr8"))
    
            #用numpy来读取数据,并转换为numpy的格式,从bin里读取数据,必须告诉他是浮点数float32的数据格式,读取的数据是一维的阵列,把他变成n行4列的矩阵格式
            #point__cloud是n*4的矩阵
            point_cloud = np.fromfile(os.path.join(DATA_PATH, "velodyne_points/data/%010d.bin"%frame),dtype=np.float32).reshape(-1,4)
            #将点云正确的以PointCloud2的格式发布出去,用sensor_msgs.point_cloud2的资料库
            #建立Header,告诉他现在的资讯
            header = Header()
            header.stamp = rospy.Time.now() #时间点
            header.frame_id = "map" #坐标系的名称,可以随便改
            #读取的点云的xyz坐标都是float32的形态,并把它转换为ros里的pointcloud2的格式
            #pcl2.create_cloud_xyz32,只接受xyz三个坐标,不接受反射率的资料,因此point_cloud[:, :3],第一个:指导入所有的点,第二个:指的是取这个资料的前三列
            pcl_pub.publish(pcl2.create_cloud_xyz32(header, point_cloud[:, :3]))
            rospy.loginfo("published,第%d帧",frame)
            rate.sleep()
            frame += 1
            #frame最大为153,过了153后,不会出错,然后循环,从零开始
            frame %=154

    四,画出自己的车子和相机的视野

    五,发布IMU资料

    六,发布GPS资料

    七,下载tracking资料并读取

    八,画出2d侦测框

    九,画出所有的2d侦测框

    十,在rviz上显示2d侦测框

    十一,画出3d侦测框

    https://github.com/charlesq34/frustum-pointnets

    计算坐标

    十二,画出所有3d侦测框

    1,rawdata转换为kitti2bag

    2,

    1, 学会用tutorial

    2, 代码复现

    有道词典
    roscore rviz ro ...
    详细X
    roscore rviz rosbag - l kitti_2011_10_03_drive_0042_synced.bag玩
  • 相关阅读:
    idea 将java导出为可执行jar及导入jar依赖
    使用idea 调试java -jar xxx.jar方式启动
    springboot 打成的jar包在ClassLoader().getResource方法读取文件为null
    maven 使用dependencyManagement统一管理依赖版本
    Win10系列:C#应用控件基础5
    Win10系列:C#应用控件基础4
    Win10系列:C#应用控件基础3
    Win10系列:C#应用控件基础2
    Win10系列:C#应用控件基础1
    Win10系列:UWP界面布局进阶9
  • 原文地址:https://www.cnblogs.com/ashuoloveu/p/14755018.html
Copyright © 2020-2023  润新知