cartorgapher的編譯與運行

目錄

cartorgapher的編譯環境

cartorgapher的編譯

cartographer的運行

參數的詳解與調參總結

降低延遲與減小計算量


cartorgapher的編譯環境

系統環境
推薦在ubuntu16.04或者18.04上進行編譯
推薦使用剛裝好的ubuntu系統
ubuntu的軟件源設置成清華的或者其他的中國境內的源, 更換完源之后要執行一下 sudo apt
get update
照著wiki.ros.org安裝完對應版本的ROS
并在.bashrc中的末尾添加這條句語句, 要把 <distro> 改成對應的ROS版本
source /opt/ros/<distro>/setup.bash
其中 sudo rosdep init; rosdep update 這條語句執行不成功, 不管他, 不是必須執行的
依賴庫的安裝
cartographer的依賴庫腳本完成一鍵安裝.
如下是具體步驟:
第一步: 下載安裝包
鏈接:https://pan.baidu.com/s/1q9f5aNTfrbpFpwGCwD6E4A
提取碼:slam
在網盤鏈接里 安裝包文件夾 中下載 cartographer_install-20210613.zip, 放到ubuntu系統里并解壓
第二步: 打開終端
進入到cartographer_install文件夾, 在文件夾內部空白處單擊鼠標右鍵, 打開終端
第三步 使用腳本完成依賴項的安裝
在終端中輸入 ./auto-carto-build.sh
如果提示腳本不是一個可執行的文件, 那就通過 chmod +x auto-carto-build.sh 為這個腳本添加可執
行權限即可, 之后在通過 ./auto-carto-build.sh 執行腳本
第三步 使用腳本完成依賴項的安裝
在終端中輸入 ./auto-carto-build.sh
如果提示腳本不是一個可執行的文件, 那就通過 chmod +x auto-carto-build.sh 為這個腳本添加可執
行權限即可, 之后在通過 ./auto-carto-build.sh 執行腳本.
解釋說明
腳本里進行了4個庫的編譯與安裝
cartographer的依賴庫有3, 分別是abseil-cpp, ceres-solver, protobuf.
在腳本的最后, 也將cartographer安裝到系統里了. 安裝cartographer, 就可以在工作空間中只對
cartographer_ros進行編譯了, 這樣修改launchlua文件后就不需要執行一次編譯指令了.
注意: 如果之前安裝過 ceres-solver, protobuf, cartographer 的話, 執行腳本時可能會報有些函數沒
有定義的錯誤, 這是由于protobuf或者cartographer不一致版本導致的, 可以先將之前安裝的庫卸載掉,
再執行安裝依賴的腳本
一定要確保腳本執行之后沒有錯誤輸出, 否則之后編譯代碼會編譯不通過

cartorgapher的編譯

第一步: 下載注釋的代碼
講師注釋的代碼的github地址為
https://github.com/xiangli0608/cartographer_detailed_comments_ws
在某個文件夾內部空白處單擊鼠標右鍵, 打開終端, 輸入如下執行進行代碼的下載.
git clone https://github.com/xiangli0608/cartographer_detailed_comments_ws.git
注意, 一定要通過 git clone 的方式下載代碼, 因為代碼的注釋是處于更新狀態的, 要定期通過 git pull
origin master 來更新代碼.
要是在github中下載代碼的zip壓縮文件, 這樣下載的代碼里不含有.git文件夾, 就不能通過 git pull
行代碼的更新了.
如果執行 git clone 后沒有下載代碼, 是由于沒有連上github導致的, 可以按 ctrl c 中斷當前下載,
次執行 git clone , 重復幾次試試, 如果還不行, 就在群里問問吧.
第二步: cartorgapher的編譯
進入到cartographer_detailed_comments_ws, 在文件夾內打開終端, 輸入
./catkin_make.sh
完成對cartographercartographer_ros的編譯.
注意: 一定要確保之前的依賴項全部安裝成功, 否則這里的編譯就會報錯

cartographer的運行

