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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Apollo详解之定位模块——RTK定位

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apollo详解之定位模块——RTK定位 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

Apollo的定位模塊提供了三種定位方法,分別是RTK、NDT、MSF。
所謂RTK定位,可參考百度百科

RTK(Real?Time?Kinematic)實(shí)時動態(tài)測量技術(shù),是以載波相位觀測為根據(jù)的實(shí)時差分GPS(RTDGPS)技術(shù),由基準(zhǔn)站接收機(jī)、數(shù)據(jù)鏈、?流動站接收機(jī)三部分組成在基準(zhǔn)站上安置1臺接收機(jī)為參考站,?對衛(wèi)星進(jìn)行連續(xù)觀測,并將其觀測數(shù)據(jù)和測站信息,通過無線電傳輸設(shè)備,實(shí)時地發(fā)送給流動站,流動站GPS接收機(jī)在接收GPS衛(wèi)星信號的同時,通過無線接收設(shè)備,接收基準(zhǔn)站傳輸?shù)臄?shù)據(jù),然后根據(jù)相對定位的原理,實(shí)時解算出流動站的三維坐標(biāo)及其精度。

簡單來說,就是依靠地面上擁有絕對準(zhǔn)確位置的基站測量GPS定位的誤差,將該誤差發(fā)送給附近的接收機(jī)進(jìn)行校準(zhǔn),提高GPS定位精度,往往可以達(dá)到厘米級的定位精度。

RTK定位組件簡述

Apollo中RTK定位組件和上述RTK定位的定義并沒有關(guān)系,其功能只是將GPS的數(shù)據(jù)和對應(yīng)時間戳的IMU數(shù)據(jù)進(jìn)行組合最終輸出高精地圖下的位置。沒有涉及到RTK(Real?Time?Kinematic)實(shí)時動態(tài)測量技術(shù)。
組合導(dǎo)航會輸出GPS和IMU的消息,前者輸出ENU坐標(biāo)系下的點(diǎn)坐標(biāo)、位姿、線速度,后者輸出車輛坐標(biāo)系的線加速度、角速度、歐拉角、航向,然而兩者輸出的頻率相差很大,GPS數(shù)據(jù)更新頻率要遠(yuǎn)低于IMU數(shù)據(jù)的更新頻率,在Lgsvl仿真中,可以參考

可以看到,仿真中IMU消息的發(fā)布頻率比GPS高將近十倍。

RTKLocalizationComponent

該組件會訂閱GPS消息Gps和IMU消息CorrectedImu,根據(jù)Gps的時間戳找到最適合的CorrectedImu,將其中的數(shù)據(jù)組合,向相關(guān)話題輸出LocalizationEstimate。此外,該組件會將獲得的定位數(shù)據(jù)發(fā)布為localization和world坐標(biāo)系之間的動態(tài)坐標(biāo)變換。

配置文件

配置文件的定義可參考modules/localization/proto/rtk_config.proto

