ROS2+TurtleBot3+Cartographer+Nav2實現slam建圖和導航

0 引言

入門機器人最常見的應用就是slam建圖和導航,本文將詳細介紹這一流程, 便于初學這快速上手。
首先對需要用到的軟件包就行簡單介紹。
turtlebot3: 是一個小型的,基于ros的移動機器人。 學習機器人的很多示例程序都是基于turtlebot3。
Cartographer: 是一個流行的slam建圖工具包。
Nav2: 是一個流行的導航工具包。
gazebo: 是一個基于ros的物理仿真平臺。

1 依賴包安裝

前提條件是已經安裝好了ros2環境, 本文安裝的是humble版本, 其他版本需要注意修改對應的安裝包。

1.1 gazebo 安裝

sudo apt install ros-humble-gazebo-*

1.2 Cartographer安裝

sudo apt install ros-humble-cartographer
sudo apt install ros-humble-cartographer-ros

1.3 nav2 安裝

sudo apt install ros-humble-navigation2
sudo apt install ros-humble-nav2-bringup

1.4 tutlebot3安裝

sudo apt install ros-humble-turtlebot3*

1.5 鍵盤控制程序包安裝

sudo apt install ros-humble-teleop-twist-keyboard

2 用Cartographer進行slam, 得到地圖

第一步: 啟動gazebo仿真

ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py

第二步: 啟動cartographer節點

ros2 launch turtlebot3_cartographer cartographer.launch.py 

第三步: 啟動鍵盤控制節點

ros2 run teleop_twist_keyboard teleop_twist_keyboard

用鍵盤控制機器人的移動進行slam建圖。

鍵盤控制程序的使用方法可以參考我的另一篇博客: ros鍵盤控制程序teleop_twist_keyboard 鍵值含義及用法

第四步:保存地圖

ros2 run nav2_map_server map_saver_cli -f my_map

my_map 是保存的地圖的文件名, 會生成yaml 和pgm 兩個文件。

實際場景如下: 在這里插入圖片描述

建圖效果如下:
在這里插入圖片描述

3 用Nav2 實現導航

第一步: 啟動gazebo 仿真

ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py

第二步: 啟動nav2 導航程序

ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=true map:=map/my_map.yaml

注意: 這里用到的map就是上面通過slam建圖得到的地圖文件。

第三步:操作rviz界面進行導航
首先需要點擊 2D Pose Estimate, 并在地圖上點一個點, 作為機器人的初始位姿。
然后點擊Nav2 Goal設定目標位姿。
設置好之后就可以看到導航程序會規劃好一條從起始點到目標點的路徑, 并沿著路徑進行移動。
在這里插入圖片描述

4 FAQ