下載數據集
在網盤鏈接里 數據集文件夾 中下載數據集, 使用的數據集有3,
rslidar-outdoor-gps.zip 這個是講師自己錄制的數據, 包括了速騰16線點云數據, 由點云數據生成的
單線雷達數據, imu, 里程計, rtk/gps, tf tf_static
rslidar-outdoor-gps-notf.zip 這個與上邊的是同一個, 只不過這個將tf的話題去掉了
landmarks_demo_uncalibrated.zip 是從cartographer官網上下載的數據, 旨在展示一下如何在
cartographer中使用landmark
bag文件放到指定的文件夾下
首先, 用戶文件夾下新建一個文件夾, 并命名為bagfiles, 然后將下載好的3bag文件放入bagfiles文件 夾中.
開始二維建圖
進入到cartographer_detailed_comments_ws文件夾內, 在文件夾內右鍵打開終端, 輸入
source install_isolated/setup.bash
rospack profile
roslaunch cartographer_ros lx_rs16_2d_outdoor.launch
source命令的目的
source命令是設置當前的終端 可以執行的包與節點的地址集合的, 不執行 source
install_isolated/setup.bash 這個命令, 直接啟動 roslaunch 時就會出現 找不到包或找不到節點的
錯誤提示.
為了防止每次啟動終端都要執行一次 source install_isolated/setup.bash 這個指令, 我們可以將
這個指令寫到 ~/.bashrc 文件中, 每次啟動終端時, 會自動source ~/.bashrc 這個文件, 這個文件中的所有
內容都會被 source 一遍
~ 代表用戶文件夾, 例如我自己電腦的用戶名為lx, 我自己的用戶文件夾就是 /home/lx/ , 這個文件夾地址
也可以用 ~ 來代替.
ctrl h 可以顯示隱藏文件, 找到 .bashrc 文件進行編輯, 在文件底部輸入
source ~/path-to-carto/cartographer_detailed_comments_ws/install_isolated/setup.bash
其中 path-to-carto 要改成自己實際的文件夾名字
rospack profile 命令的目的
新下載的包在編譯之后, 有時沒有被加載到ros的包的地址集合中,.
這時即使執行力 source 指令, 在啟動 roslaunch 時也可能會報錯, 提示找不到包或者可執行節點.
通過 rospack profile 命令可以將新下載的包加載到ros的包的地址集合, 再執行 roslaunch 時就不
會再報錯了.
保存2d軌跡,并生成ros格式的地圖
./finish_slam_2d.sh
其中map_dir是保存地圖的文件夾名字, 可以改成自己想要保存的文件夾地址.
純定位模式
roslaunch cartographer_ros lx_rs16_2d_outdoor_localization.launch
3d建圖指令
roslaunch cartographer_ros lx_rs16_3d.launch
保存3d軌跡
./finish_slam_3d.sh
使用asset生成ros格式的2d柵格地圖
roslaunch cartographer_ros assets_writer_2d.launch
使用asset生成3d點云地圖
roslaunch cartographer_ros assets_writer_3d.launch
landmark使用示例
roslaunch cartographer_ros landmark_mir_100.launch
odom坐標系發布重復
bag或者機器人中本身存在odom坐標系, provide_odom_frame又設置成了true, 就會導致odom
標系重復發布.
會導致機器人位姿發生來回的跳動.

參數的詳解與調參總結

TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 100.
TRAJECTORY_BUILDER_2D.min_z = 0.2 -- / -0.8
TRAJECTORY_BUILDER_2D.voxel_filter_size = 0.02
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.occupied_space_weight = 10.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 1.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 1.
TRAJECTORY_BUILDER_2D.submaps.num_range_data = 80.
TRAJECTORY_BUILDER_2D.submaps.grid_options_2d.resolution = 0.1 -- / 0.02
POSE_GRAPH.optimize_every_n_nodes = 160. -- 2倍的num_range_data以上
POSE_GRAPH.constraint_builder.sampling_ratio = 0.3
POSE_GRAPH.constraint_builder.max_constraint_distance = 15.
POSE_GRAPH.constraint_builder.min_score = 0.48
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.60

降低延遲與減小計算量

前端部分
減小 max_range, 減小了需要處理的點數, 在雷達數據遠距離的點不準時一定要減小這個值
增大 voxel_filter_size, 相當于減小了需要處理的點數
增大 submaps.resolution, 相當于減小了匹配時的搜索量
對于自適應體素濾波 減小 min_num_pointsmax_range, 增大 max_length, 相當于減小了需要處
理的點數
后端部分
增大 optimize_every_n_nodes, 降低優化頻率, 減小了計算量
增大 MAP_BUILDER.num_background_threads, 增加計算速度
減小 global_sampling_ratio, 減小計算全局約束的頻率
減小 constraint_builder.sampling_ratio, 減少了約束的數量
增大 constraint_builder.min_score, 減少了約束的數量
減小分枝定界搜索窗的大小, 包括linear_xy_search_window,inear_z_search_window,
angular_search_window
增大 global_constraint_search_after_n_seconds, 減小計算全局約束的頻率
減小 max_num_iterations, 減小迭代次數
降低內存
增大子圖的分辨率 submaps.resolution
降低純定位時錯誤重定位的概率
修改 pose_graph.lua 中的如下參數
提高 optimize_every_n_nodes , 減小了優化的次數
減小 sampling_ratio, 減小了計算約束的次數
減小 max_constraint_distance, 減小了計算約束的距離
提高 min_score, 減小了計算約束的數量, 提高約束正確的概率
提高 global_localization_min_score, 減小了計算約束的數量, 提高約束正確的概率
提高 global_constraint_search_after_n_seconds , 減小了回環的次數(隔多長時間計算一次)

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

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

