本次内容主要是使用kitti数据集来可视化kitti车上一些传感器(相机、激光雷达、IMU)采集的资料以及对行人和车辆进行检测并在图像中画出行人和车辆的2D框、在点云中画出行人和车辆的3D框。

首先先看看最终实现的效果:

自动驾驶视频

看了上面的效果视频,是不是充满好奇了呢,下面让我们一步步的来学习。。。

1、准备工作

1.1数据集下载

在开始之前,先做一些准备工作,即从kitti上下载相关数据:kitty官网

如图所示:下载途中箭头所指的两个文件【注:需要先进行注册】

除了下载这两个文件,后面还需要下载汽车模型文件和标注文件,这里直接贴出下载地址:数据下载


1.2 创建工作空间并建立一些文件

  • 创建功能包
cd ~/catkin_ws/src
catkin_create_pkg kitti_turtorial rospy
  • 在刚创建的功能包下的src文件夹中创建以下python文件

2、详细步骤

说明:该部分只是自己的学习笔记,故只会贴出每一步比较核心的代码,要想看懂整个流程,建议完整的观看相关视频:视频

当然最后我也会贴出所有文件的源码供大家学习


2.1 发布照片

#创建一个摄像头的发布者
cam_pub = rospy.Publisher('kitti_cam',Image,queue_size=10)
#读取摄像机数据
image = read_camera(os.path.join(DAtA_PATH, 'image_02/data/%010d.png'%frame))
#发布数据
publish_camera(cam_pub,bridge,image,boxes_2d,types)


2.2 发布点云

#创建一个点云的发布者
pcl_pub = rospy.Publisher('kitti_point_cloud',PointCloud2,queue_size=10)
#读取点云数据
point_cloud = read_point_cloud(os.path.join(DAtA_PATH,'velodyne_points/data/%010d.bin'%frame))
#发布数据
publish_point_cloud(pcl_pub,point_cloud)

2.3 画出自己车子以及照相机视野

#创建一个汽车的发布者
ego_pub = rospy.Publisher('kitti_ego_car',MarkerArray,queue_size=10)
#发布ego_car数据
publish_ego_car(ego_pub)##绘制车子的照相机视野
marker.id = 0
marker.action = marker.ADD
marker.lifetime = rospy.Duration()
marker.type = Marker.LINE_STRIPmarker.color.r = 0.0
marker.color.g = 1.0
marker.color.b = 0.0
marker.color.a = 1.0
marker.scale.x = 0.2marker.points = []
marker.points.append(Point(10,-10,0))
marker.points.append(Point(0,0,0))
marker.points.append(Point(10,10,0))marker_array.markers.append(marker)


2.4 发布IMU

#创建一个IMU发布者
imu_pub = rospy.Publisher('kitti_imu',Imu,queue_size=10)#发布imu数据
publish_imu(imu_pub,imu_data)##IMU发布函数相关设置
def publish_imu(imu_pub,imu_data):imu = Imu()imu.header.frame_id = FRAME_IDimu.header.stamp = rospy.Time.now()#设置旋转量q = tf.transformations.quaternion_from_euler(float(imu_data.roll),float(imu_data.pitch),float(imu_data.yaw));imu.orientation.x = q[0]imu.orientation.y = q[1]imu.orientation.z = q[2]imu.orientation.w = q[3]#设置线性加速度imu.linear_acceleration.x = imu_data.afimu.linear_acceleration.y = imu_data.alimu.linear_acceleration.z = imu_data.au#设置角加速度imu.angular_velocity.x = imu_data.wfimu.angular_velocity.y = imu_data.wlimu.angular_velocity.z = imu_data.wuimu_pub.publish(imu)

2.5 发布GPS