1 啟動gazebo時可能報錯 [error] [gzserver-1]: process has died [pid 690246, exit code 255
原因是可能之前運行過gzserver進程并且沒有正常退出, 解決辦法是殺掉gzserver進程。
killall gzserver 或者ps -ef 查看gzserver進程, 用kill -9 殺掉即可。

2 無報錯能打開gazebo界面, 但場景出不來
原因是沒找到gazebo模型庫,找到它的安裝路徑, 并添加以下環境變量即可。

export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/humble/share/turtlebot3_gazebo/models

3 nav2 導航程序可能報錯: nav2_amcl::MotionModel does not exist

解決辦法是找到配置文件參數, 如上述例子中配置文件為/opt/ros/humble/share/turtlebot3_navigation2/param/waffle.yaml

amcl節點使用的robot_model_type參數值為"differential",需要修改為"nav2_amcl::DifferentialMotionModel"
在這里插入圖片描述

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

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

相關文章

【Java基礎】枚舉類的方法及應用

如何實現讓一個類有固定個數的對象 手動封裝構造方法(private) → 創建靜態對象 → final修飾靜態對象,使其成為常量 class Season { //枚舉類public final static Season SPRING new Season();public final static Season SUMMER new Se…

MySQL數據庫備份全攻略:從基礎到高級,一文掌握所有備份技巧

在數據為王的時代,數據庫的備份無疑是每一位數據庫管理員(DBA)和開發者必須掌握的核心技能。MySQL作為世界上最流行的開源關系型數據庫管理系統,其備份策略的多樣性和靈活性更是值得我們深入探討。今天,我們將從基礎的…

廢品回收微信小程序基于FastAdmin+ThinkPHP+UniApp(源碼搭建/上線/運營/售后/更新)

一款基于FastAdminThinkPHPUniApp開發的廢品回收系統,適用廢品回收站、再生資源回收公司上門回收使用的小程序。 一、FastAdmin框架特色功能及優勢 模塊化開發:控制器、模型、視圖、JS一一對應,使用RequireJS進行插件機制,支持插…

Java面試題:線程池的核心參數和工作原理

線程池的核心參數 ThreadPoolExecutor(int corePoolSize,//核心線程數目int MaximumPoolSize,//最大線程數核心線程臨時線程long keepAliveTime,//臨時線程的存活時間,在存活時間內如果沒有新任務,線程資源會被釋放TimeUnit unit,//存活時間的時間單位,一個枚舉類型BlockingQu…

sql操作、發送http請求和郵件發送 全棧開發之路——后端篇(2)

全棧開發一條龍——前端篇 第一篇:框架確定、ide設置與項目創建 第二篇:介紹項目文件意義、組件結構與導入以及setup的引入。 第三篇:setup語法,設置響應式數據。 第四篇:數據綁定、計算屬性和watch監視 第五篇 : 組件…

STL介紹及使用場景分析

一.總體介紹 STL(Standard Template Library)是C標準模板庫,提供了一系列的通用模板類和函數,用于實現常見的數據結構和算法,方便開發者快速地實現各種功能。STL包括了容器(Containers)、算法&a…

[BJDCTF 2020]easy_md5、[HNCTF 2022 Week1]Interesting_include、[GDOUCTF 2023]泄露的偽裝

目錄 [BJDCTF 2020]easy_md5 ffifdyop [SWPUCTF 2021 新生賽]crypto8 [HNCTF 2022 Week1]Interesting_include php://filter協議 [GDOUCTF 2023]泄露的偽裝 [BJDCTF 2020]easy_md5 嘗試輸入一個1,發現輸入的內容會通過get傳遞但是沒有其他回顯 觀察一下響應…

文本協議中嵌入二進制數據

在文本協議中嵌入二進制數據時,通常不推薦使用new String(byte[], Charset),除非你確定這些字節實際上是以指定的字符集編碼的文本。這是因為如果字節不是有效的文本編碼,那么使用new String(byte[], Charset)可能會產生不可預測的結果&#…

VictoriaMetrics

概念 介紹 VictoriaMetrics,是一個快速高效、經濟并且可擴展的監控解決方案和時序數據庫 本文均用VM簡稱VictoriaMetric 作用 用于作為prometheus的長期儲存方案,代替prometheus存儲監控采集的數據 優點 遠程存儲:可作為單一或多個Pro…

【算法】二分查找——二分查找

本節博客詳述“二分查找”并且以例子來進行討論,有需要借鑒即可。 目錄 1.二分查找1.1使用前提1.2模板 2.題目3.題解代碼示例4.二分查找的一般模板5.總結 1.二分查找 1.1使用前提 使用的條件:數組具有“二段性”,二段性指的是數組可以根據某…

110份財務常用excel模板(個稅、采購、報銷、預算),超實用!

如果你還在為報表頭疼,那你一定不能錯過這篇干貨滿滿的分享! 個稅報表 個人所得稅,聽起來就頭大?別擔心,掌握這些技巧,輕松搞定! - 記錄員工收入,確保數據準確無誤 - 計算應納稅…

【Unity Shader入門精要 第7章】基礎紋理(一)

1. 紋理映射 每一張紋理可以看作擁有一個屬于自己的2D坐標空間,其橫軸用U表示,縱軸用V表示,因此也稱為UV坐標空間。 UV空間的坐標范圍為[0,0]到[1,1],在Unity中,UV空間也是從左下到右上&#…

測試萌新Python學習(五)接口自動化測試requests

requests 接口自動化測試requests庫基本實現請求-GET基本實現請求-POST基本實現請求-補充 sessionCookie和Session案例params 接口自動化測試 概念程序驅動代替人工驅動去實現接口測試 實現方式 測試工具(jmeter, postman, …)編碼工具(python, java, …) 比較 工具 優點:…

Network Compression

聽課(李宏毅老師的)筆記,方便梳理框架,以作復習之用。本節課主要講了Network Compression,包括為什么要壓縮,壓縮的主要手段(pruning,knowledge distillation,parameter quantization,architect…

Elasticsearch_sql插件安裝+使用

一、安裝 前提是你先安裝好了elasticseach,安裝過程在我上一篇博客有說,可以看一下。 在elasticsearch容器啟動的情況下,進入到elasticsearch容器,Elasticsearch_sql倉庫,比如我的版本是8.11.2,那么我就選…

[藍橋杯]真題講解:抓娃娃(思維+二分)

[藍橋杯]真題講解&#xff1a;抓娃娃&#xff08;思維二分&#xff09; 一、視頻講解二、正解代碼1、C2、python33、Java 一、視頻講解 [藍橋杯]真題講解&#xff1a;抓娃娃&#xff08;思維二分&#xff09;&#xff09; 二、正解代碼 1、C #include<bits/stdc.h> #d…

fastapi+vue實現導入Excel表格的功能

1.前端部分 1.1 api設置 // 導入用戶 export function uploadUser(data) {const formData new FormData();formData.append(file, data); // data 是從文件上傳事件中獲取的文件對象return request({url: /users/upload,method: post,headers: {Content-Type: multipart/fo…

前端CSS3基礎1(新增長度單位,盒子模型,背景,邊框,文本屬性,漸變,字體,2D變換,3D變換)

前端CSS3基礎1&#xff08;新增長度單位&#xff0c;盒子模型&#xff0c;背景&#xff0c;邊框&#xff0c;文本屬性&#xff0c;漸變&#xff0c;字體&#xff0c;2D變換&#xff0c;3D變換&#xff09; CSS3 新增長度單位CSS3 新增盒子模型相關屬性box-sizing怪異盒模型box-…

實現簡易版Vuex

從實現一個簡單的 Vuex 類來了解 Vuex 的工作原理。 實現思路 Vuex 下擁有 install 方法和 Store 類。即創建一個 Vuex 的模塊&#xff0c;這個模塊導出 install 方法和 Store 類。 install 方法 Vuex 是 Vue 的一個插件&#xff0c;所以需要實現 Vue 插件約定的 install 方…

Linux:ftp文件傳輸實驗

Linux&#xff1a;ftp文件傳輸實驗 實驗實現 # 安裝對應軟件 [rootserver120 ~]# dnf install vsftpd -y [rootserver120 ~]# dnf install lftp -y# 關閉防火墻以及開啟服務 [rootserver120 ~]# systemctl disable --now firewalld [rootserver120 ~]# systemctl enable --no…