相關文章

淺談車載電控和機器人一體化關節電控區別和聯系

類別車載電機關節電機&#xff08;伺服電機)電機PMSM 有軸 永磁體內嵌IPMPMSM&BLDC 永磁體表貼 SPM&#xff0c;轉速不高&#xff0c;減少體積 關節和推桿用無框力矩電機&#xff1a;只有定子和轉子&#xff0c;無軸&#xff0c;無外殼和端蓋&#xff0c;便于和編碼器減速器…

【數據結構】堆(下)+ 二叉樹

上期回顧&#xff1a;【數據結構】樹&#xff08;堆&#xff09;上 一.堆的應用 1.1堆排序&#xff08;向下調整在上一期&#xff09; 向上調整算法建堆&#xff1a; 首先先回顧一下向上調整算法 void AdjustUP(HPDataType* arr, int child) {int parent (child - 1) / 2…

Elasticsearch MCP 服務器現已在 AWS Marketplace 上提供

作者&#xff1a;來自 Elastic Udayasimha Theepireddy (Uday), Matt Ryan, Srinivas Pendyala 我們很高興地宣布&#xff0c;Elasticsearch Model Context Protocol&#xff08; MCP &#xff09;服務器現已在 AWS Marketplace 上提供。 使用 MCP 將代理連接到 Elasticsearch …

【Linux】Makefile(一)-介紹

Makefile 本篇博客是作者在學習Linux方面知識過程中&#xff0c;對Makefile片面的了解&#xff0c;從而產生了對Makefile有一個全面的認識的想法&#xff0c;在知道《跟我一起寫Makefile》此書后&#xff0c;作者學習閱讀過程中整理出的筆記。 目錄Makefilemakefile介紹:規則&…

Java爬蟲與正則表達式——用正則來爬取數據

APIJava幫我們寫好的各種功能的Java類。這些Java類統稱為API。正則表達式就是API幫我們寫好的類。正則表達式例子&#xff1a; 字符類&#xff1a;[abc]&#xff1a;只能是a&#xff0c;b或c[^abc]&#xff1a;除了a&#xff0c;b&#xff0c;c之外的任何字符[a-zA-Z]&#xff…

【后端】.NET Core API框架搭建(8) --配置使用RabbitMQ

目錄 1.添加包 2. 連接配置 2.1.連接字符串 2.2.連接對象 3.創建連接服務 3.1.添加配置獲取方法 3.2.服務實現類 3.3.服務接口 4.創建生產者服務 4.1.生產者實現類 4.2.生產者接口 5.創建消費者服務 5.1.消費者服務接口 5.2.消費者接口 6.注冊 7.簡單使用案例 7.1.實現…

Apache SeaTunnel配置使用案例

前置操作 Apache SeaTunnel詳解與部署&#xff08;最新版本2.3.11&#xff09;-CSDN博客 mkdir /usr/local/soft/apache-seatunnel-2.3.11/job/ 一、MySQL to HDFS 官方配置參考&#xff1a; MySQL | Apache SeaTunnel Hdfs文件 | Apache SeaTunnel 1、配置確認 將mysq…

GitCode 使用高頻問題及解決方案

GitCode 作為一款強大的版本控制系統&#xff0c;在軟件開發流程中起著舉足輕重的作用。然而&#xff0c;在使用過程中&#xff0c;開發者們常常會遇到各種各樣的問題。本文將匯總 GitCode 使用中的高頻問題&#xff0c;并提供詳細的解決方案&#xff0c;幫助開發者們更順暢地使…

在FreeBSD系統使用chroot進入Ubuntu仿真環境使用Localsend軟件發送和接受文件

LocalSend是一款非常實用的在不同系統&#xff08;Windows、MacOS、Linux、Android和IOS&#xff09;傳遞文件的程序。我們這次的實踐&#xff0c;就是要在FreeBSD下也能發送和接收文件。 安裝LocalSend 跟在Ubuntu下安裝非常類似&#xff0c;只是不需要下面的第一步&#xf…

交叉熵損失F.cross_entropy在分類模型中的應用