message Config {optional string localization_topic = 1; // 輸出的定位話題optional string localization_status_topic = 11; // 輸出的定位狀態(tài)話題optional string imu_topic = 2; // 訂閱的IMU消息話題optional string gps_topic = 3; // 訂閱的GPS消息話題optional string gps_status_topic = 12; // 訂閱的GPS定位狀態(tài)話題optional string broadcast_tf_frame_id = 4; // 廣播的父坐標(biāo)系optional string broadcast_tf_child_frame_id = 5; // 廣播的子坐標(biāo)系optional int32 imu_list_max_size = 6; // IMU消息容器的大小optional double gps_imu_time_diff_threshold = 7; // GPS和IMU消息時間戳差值的閾值optional double map_offset_x = 8; // world到mpa坐標(biāo)系的偏差值optional double map_offset_y = 9;optional double map_offset_z = 10; }

RTKLocalizationComponent::Proc

該函數(shù)會訂閱GPS定位消息,進(jìn)行上述的處理。

RTKLocalization

RTKLocalization負(fù)責(zé)功能的具體實(shí)現(xiàn),其擁有兩個雙向鏈表容器。

imu_list_

訂閱得到的CorrectedImu消息會不斷保存在該容器當(dāng)中,新元素加入到尾部,容器中元素的個數(shù)大于容量時,頭部的原始會被刪除,因此該容器中,從頭部到尾部,時間戳依次增大,即頭部的數(shù)據(jù)最老,尾部的數(shù)據(jù)最新。
由于GPS消息的更新頻率要遠(yuǎn)低于IMU的更新頻率,因此要通過該容器保存一定時間的IMU消息,以供GPS找到與其時間戳最匹配的IMU消息。

gps_status_list_

作用與imu_list_類似,保存的是IMU的狀態(tài)

RTKLocalization::FindMatchingIMU

該函數(shù)根據(jù)GPS的時間戳,在容器中找到與之最為匹配的IMU消息。可以分為三種情況:

  • gps時間戳要比容器中的CorrectedImu都要新,則匹配結(jié)果為容器中最新的CorrectedImu
  • gps時間比容器中的CorrectedImu都要老,則匹配結(jié)果為容器中最老的CorrectedImu
  • gps時間在容器中時間戳最老和最新的兩者之間,則匹配結(jié)果為容器中g(shù)ps時間兩端插值后的CorrectedImu

RTKLocalization::InterpolateIMU

若gps時間在容器中時間戳最老和最新的兩者之間,則會對GPS時間戳兩端最接近的兩個CorrectedImu進(jìn)行插值,插值的過程即根據(jù)GPS時間戳對兩者取平均,時間戳靠近哪一方,平均時的占比就越大。
進(jìn)行插值的量分別是角速度、線加速度、歐拉角。

RTKLocalization::ComposeLocalizationMsg

該函數(shù)將GPS和IMU的消息進(jìn)行組合,得到LocalizationEstimate消息。

話題相關(guān)

該模塊訂閱和發(fā)布的話題可以在配置文件中進(jìn)行定義,默認(rèn)配置可參考modules/localization/conf/rtk_localization.pb.txt。

localization_topic: "/apollo/localization/pose" localization_status_topic: "/apollo/localization/msf_status" imu_topic: "/apollo/sensor/gnss/corrected_imu" gps_topic: "/apollo/sensor/gnss/odometry" gps_status_topic: "/apollo/sensor/gnss/ins_stat" broadcast_tf_frame_id: "world" broadcast_tf_child_frame_id: "localization" imu_list_max_size: 20 gps_imu_time_diff_threshold: 0.02 map_offset_x: 0.0 map_offset_y: 0.0 map_offset_z: 0.0

注意:該模塊輸入話題/apollo/sensor/gnss/odometry中的Gps消息是在world坐標(biāo)系下的位置坐標(biāo),而輸出話題/apollo/localization/pose的LocalizationEstimate消息是指高精地圖的map坐標(biāo)系下的位置坐標(biāo),兩坐標(biāo)系之間的轉(zhuǎn)換關(guān)系可通過配置文件中map_offset_x、map_offset_y、map_offset_z進(jìn)行指定。
另外在建立高精地圖時,也要打開該模塊,通過訂閱/apollo/localization/pose話題來生成高精地圖。此時配置文件中map_offset_x、map_offset_y、map_offset_z定義的是世界坐標(biāo)系和當(dāng)前正在建立的高精地圖的map坐標(biāo)系之間的變換關(guān)系。
由于 /apollo/sensor/gnss/odometry話題輸出的world坐標(biāo)系下的坐標(biāo)是根據(jù)經(jīng)緯度獲得的,數(shù)值較大,因此可以在建圖時通過map_offset_x、map_offset_y、map_offset_z來指定map坐標(biāo)的原點(diǎn),不過注意,建圖后定位時map_offset_x、map_offset_y、map_offset_z參數(shù)要與建圖時保持一致。

總結(jié)

以上是生活随笔為你收集整理的Apollo详解之定位模块——RTK定位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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