欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中使用kitti數(shù)據(jù)集實現(xiàn)自動駕駛(繪制出所有物體的行駛軌跡)

 更新時間:2022年06月08日 09:06:53   作者:禿頭小蘇  
這篇文章主要介紹了Python中使用kitti數(shù)據(jù)集實現(xiàn)自動駕駛——繪制出所有物體的行駛軌跡,本次內(nèi)容主要是畫出kitti車的行駛的軌跡,需要的朋友可以參考下

本次內(nèi)容主要是上周內(nèi)容的延續(xù),主要畫出kitti車的行駛的軌跡

同樣的,我們先來看看最終實現(xiàn)的效果:

視頻

接下來就進入一步步的編碼環(huán)節(jié)。。。 

1、利用IMU、GPS計算汽車移動距離和旋轉(zhuǎn)角度

  • 計算移動距離

  • 通過GPS計算
#定義計算GPS距離方法
def computer_great_circle_distance(lat1,lon1,lat2,lon2):
    delta_sigma = float(np.sin(lat1*np.pi/180)*np.sin(lat2*np.pi/180)+\
                        np.cos(lat1*np.pi/180)*np.cos(lat2*np.pi/180)*np.cos(lon1*np.pi/180-lon2*np.pi/180))
    return 6371000.0*np.arccos(np.clip(delta_sigma,-1,1))

#使用GPS計算距離
 gps_distance += [computer_great_circle_distance(imu_data.lat,imu_data.lon,prev_imu_data.lat,prev_imu_data.lon)]
  • 通過IMU計算
IMU_COLUMN_NAMES = ['lat','lon','alt','roll','pitch','yaw','vn','ve','vf','vl','vu','ax','ay','az','af',
                    'al','au','wx','wy','wz','wf','wl','wu','posacc','velacc','navstat','numsats','posmode',
                    'velmode','orimode']
#獲取IMU數(shù)據(jù)
imu_data = read_imu('/home/wsj/data/kitty/RawData/2011_09_26/2011_09_26_drive_0005_sync/oxts/data/%010d.txt'%frame)
#使用IMU計算距離
imu_distance += [0.1*np.linalg.norm(imu_data[['vf','vl']])]
  • 比較兩種方式計算出的距離(GPS/IMU)
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.plot(gps_distance, label='gps_distance')
plt.plot(imu_distance, label='imu_distance')
plt.legend()
plt.show()

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CWY7VHDj-1640154002451)(C:\Users\WSJ\AppData\Roaming\Typora\typora-user-images\image-20211221163928106.png)]

顯然,IMU計算的距離較為平滑。

  • 計算旋轉(zhuǎn)角度 旋轉(zhuǎn)角度的計算較為簡單,我們只需要根據(jù)IMU獲取到的yaw值就可以計算(前后兩幀圖像的yaw值相減)

2、畫出kitti車的行駛軌跡

prev_imu_data = None
locations = []
for frame in range(150):
    imu_data = read_imu('/home/wsj/data/kitty/RawData/2011_09_26/2011_09_26_drive_0005_sync/oxts/data/%010d.txt'%frame)
    
    if prev_imu_data is not None:
        displacement = 0.1*np.linalg.norm(imu_data[['vf','vl']])
        yaw_change = float(imu_data.yaw-prev_imu_data.yaw)
        for i in range(len(locations)):
            x0, y0 = locations[i]
            x1 = x0 * np.cos(yaw_change) + y0 * np.sin(yaw_change) - displacement
            y1 = -x0 * np.sin(yaw_change) + y0 * np.cos(yaw_change)
            locations[i] = np.array([x1,y1])
            
    locations += [np.array([0,0])]           
    prev_imu_data =imu_data
plt.figure(figsize=(20,10))
plt.plot(np.array(locations)[:, 0],np.array(locations)[:, 1])

3、畫出所有車輛的軌跡

class Object():
    def __init__(self, center):
        self.locations = deque(maxlen=20)
        self.locations.appendleft(center)
    def update(self, center, displacement, yaw):
        for i in range(len(self.locations)):
            x0, y0 = self.locations[i]
            x1 = x0 * np.cos(yaw_change) + y0 * np.sin(yaw_change) - displacement
            y1 = -x0 * np.sin(yaw_change) + y0 * np.cos(yaw_change)
            self.locations[i] = np.array([x1,y1])
        if center is not None:    
            self.locations.appendleft(center)
    def reset(self):
        self.locations = deque(maxlen=20)
