cartographer 點云數據的預處理

目錄

傳感器數據的走向

體素濾波與之后的處理

3D情況下的激光雷達數據的預處理

初始位姿估計

位姿推測器的優缺點分析與總結

可能有問題的點

可能的改進建議


傳感器數據的走向

傳感器數據從 CollatedTrajectoryBuilder類的HandleCollatedSensorData函數 傳遞GlobalTrajectoryBuilder類 的相應函數
從這里開始, 傳感器數據才真正進入到SLAM的前端與后端部分
運動畸變去除后的點云, 點的坐標相對于local_frame, 點云依然圍繞著tracking_frame
sensor::RangefinderPoint hit_in_local = range_data_poses[i] * sensor::ToRangefinderPoint(hit);
以點云的時間(也就是最后一個點的時間)預測出來的坐標做為點云的origin
accumulated_range_data_.origin = range_data_poses.back().translation()
計算從tracking_frame變換到local_frame原點并且變換后姿態為0的坐標變換
transform_to_gravity_aligned_frame = gravity_alignment.cast<float>() *
range_data_poses.back().inverse()
將點云進行平移與旋轉, 點的坐標相對于local_frame, 點云圍繞這local_frame坐標系原點
sensor::TransformRangeData(range_data, transform_to_gravity_aligned_frame)
進行z軸的過濾
sensor::CropRangeData(sensor::TransformRangeData(range_data,
transform_to_gravity_aligned_frame), options_.min_z(), options_.max_z())
單線雷達不能設置 大于0min_z, 因為單線雷達的z0

體素濾波與之后的處理

分別對 returns點云 與 misses點云 進行體素濾波
sensor::RangeData{ cropped.origin,
sensor::VoxelFilter(cropped.returns, options_.voxel_filter_size()),
sensor::VoxelFilter(cropped.misses, options_.voxel_filter_size())};
returns點云 進行自適應體素濾波
sensor::AdaptiveVoxelFilter(gravity_aligned_range_data.returns,
options_.adaptive_voxel_filter_options())
將 原點位于local坐標系原點處的點云 變換成 原點位于匹配后的位姿處的點云
TransformRangeData(gravity_aligned_range_data, transform::Embed3D(pose_estimate_2d-
>cast<float>()) )
將 原點位于匹配后的位姿處的點云 返回到node.cc , node.cc將這個點云發布出去, rviz中可視化

3D情況下的激光雷達數據的預處理

進行多個雷達點云數據的時間同步
對點云進行第一次體素濾波
激光雷達數據運動畸變的校正, 同時將點云的相對于tracking_frame的點坐標 轉成 相對于local slam坐標系的 點坐標
分別對 returns misses 進行第二次體素濾波
將原點位于機器人當前位姿處的點云 轉成 原點位于local坐標系原點處的點云
使用高分辨率進行自適應體素濾波 生成高分辨率點云
使用低分辨率進行自適應體素濾波 生成低分辨率點云
將 原點位于local坐標系原點處的點云 變換成 原點位于匹配后的位姿處的點云
將 原點位于匹配后的位姿處的點云 返回到node.cc , node.cc將這個點云發布出去, rviz中可視化

初始位姿估計

基于IMU與里程計的位姿推測器
重要成員變量說明
姿態預測相關
imu_tracker_ 只在添加位姿時更新, 用于保存添加校位姿準時的姿態
odometry_imu_tracker_ 只在添加位姿時更新, 用于根據里程計數據計算線速度時姿態的預測
extrapolation_imu_tracker_ 只在添加位姿時更新, 用于位姿預測時的姿態預測
通過里程計計算的線速度與角速度
linear_velocity_from_odometry_ 只在添加里程計數據時更新, 用于位姿預測時的平移量預測
angular_velocity_from_odometry_ 只在添加里程計數據時更新, 用于不使用imu數據時的imu_tracker_的角 速度的更新
通過pose計算的線速度與角速度
linear_velocity_from_poses_ 只在添加位姿時更新, 用于位姿預測時 不使用里程計數據時 平移量的預測
angular_velocity_from_poses_ 只在添加位姿時更新, 用于 不使用里程計數據時 imu_tracker_的角速度的更新
傳感器數據隊列的個數
imu_date_ 隊列數據的個數最少是1
odometry_data_ 隊列數據的個數最少是2, 所以, odometry_data_.size() < 2 就意味著不使用里程計
timed_pose_queue_ 隊列數據的個數最少是2

位姿推測器的優缺點分析與總結