#创建一个GPS发布者
gps_pub = rospy.Publisher('kitti_gps',NavSatFix,queue_size=10)
#发布GPS数据
publish_gps(gps_pub,imu_data)##GPS发布函数相关设置
def publish_gps(gps_pub,imu_data):gps = NavSatFix()gps.header.frame_id = FRAME_IDgps.header.stamp = rospy.Time.now()#gps经度、纬度、海拔高度gps.latitude = imu_data.latgps.longitude = imu_data.longps.altitude = imu_data.altgps_pub.publish(gps)

2.6 在rviz上显示2D侦测框

#读取2D检测框数据
boxes_2d = np.array(df_tracking_frame[['bbox_left', 'bbox_top', 'bbox_right', 'bbox_bottom']])
types = np.array(df_tracking_frame['type'])## 2D框相关设置
for typ,box in zip(types,boxes):top_left = int(box[0]),int(box[1])bottom_right = int(box[2]),int(box[3])cv2.rectangle(image,top_left,bottom_right,DETECTION_COLOR_DICT[typ],2)
cam_pub.publish(bridge.cv2_to_imgmsg(image,"bgr8"))

2.7 在rviz上显示3D 侦测框

 #读取3D检测框数据
boxes_3d = np.array(df_tracking_frame[['height', 'width', 'length', 'pos_x', 'pos_y', 'pos_z', 'rot_y']]      corners_3d_velos = []
for box_3d in boxes_3d:corners_3d_cam2 = compute_3d_box_cam2(*box_3d)corners_3d_velo = calib.project_rect_to_velo(corners_3d_cam2.T)corners_3d_velos += [corners_3d_velo]##3D框发布函数相关设置
def publish_3dbox(box3d_pub,corners_3d_velos,types):marker_array = MarkerArray()for i, corners_3d_velo in enumerate(corners_3d_velos):# 3d boxmarker = Marker()marker.header.frame_id = FRAME_IDmarker.header.stamp = rospy.Time.now()marker.id = imarker.action = Marker.ADDmarker.lifetime = rospy.Duration(LIFETIME)marker.type = Marker.LINE_LISTb, g, r = DETECTION_COLOR_DICT[types[i]]marker.color.r = r/255.0marker.color.g = g/255.0marker.color.b = b/255.0marker.color.a = 1.0marker.scale.x = 0.1marker.points = []for l in LINES:p1 = corners_3d_velo[l[0]]marker.points.append(Point(p1[0], p1[1], p1[2]))p2 = corners_3d_velo[l[1]]marker.points.append(Point(p2[0], p2[1], p2[2]))marker_array.markers.append(marker)box3d_pub.publish(marker_array)

3、代码合集

代码托管在Gitee上,自行下载:代码


咻咻咻咻~~duang~~点个赞呗

下一篇:使用kitti数据集实现自动驾驶——绘制出所有物体的行驶轨迹

使用kitti数据集实现自动驾驶——发布照片、点云、IMU、GPS、显示2D和3D侦测框相关推荐

  1. 【从kitti开始自动驾驶】--9.1 利用IMU/GPS测距并比较效果(jupyter)

    "义勇添青史几段" 1 基础知识 1.1 角度计算 1.2 距离计算 2 python程序编写 2.1 大圆距离公式函数 2.2-a GPS测距离 2.2-b IMU测距离 2.3 ...

  2. KITTI数据集可视化(一):点云多种视图的可视化实现

    如有错误,恳请指出. 在本地上,可以安装一些软件,比如:Meshlab,CloudCompare等3D查看工具来对点云进行可视化.而这篇博客是将介绍一些代码工具将KITTI数据集进行可视化操作,包括点 ...

  3. 【数据集】自动驾驶都有什么测试基准?

    文章首发于微信公众号<有三AI> [数据集]自动驾驶都有什么测试基准? 自动驾驶是现在非常活跃的领域,几乎所有的车厂,大型互联网公司都参与其中,其中计算机视觉技术的应用也非常广泛,这篇文章 ...

  4. 17篇点云处理综述-点云语义分割、点云物体检测、自动驾驶中的点云处理……

    三维点云是最重要的三维数据表达方式之一. 从技术角度看,在三维重建.SLAM.机器人感知等多个领域,三维点云都是最简单最普遍的表达方式,因为三维点云直接提供了三维空间数据,而图像则需要通过透视几何来反 ...

  5. 自动驾驶系统进阶与项目实战(九)基于行锚框和全局信息的深度学习车道线检测方法

    自动驾驶系统进阶与项目实战(九)基于行锚框和全局信息的深度学习车道线检测方法 目前多数基于深度学习的车道线检测方法通常把车道线的识别问题处理为车道线像素分割问题,单纯的像素级语义分割模型的推理的实时性 ...

  6. 数据集_自动驾驶数据集

    前面介绍了自动驾驶的仿真平台,接下来又收集了目前主要的自动驾驶数据集.抱着这个想法,何不做一个awesome,在git上搜索,已经有人建了一个awesome了,也免得重复造轮子.但是作者很久没更新了, ...

  7. 「数据集」自动驾驶都有什么测试基准?

    https://www.toutiao.com/i6695877799351157261/ 自动驾驶是现在非常活跃的领域,几乎所有的车厂,大型互联网公司都参与其中,其中计算机视觉技术的应用也非常广泛, ...

  8. 无人驾驶图像数据集_自动驾驶数据集

    转自https://zhuanlan.zhihu.com/p/45331609 无人驾驶技术涵盖了感知.决策.控制等领域的方方面面.感知层面对目标识别跟踪.障碍物检测.精确定位等技术的需求,使得深度学 ...

  9. 本科阶段就挑战自动驾驶开发?华为云ModelArts帮你轻松实现!

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  10. lisp 线性标注自动避让_本科阶段就挑战自动驾驶开发?华为云ModelArts说Yes!

    作为战略新兴产业,人工智能已经开始广泛应用于多个领域.近几年,科技公司.互联网公司等各领域的企业纷纷布局自动驾驶.那么,自动驾驶技术究竟发展得如何了?日前,华为云携手上海交通大学创新中心举办的华为云人 ...

最新文章

  1. Android视频拍摄功能总结
  2. 概述nodejs核心机制
  3. 实训九(游戏退出按钮的实现)
  4. shell下数字和字符串比较操作命令
  5. 我是大道至简山寨版~
  6. 不宜使用Selenium自动化的10个测试场景
  7. 【Codeforces 977F】Consecutive Subsequence
  8. [nowcoder]最长区间
  9. java线程--倒计时器CountDownLatch
  10. 推荐CSDN排名前1000博主
  11. 三维空间内点到直线的距离计算公式
  12. Unity Texture2D的裁剪、镜像、翻转、缩放、合并、分辨率
  13. 算法:凸多边形最优三角剖分
  14. 大学三年来的心路历程分享
  15. 制造业生产过程中多源异构数据处理方法综述
  16. 如何为BLE 设备添加OTA DFU 空中升级服务(下)?
  17. 焊接入门——基础知识整理
  18. 俄罗斯套娃信封问题 转https://www.jianshu.com/p/9d9495ef4372
  19. Spice Model 解读
  20. 攻防世界_江苏工匠杯_MISC_看雪看雪看雪

热门文章

  1. 二维码 PDF417
  2. 搜索百度网盘的小姐姐,云网盘之家
  3. 华为认证hcia含金量_华为hcna认证含金量高吗 华为hcna认证用处大吗
  4. Elf二进制文件解析
  5. 表单构建html的页面代码,网页设计表单制作代码 制作一个很简单网页表单代码...
  6. HackerRank 算法刷题笔记(一),基于Go语言
  7. WPF 程序加载PGIS性能问题
  8. 典型环节的电路模拟MATLAB,典型环节的模拟及参数测试
  9. 网络驱动器无法访问,提示找不到网络路径故障处理过程
  10. 2021接力题典1800【数学一】-汤家凤【题目册】