一、核心思想&#xff1a;通過概率分布懲罰錯誤交叉熵損失的本質是&#xff1a; 比較模型預測的概率分布 vs 真實標簽的概率分布&#xff0c;懲罰兩者之間的差異。例如&#xff1a;真實標簽&#xff1a;圖像 0 → 文本 0&#xff08;獨熱編碼 [1, 0, 0, ...]&#xff09;模型預…

測試學習之——Pytest Day3

引言Pytest 作為 Python 中最受歡迎的測試框架之一&#xff0c;以其簡潔的語法、強大的功能和豐富的插件生態系統&#xff0c;極大地提升了自動化測試的效率和可維護性。在本文中&#xff0c;我們將深入探討 Pytest 的兩大核心特性&#xff1a;Fixture 和插件管理&#xff0c;幫…

控制Vue對話框顯示隱藏

正確做法 — 使用 Vue 數據驅動控制顯隱你不需要手動設置 display: block&#xff0c;因為 Element Plus 的 <el-dialog> 是基于 v-model 或 :visible.sync 控制的。&#x1f527; 修改模板部分&#xff1a;將原來的&#xff1a;<el-dialog title"報文詳情"…

直播帶貨與開源AI智能名片鏈動2+1模式S2B2C商城小程序:重塑電商營銷新格局

摘要&#xff1a;本文聚焦于直播帶貨對互聯網供需關系的深刻影響&#xff0c;分析其如何改變傳統電商營銷模式&#xff0c;實現從“人找貨”到“貨找人”的轉變。同時&#xff0c;引入開源AI智能名片鏈動21模式S2B2C商城小程序這一創新概念&#xff0c;探討其在直播帶貨背景下的…

Jmeter 性能測試響應時間過長怎么辦?

當 JMeter 性能測試中出現 響應時間過長 的問題時&#xff0c;需要從 測試腳本、服務器、網絡、JMeter配置 等多方面排查和優化。以下是詳細的解決步驟和思路&#xff1a; B站最新性能進階&#xff0c;學會這些jmeter性能測試技能&#xff0c;更助于正確設計、執行和分析性能測…

COZE官方文檔基礎知識解讀第三期 —— prompt(提示詞)

COZE官方文檔基礎知識解讀第三期 —— prompt&#xff08;提示詞&#xff09; 對于初步接觸PE&#xff08;prompt engineering&#xff09; 的小伙伴們&#xff0c;你們可以去火山方舟提供的prompt工具&#xff0c;用工具&#xff08;其余的prompt網站https://www.promptinggu…

代碼隨想錄算法訓練營第三十二天|動態規劃理論基礎、LeetCode 509. 斐波那契數、70. 爬樓梯、746. 使用最小花費爬樓梯

目錄 LeetCode 509. 斐波那契數 70. 爬樓梯 746. 使用最小花費爬樓梯 感想 文檔講解&#xff1a;代碼隨想錄 動態規劃&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;簡稱DP&#xff0c;如果某一問題有很多重疊子問題&#xff0c;使用動態規劃是最有效的。 …

SpringMVC3

一、JSON 與參數傳遞1.1JSON 是什么- JSON 是字符串&#xff1a;比如 {"name":"zhangsan","password":"123456","age":15} 就是一個 JSON 字符串&#xff0c;它用來在前后端、服務間傳遞數據。- JSON 庫&#xff1a;Fastj…

查看.bin二進制文件的方式(HxD十六進制編輯器的安裝)

文章目錄Windows 系統上安裝 HxD 十六進制編輯器的步驟。**HxD 是一款免費、輕量級的工具&#xff0c;適合查看和編輯 .bin 等二進制文件。****PS:實際安裝過程中會發現找不到Windows11的版本&#xff0c;安裝windows10的即可&#xff0c;并且沒有區別setup版和portable版**安裝…

Linux系統性能優化與監控

系統性能優化與監控是保障 Linux 服務器穩定運行的核心技術&#xff0c;涉及 ??CPU、內存、磁盤 I/O、網絡、進程?? 等多維度的指標分析、問題定位與優化策略。以下從??監控工具與指標??、??常見問題診斷??、??優化方法??三個層面詳細講解&#xff0c;并結合?…

如何在 React + TypeScript 中實現 JSON 格式化功能

如何在 React TypeScript 中實現 JSON 格式化功能 作為前端開發者&#xff0c;我們經常需要處理 JSON 數據。無論是 API 調試、配置文件編輯還是數據轉換&#xff0c;能夠格式化 JSON 是一項基本但非常有用的技能。本文將詳細介紹如何在 React 和 TypeScript 環境中實現 JSON…