預測位姿時的4種情況 都是勻速模型
使用imu, 使用里程計
平移的預測: 通過里程計數據隊列開始和末尾的2個數據計算出的線速度乘以時間
姿態的預測: 通過imu的角速度乘以時間
使用imu, 不使用里程計
平移的預測: 通過pose數據隊列開始和末尾的2個數據計算出的線速度乘以時間
姿態的預測: 通過imu的角速度乘以時間
不使用imu, 使用里程計
平移的預測: 通過里程計數據隊列開始和末尾的2個數據計算出的線速度乘以時間
姿態的預測: 通過里程計數據隊列開始和末尾的2個數據計算出的角速度乘以時間
不使用imu, 不是用里程計
平移的預測: 通過pose數據隊列開始和末尾的2個數據計算出的線速度乘以時間
姿態的預測: 通過pose數據隊列開始和末尾的2個數據計算出的角速度乘以時間
總結:
預測平移時: 有里程計就用里程計的線速度, 沒有里程計就用pose計算的線速度進行預測
預測姿態時: IMU就用IMU的角速度, 沒有IMU, 如果有里程計就用里程計計算出的角速度, 沒有里程計就用
pose計算的角速度進行預測
預測的都是相對值, 要加上最后一個pose的位姿

可能有問題的點

計算pose的線速度與角速度時, 是采用的數據隊列開始和末尾的2個數據計算的
計算里程計的線速度與角速度時, 是采用的數據隊列開始和末尾的2個數據計算的
使用里程計, 不使用imu, 計算里程計的線速度方向姿態的預測, 用的是里程計數據隊列開始和末尾的2
數據的平均角速度計算的, 時間長了就不準
不使用里程計, 不使用imu, 用的是pose數據隊列開始和末尾的2個數據的平均角速度計算的, 時間長了就不
添加位姿時, 沒有用pose的姿態對imu_tracker_進行校準, 也沒有對整體位姿預測器進行校準, 只計算了pose 的線速度與角速度
從代碼上看, cartographer認為位姿推測器推測出來的位姿與姿態是準確的

可能的改進建議

pose的距離越小, 勻速模型越能代替機器人的線速度與角速度, 計算pose的線速度與角速度時, 可以考慮使用 最近的2個數據進行計算
里程計距離越短數據越準, 計算里程計的線速度與角速度時, 可以考慮使用最近的2個數據進行計算
使用里程計, 不使用imu, 計算里程計的線速度方向時, 可以考慮使用里程計的角度進行計算
使用里程計, 不使用imu, 進行姿態的預測時, 可以考慮使用里程計的角度進行預測
不使用里程計, 不使用imu, 可以考慮用最近的2pose計算線速度與角速度
使用poseimu_tracker_的航向角進行校準

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90992.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于數據挖掘的短視頻點贊影響因素分析【LightGBM、XGBoost、隨機森林、smote】

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目介紹總結每文一語有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主 項目介紹 隨著短視頻行業的高速發展&#xff0c;尤其是以抖音為代表的平臺不斷壯大&…

Git 從入門到精通

Git 從入門到精通 涵蓋了核心概念、常用命令、協作流程和高級技巧&#xff1a; 核心理念&#xff1a; 版本控制&#xff1a; 記錄文件變化歷史&#xff0c;可回溯到任意版本。分布式&#xff1a; 每個開發者擁有完整的倉庫副本&#xff08;包括完整歷史&#xff09;&#xf…

UE5多人MOBA+GAS 30、技能升級機制

文章目錄前言技能的升級修改一下按鍵的輸入判斷是否滿級在ASC中升級技能由角色的輸入調用ASC的升級功能技能圖標的優化技能升級材質&#xff0c;可升級技能圖標的閃爍刷新技能升級后的藍耗和CD&#xff0c;以及藍不夠時技能進入灰色狀態修復傷害數字特效只顯示3位數的問題前言 …

筆試——Day22

文章目錄第一題題目思路代碼第二題題目&#xff1a;思路代碼第三題題目&#xff1a;思路代碼第一題 題目 添加字符 思路 枚舉所有字符串a與字符串b相對應的位置 代碼 第二題 題目&#xff1a; 數組變換 思路 貪心 以最大值為基準元素&#xff0c;判斷其他元素能否變為最…

__getattr__和 __getattribute__ 的用法

1、__getattr__ 的用法當實例對象訪問一個不存在的屬性時&#xff0c;會執行 __getattr__ 方法&#xff0c;如果屬性存在的話&#xff0c;就不會執行案例 class Person:def __init__(self, name, age):self.name nameself.age agedef get_info(self):return f"name: {se…

信息化項目驗收測試實戰指南

在當今數字化轉型的大背景下&#xff0c;信息化項目驗收建設已成為企業提升運營效率、優化管理流程的重要手段。然而&#xff0c;很多企業在投入大量資金建設信息系統后&#xff0c;卻常常面臨系統上線后無法滿足實際業務需求的困境。究其原因&#xff0c;往往是由于忽視了信息…

牛頓拉夫遜法PQ分解法計算潮流MATLAB程序計算模型。

牛頓拉夫遜法&PQ分解法計算潮流MATLAB程序計算模型。本程序模型基于MATLAB進行潮流計算&#xff0c;建議先安裝matpower插件&#xff08;MATLAB中非常重要的潮流計算的插件&#xff09;。本程序可進行牛拉法和PQ分解法潮流計算的切換&#xff0c;對比潮流計算的結果。很適合…

Go語言實戰案例-計算字符串編輯距離