#創(chuàng)建發(fā)布者        
loc_pub = rospy.Publisher('kitti_loc', MarkerArray, queue_size=10)

  #獲取距離和旋轉(zhuǎn)角度
        imu_data =  read_imu('/home/wsj/data/kitty/RawData/2011_09_26/2011_09_26_drive_0005_sync/oxts/data/%010d.txt'%frame)
        
        if prev_imu_data is None:
            for track_id in centers:
                tracker[track_id] = Object(centers[track_id])
        else:
            displacement = 0.1*np.linalg.norm(imu_data[['vf','vl']])
            yaw_change = float(imu_data.yaw - prev_imu_data.yaw)
            for track_id in centers: # for one frame id 
                if track_id in tracker:
                    tracker[track_id].update(centers[track_id], displacement, yaw_change)
                else:
                    tracker[track_id] = Object(centers[track_id])
            for track_id in tracker:# for whole ids tracked by prev frame,but current frame did not
                if track_id not in centers: # dont know its center pos
                    tracker[track_id].update(None, displacement, yaw_change)
        
        prev_imu_data = imu_data
        
def publish_loc(loc_pub, tracker, centers):
    marker_array = MarkerArray()
    for track_id in centers:
        marker = Marker()
        marker.header.frame_id = FRAME_ID
        marker.header.stamp = rospy.Time.now()
 
        marker.action = marker.ADD
        marker.lifetime = rospy.Duration(LIFETIME)
        marker.type = Marker.LINE_STRIP
        marker.id = track_id
        marker.color.r = 1.0
        marker.color.g = 1.0
        marker.color.b = 0.0
        marker.color.a = 1.0
        marker.scale.x = 0.2
    
        marker.points = []
        for p in tracker[track_id].locations:
            marker.points.append(Point(p[0], p[1], 0))
        marker_array.markers.append(marker)
    loc_pub.publish(marker_array)

到此這篇關于Python中使用kitti數(shù)據(jù)集實現(xiàn)自動駕駛——繪制出所有物體的行駛軌跡的文章就介紹到這了,更多相關kitti數(shù)據(jù)集自動駕駛內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python?ctypes庫底層交互秘籍實例探究

    Python?ctypes庫底層交互秘籍實例探究

    ctypes是Python標準庫中的外部函數(shù)庫,允許Python調(diào)用動態(tài)鏈接庫中的函數(shù),它提供了與C兼容的數(shù)據(jù)類型和允許Python調(diào)用共享庫中的函數(shù),對系統(tǒng)級編程和與硬件交互非常有用
    2024-01-01
  • python socket網(wǎng)絡編程之粘包問題詳解

    python socket網(wǎng)絡編程之粘包問題詳解

    這篇文章主要介紹了python socket網(wǎng)絡編程之粘包問題詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Python中使用logging模塊代替print(logging簡明指南)

    Python中使用logging模塊代替print(logging簡明指南)

    這篇文章主要介紹了Python中使用logging模塊代替print的好處說明,主旨是logging模塊簡明指南,logging模塊的使用方法介紹,需要的朋友可以參考下
    2014-07-07
  • 在tensorflow中實現(xiàn)去除不足一個batch的數(shù)據(jù)

    在tensorflow中實現(xiàn)去除不足一個batch的數(shù)據(jù)

    今天小編就為大家分享一篇在tensorflow中實現(xiàn)去除不足一個batch的數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • pyenv與virtualenv安裝實現(xiàn)python多版本多項目管理

    pyenv與virtualenv安裝實現(xiàn)python多版本多項目管理

    這篇文章主要介紹了pyenv與virtualenv安裝實現(xiàn)python多版本多項目管理過程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • python冒泡排序算法的實現(xiàn)代碼

    python冒泡排序算法的實現(xiàn)代碼

    這篇文章主要介紹了python冒泡排序算法的實現(xiàn)代碼,大家參考使用
    2013-11-11
  • python如何利用joblib保存訓練模型

    python如何利用joblib保存訓練模型

    這篇文章主要介紹了python如何利用joblib保存訓練模型問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python Flask-web表單使用詳解

    Python Flask-web表單使用詳解

    這篇文章主要為大家詳細介紹了Python Flask-web表單的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 最新評論