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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用kitti数据集实现自动驾驶——发布照片、点云、IMU、GPS、显示2D和3D侦测框 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本次內(nèi)容主要是使用kitti數(shù)據(jù)集來可視化kitti車上一些傳感器(相機、激光雷達、IMU)采集的資料以及對行人和車輛進行檢測并在圖像中畫出行人和車輛的2D框、在點云中畫出行人和車輛的3D框。

首先先看看最終實現(xiàn)的效果:

自動駕駛視頻

看了上面的效果視頻,是不是充滿好奇了呢,下面讓我們一步步的來學(xué)習(xí)。。。

1、準(zhǔn)備工作

1.1數(shù)據(jù)集下載

在開始之前,先做一些準(zhǔn)備工作,即從kitti上下載相關(guān)數(shù)據(jù):kitty官網(wǎng)

如圖所示:下載途中箭頭所指的兩個文件【注:需要先進行注冊】

除了下載這兩個文件,后面還需要下載汽車模型文件和標(biāo)注文件,這里直接貼出下載地址:數(shù)據(jù)下載


?

1.2 創(chuàng)建工作空間并建立一些文件

  • 創(chuàng)建功能包
cd ~/catkin_ws/src catkin_create_pkg kitti_turtorial rospy
  • 在剛創(chuàng)建的功能包下的src文件夾中創(chuàng)建以下python文件

?

2、詳細步驟

說明:該部分只是自己的學(xué)習(xí)筆記,故只會貼出每一步比較核心的代碼,要想看懂整個流程,建議完整的觀看相關(guān)視頻:視頻

當(dāng)然最后我也會貼出所有文件的源碼供大家學(xué)習(xí)

?
?

2.1 發(fā)布照片

#創(chuàng)建一個攝像頭的發(fā)布者 cam_pub = rospy.Publisher('kitti_cam',Image,queue_size=10) #讀取攝像機數(shù)據(jù) image = read_camera(os.path.join(DAtA_PATH, 'image_02/data/%010d.png'%frame)) #發(fā)布數(shù)據(jù) publish_camera(cam_pub,bridge,image,boxes_2d,types)


?

2.2 發(fā)布點云

#創(chuàng)建一個點云的發(fā)布者 pcl_pub = rospy.Publisher('kitti_point_cloud',PointCloud2,queue_size=10) #讀取點云數(shù)據(jù) point_cloud = read_point_cloud(os.path.join(DAtA_PATH,'velodyne_points/data/%010d.bin'%frame)) #發(fā)布數(shù)據(jù) publish_point_cloud(pcl_pub,point_cloud)

?

2.3 畫出自己車子以及照相機視野

#創(chuàng)建一個汽車的發(fā)布者 ego_pub = rospy.Publisher('kitti_ego_car',MarkerArray,queue_size=10) #發(fā)布ego_car數(shù)據(jù) 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 發(fā)布IMU

#創(chuàng)建一個IMU發(fā)布者 imu_pub = rospy.Publisher('kitti_imu',Imu,queue_size=10)#發(fā)布imu數(shù)據(jù) publish_imu(imu_pub,imu_data)##IMU發(fā)布函數(shù)相關(guān)設(shè)置 def publish_imu(imu_pub,imu_data):imu = Imu()imu.header.frame_id = FRAME_IDimu.header.stamp = rospy.Time.now()#設(shè)置旋轉(zhuǎn)量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]#設(shè)置線性加速度imu.linear_acceleration.x = imu_data.afimu.linear_acceleration.y = imu_data.alimu.linear_acceleration.z = imu_data.au#設(shè)置角加速度imu.angular_velocity.x = imu_data.wfimu.angular_velocity.y = imu_data.wlimu.angular_velocity.z = imu_data.wuimu_pub.publish(imu)

?

2.5 發(fā)布GPS

#創(chuàng)建一個GPS發(fā)布者 gps_pub = rospy.Publisher('kitti_gps',NavSatFix,queue_size=10) #發(fā)布GPS數(shù)據(jù) publish_gps(gps_pub,imu_data)##GPS發(fā)布函數(shù)相關(guān)設(shè)置 def publish_gps(gps_pub,imu_data):gps = NavSatFix()gps.header.frame_id = FRAME_IDgps.header.stamp = rospy.Time.now()#gps經(jīng)度、緯度、海拔高度gps.latitude = imu_data.latgps.longitude = imu_data.longps.altitude = imu_data.altgps_pub.publish(gps)

?

2.6 在rviz上顯示2D偵測框

#讀取2D檢測框數(shù)據(jù) boxes_2d = np.array(df_tracking_frame[['bbox_left', 'bbox_top', 'bbox_right', 'bbox_bottom']]) types = np.array(df_tracking_frame['type'])## 2D框相關(guān)設(shè)置 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檢測框數(shù)據(jù) 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框發(fā)布函數(shù)相關(guān)設(shè)置 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數(shù)據(jù)集實現(xiàn)自動駕駛——繪制出所有物體的行駛軌跡

總結(jié)

以上是生活随笔為你收集整理的使用kitti数据集实现自动驾驶——发布照片、点云、IMU、GPS、显示2D和3D侦测框的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。