在自然語言處理、拼寫糾錯、模糊搜索等場景中,我們經常需要衡量兩個字符串之間的相似度。編輯距離(Edit Distance) 就是一個經典的衡量方式,它描述了將一個字符串轉換為另一個字符串所需的最少操作次數。 一、問題定義:什么是編輯距離? 編輯距離,也稱為 Levenshtein Di…

Java時間與日期常用方法

DateDate date new Date(); //獲取當前時間 System.out.println(date.getYear() 1900); // 必須加上1900 System.out.println(date.getMonth() 1); // 0~11&#xff0c;必須加上1 System.out.println(date.getDate()); // 1~31&#xff0c;不能加1Ca…

【MySQL】從連接數據庫開始:JDBC 編程入門指南

個人主頁&#xff1a;?喜歡做夢 歡迎 &#x1f44d;點贊 ?關注 ??收藏 &#x1f4ac;評論 目錄 &#x1f31f;一、什么是JDBC&#xff1f; &#x1f31f;二、JDBC編程的步驟 ?使用步驟 ?DriverManger &#x1f4ab;定義 &#x1f4ab;DriverManger的主要功能 …

重生之我在暑假學習微服務第一天《MybatisPlus-上篇》

本系列參考黑馬程序員微服務課程&#xff0c;有興趣的可以去查看相關視頻&#xff0c;本系列內容采用漸進式方式講解微服務核心概念與實踐方法&#xff0c;每日更新確保知識點的連貫性。通過系統化學習路徑幫助開發者掌握分布式系統構建的關鍵技術。讀者可通過平臺訂閱功能獲取…

odoo-060 git版本:發布/生產版本落后開發版本部署

文章目錄問題起源目前解決問題起源 周五提交了一個版本&#xff0c;本來打算使用這個版本的&#xff0c;周末更新。 下一個功能比較復雜&#xff0c;周一提交&#xff0c;結果周末沒有更新&#xff0c;導致現在還有沒測試過的不能發布的。 說明&#xff1a; 原來只有一個mast…

YotoR模型:Transformer與YOLO新結合,打造“又快又準”的目標檢測模型

【導讀】在目標檢測領域&#xff0c;YOLO系列以其高效的推理速度廣受歡迎&#xff0c;而Transformer結構則在精度上展現出強大潛力。如何兼顧二者優勢&#xff0c;打造一個“又快又準”的模型&#xff0c;是近年來研究熱點之一。本文介紹的一項新研究——YotoR&#xff08;You …

白楊SEO:流量的本質是打開率?搞用戶搜索流量的玩法怎么做?

大家好&#xff0c;我是白楊SEO&#xff0c;專注研究SEO十年以上&#xff0c;全網SEO流量實戰派&#xff0c;AI搜索優化研究者。上周六參加了生財航海家在杭州舉行的私域運營大會&#xff0c;主題是圍繞私域獲客&#xff0c;私域IP&#xff0c;AI私域&#xff0c;精細化管理。白…

Java優雅使用Spring Boot+MQTT推送與訂閱

在物聯網&#xff08;IoT&#xff09;和智能設備橫行的今天&#xff0c;你有沒有遇到這樣的問題&#xff1a;服務端需要實時把報警、狀態更新、控制指令推送給客戶端&#xff1b;安卓 App、嵌入式設備、網頁等終端&#xff0c;需要輕量且穩定的連接方式&#xff1b;HTTP 太“重…

多目標粒子群優化(MOPSO)解決ZDT1問題

前言 提醒&#xff1a; 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布&#xff0c;其中引用內容都會使用鏈接表明出處&#xff08;如有侵權問題&#xff0c;請及時聯系&#xff09;。 其中內容多為一次書寫&#xff0c;缺少檢查與訂正&#xff0c;如有問題或其他拓展…

Coze Studio概覽(三)--智能體管理

本文簡要分析了Coze Studio中智能體管理功能&#xff0c;包括功能、架構以及核心流程。Coze Studio 智能體管理功能分析 1. 智能體管理架構概覽 Coze Studio的智能體管理系統基于DDD架構&#xff0c;主要包含以下核心模塊&#xff1a; 后端架構層次&#xff1a; API層 (coze): …

idea運行tomcat日志亂碼問題

原因在于idea和tomcat文件編碼格式不一樣。可以把idea編碼改成UTF-8 File | Settings | Editor | File Encodings 里面把GBK都改成UTF-8help里面 Edit Custom VM Options 添加一行-Dfile.encodingUTF-8重啟idea

Javaweb - 13 - AJAX

發送請求的幾種方式1. 瀏覽器的地址框中輸入地址&#xff0c;回車2. html --> head --> scrip / linkimg 自動發送請求&#xff0c;無需手動觸發3. a 標簽&#xff0c;form 表單標簽需要手動控制提交產生&#xff0c;且往往需要在新的頁面上獲得響應信息4. 運行 JS 代碼…

qt常用控件-06

文章目錄qt常用控件-06spinBox/doubleSpinBoxdateTimeEditdialSliderlistWIdgettableWidgettreeWidget結語很高興和大家見面&#xff0c;給生活加點impetus&#xff01;&#xff01;開啟今天的編程之路&#xff01;&#xff01; 今天我們進一步c11中常見的新增表達 作者&#…