本文僅為 ros使用自動駕駛資料集kitti教材學習小節,詳細内容請參照原視訊 kitti資料集的使用主要分為三個檔案,kitti.py,data_utils.py,publish_utils.py 使用的資料包為:2011_09_26_drive_0005_sync
釋出圖檔
1.釋出器publisher: cam_pub = rospy.Publisher('kitti_cam',Image,queue_size=10) 2.讀取檔案data_utils.py 3.釋出消息publish_utils.py 圖檔顯示的主要步驟
cam_pub
釋出點雲資料
pcl_pub
釋出IMU資料
傳感器提供的姿态角,也稱為歐拉角:pitch yaw roll 來顯示

包含的資料類型
資料讀取,在oxts/data/中包含有imu與gps資料
imu_data
GPS資料
gps_pub = rospy.Publisher('kitti_gps',NavSatFix,queue_size=10)
def
檢視gps資料: rostopic list rostopic info /kitti_gps rostopic echo /kitti_gps
tracking資料讀取
對物體進行标注,框出目标物 讀取檔案:
df_tracking
tracking 中包含的資料類型
可以使用jupyter notebook顯示資料
import
得到的資料如下:
2D偵測框
例如van:bbox_left 從圖檔左邊開始數第296.7個像素為左邊的框框,bbox_top從上往下數161.7個像素為上邊界坐标,right, bottom同理,由此可以得到van的2D框框
将車輛進行歸類,并設定顯示類型
df
3D偵測框以及顯示track_id
3D偵測由 height,width,length,pos_x,pos_y,pos_z,rot_y這七個參數确定位置,這七個坐标是定義在相機坐标系的,需要與velodyne進行坐标轉化
calib
Calibration提供了任意坐标系的轉換方法 在rviz中顯示3D框需要物體的八個頂點,以及點與點之間的連線 計算3D偵測盒,在相機坐标系
def
連線中下面:左前放為0,然後順時針依次為1,2,3,上面同理
畫出運動軌迹
1.計算過去的坐标
目前坐标系在frame2,在第二幀中車輛坐标為(0,0),要通過坐标轉換計算frame1在frame2坐标系下的坐标值,這樣就可以将物體的曆史坐标計算出來 設由目前幀frame1,運動到frame2,運動距離為d,旋轉角為θ 幀旋轉後得到的(x,y)坐标為R(-θ)·[x;y] =[xcos(-θ)+ysin(-θ);xsin(-θ)+ycos(-θ)] 平移後[xcos(-θ)+ysin(-θ)-d;xsin(-θ)+ycos(-θ)]
x1
計算平移距離d
gps_distance
平移有兩種計算方式,通過GPS或者IMU資料進行計算, GPS計算的是大圓距離,适用于時間間隔較長的情形,采集時間短gps誤差累計較大 IMU适用于時間間隔較短的情形,在計算距離中我們的時間間隔為0.1s,imu得到的距離更平滑。
角度θ
yaw_change
imu_data中相鄰兩幀yaw相減即可 最終将曆史幀資料全部轉換到目前幀,不用考慮之前幀的坐标值 2.軌迹更新 在跟蹤中設定tracker{},與center{}兩個衡量名額 tracker中儲存着object的資訊,通過track_id進行檢索object center中儲存着該幀檢測到物體的中心點 需要考慮的情形: a.第一次檢測到:track_id在center中,不在tracker中,建立新的object
tracker
b.track_id在tracker,也在center中
tracker
c.遮擋情形:track_id在tracker中,但是center中未檢測到
for
最後将軌迹釋出出去