ROS2簡記一:第一個ros2程序,海龜模擬與C++和python的《你好,世界!》

目錄

引言

一、控制小海龜

二、鍵盤控制海龜

三、控制海龜案例的簡單分析

四、ROS2之linux基礎

4.1 linux終端命令

4.1.1 查看當前終端所在目錄 pwd

4.1.2 切換終端所在目錄 cd

4.1.3 查看當前目錄下的文件 ls

4.1.4 主目錄 ~

4.1.5 文件的操作

4.1.6 命令使用幫助 --help

4.1.7?軟件安裝常用命令

4.2 linux中編寫程序

4.2.1 首個python程序

4.2.2 首個C++程序

4.2.2.1 初識g++編譯工具

4.2.2.2?初識cmake編譯工具

4.3 Linux的環境變量


引言

操作環境:

VMWare17.6,虛擬機ubuntu22.04

在虛擬機ubuntu22.04操作系統中安裝好ros2環境后,進行第一個小demo——海龜模擬器,同時了解需要了解的幾個linux命令,在ros2中使用C++和python編寫hello,world,一起走進ros2的機器人的世界。

一、控制小海龜

進入ubuntu22.04,同時按下Ctrl+Alt+T快速啟動一個新的終端,接著輸入ros2,驗證ros2環境是否安裝成功:

若輸入ros2回車后終端輸出如上圖所示內容,說明ros2安裝成功。上圖內容展示了ros2后面可以接的內容和使用方法等。

接著進入正題,在終端中輸入ros2 run turtlesim turtlesim_node后回車,即可運行海龜模擬器節點,終端中呈現內容如下:

然后,會彈出如下圖所示的一個有顏色背景的窗口,同時里面會有一只小海龜。其中海龜的形態是隨機的,這是由其實現邏輯決定,這里可不必深究。

提示:輸入一行命令時,通過單擊鍵盤上的tab鍵,可將輸入的不完整內容自動補全,節省時間,減少命令不熟悉帶來的不便。如終端輸入ros2 r時單擊tab即可補全為ros2 run.

接下來,簡單分析這段海龜模擬器的控制命令。

該指令由四部分組成:

1、ros2 和 run 表示該命令式用于運行ros2程序;

2、turtlesim 表示一個程序包名稱,程序包可用于存放眾多可執行程序;

3、turtlesim_node 表示可執行程序的名稱,是前面輸入的程序包中的其中一個。

即:該指令是使用ros2運行一個turtlesim程序包下的turtlesim_node可執行文件

二、鍵盤控制海龜

在不關閉上面海龜模擬器程序的前提下,再開一個新的終端,輸入ros2 run turtlesim turtle_teleop_key并回車執行:

依據前面的描述,可見該命令是用在使用ros2運行一個turtlesim程序包中的turtle_teleop_key可執行文件。運行之后,將鼠標停留在該終端后,即可捕獲電腦鍵盤的輸入,接下來就可以使用鍵盤控制前面打開的海龜在其窗口中隨意運動了。

三、控制海龜案例的簡單分析

接下來我們借助ros2提供的一個節點關系圖工具分析這兩個命令程序之間的聯系,解開為什么鍵盤能夠控制小海龜運動的疑惑。

不要結束前面執行的命令,再開啟一個新的終端,輸入rqt并回車,可以看見彈出一個默認的rqt窗口,如下圖所示

四、ROS2之linux基礎

4.1 linux終端命令

4.1.1 查看當前終端所在目錄 pwd

ctrl+Alt+T開啟一個新終端,輸入pwd回車,可以看見下面輸出了一個目錄路徑,該路徑表示當前終端所在路徑,也就是使用快捷鍵開啟終端所在的默認路徑主目錄。

注:linux中,斜杠 “ /?” 表示整個文件系統的根目錄,這是與日常使用的windows系統的一個顯著區別,其他目錄和文件位置均是相對這個根目錄而言。

4.1.2 切換終端所在目錄 cd

在終端中輸入 cd / 回車,進入根目錄下。然后輸入pwd回車看看當前終端所在的目錄已經變成了 / 根目錄。

4.1.3 查看當前目錄下的文件 ls

在終端輸入ls回車,可以查看當前終端所在目錄下包含的文件。

4.1.4 主目錄 ~

前面說到,快捷鍵進入終端時,會默認進入主目錄下。本例的用戶名為zzl,因此主目錄就是/home/zzl。因為linux中主目錄經常用到,所以使用 ~ 表示。

當想回到主目錄時,終端輸入 cd ~ 回車即可。

4.1.5 文件的操作

進入主目錄,來進行幾個文件的基本操作。

1、創建文件夾?mkdir <文件夾名>

終端中輸入mkidr chapt并回車,即可在住目錄下創建一個叫做 chapt 的文件夾

然后,輸入 cd chapt 進入該文件夾

2、創建空白文件 touch <文件名.后綴名>

進入chapt文件夾后,輸入 touch hello_world.txt回車,即可在該文件夾下創建一個空白的hello_world.txt文本文件,然后我們查看當前終端所在的目錄,以及該目錄下存在的文件

3、文件的編輯 nano <文件名.后綴名>

nano是安裝ubuntu時自帶的文本編輯工具,終端中輸入nano hello_world.txt回車,即可進入該文件的編輯模式,然后我們輸入 hello ros2 !,按 ctrl + O后再回車,即可將內容寫入該文件中,最后按ctrl + X即可退出對該文件的編輯。

4、文件的查看 cat <文件名.后綴名>

終端輸入 cat hello_world.txt回車,即可看見上一步向該文件中寫入的內容。

5、文件的刪除 rm <文件名.后綴名>

終端輸入 rm hello_world.txt回車,即可刪除該文件

4.1.6 命令使用幫助 --help

Linux中的命令遠比這些豐富,碰到某些命令的不記得是正常的事情,我們可以使用命令 --help 來查看命令的使用幫助,如輸入 rm --help 可以查看 rm命令使用幫助

亦或是輸入 ros2 run --help 查看ros2 run的使用方式

4.1.7?軟件安裝常用命令

1、?包管理工具 dpkg

在linux中,我們可以使用 dpkg 相關命令來進行軟件的安裝,如 sudo dpkg -i <軟件包名.deb>

1. sudo,表示以管理員權限執行后面的命令;

2. dpkg,ubuntu中的包管理工具,可用于安裝、查看和卸載軟件包;

3. -i,代表安裝的意思。

默認情況下,我們從官網下載的軟件包會存放在 ~/下載 或者 ~/Downloads 目錄下,ubuntu中下載的軟件包后綴名一般為 .deb?

2、 更高級的包管理工具 apt

使用dpkg可以直接安裝下載好的deb格式的安裝包,另外還可以使用 apt 命令,直接通過軟件名自動下載后進行安裝。

如版本管理工具git的安裝:

終端輸入git命令,若ubuntu中沒有安裝,則會顯示找不到該命令,并提示你使用apt命令安裝它

因此,輸入sudo apt install git并回車,就會開始下載和安裝。

因為我這里已經安裝過,所以輸入的內容比較簡潔。

安裝完成后,輸入git進行測試,當終端輸出類似如下內容時,說明git已經安裝成功

4.2 linux中編寫程序

我們在linux中使用VSCode進行代碼編寫和運行,關于vscode的下載安裝和配置(需要的插件安裝)這里不再贅述,比較簡單,不會可自行搜索或者合理運用AI。

4.2.1 首個python程序

快捷鍵Ctrl+Alt+T快速開啟一個新終端,在終端輸入code并回車,打開vscode進入主界面。

首次使用vscode時,顯示都是英文,大家可以點擊左邊豎欄中從上至下數第五個圖標,然后在搜索框搜索 chinese,然后安裝插件,接著重啟即可顯示中文。

然后我們打開前面創建的chapt文件夾,然后新建python文件,命名為 hello_world.py回車,即可創建成功。

接著,在新建的python文件中編寫第一段程序,輸出一句 'Hello, World!',然后ctrl+s保存。

最后,在vscode的終端中,輸入 python3 hello_world.py回車即可執行程序,運行成功。

4.2.2 首個C++程序

與前面python程序創建同理,這里不再贅述。然后同樣編寫一個經典的“Hello, World!”,然后記得保存。

4.2.2.1 初識g++編譯工具

ubuntu22.04中含C++編譯工具g++,所以我們可以在終端中輸入 g++ hello_world.cpp,對該C++文件進行編譯

編譯后,使用ls命令可以看到目錄下生成了一個綠色的a,out文件,綠色代表該文件是一個可執行文件。終端輸入 ./a.out 回車即可執行程序,輸出打印的 Hello, World!

4.2.2.2?初識cmake編譯工具

使用g++可以方便地編譯一些較為簡單的代碼,對于功能復雜、需要較多依賴的復雜代碼的編譯,我們常使用CMake更為方便。

首先,在chapt目錄下,我們新建一個文件CMakeLists.txt,然后編輯該文件,在文件中寫入如下圖所示三行內容,具體操作參照前面敘述的文件的創建、編輯操作即可,這里不再贅述。

三條代碼具體含義

? ? 1. cmake_minimum_required (VERSION 3.8),表示用于構建當前文件的CMake版本最低為3.8;

? ? 2. project (HelloWorld),用于聲明當前工程名;

? ? 3. add_executable(learn_cmake hello_world.cpp),用于添加一個可執行文件,learn_cmake表示可執行文件的名字,hello_world.cpp是可執行文件相對CMakeLists.txt文件的路徑。

編寫后保存,終端進入chapt目錄,輸入 cmake . 命令,然后回車即可將編寫的CMakeLists.txt文件轉換成CMakeFiles。

cmake . 命令的具體含義:用于構建CMakeLists.txt,參數 . 代表在當前終端所在的同級目錄搜索CMakeLists.txt文件。

構建完成后,會在當前目錄生成結果文件,其中Makefile文件使用make讀取并進行代碼編譯

編譯后如上圖,使用make命令可以調用編譯器將代碼文件轉換成可執行文件。使用ls查看當前文件,可以看出新產生可一個綠色的可執行文件learn_cmake,這就是我們在CMakeLists.txt中設置的可執行文件名。

同樣地,在終端進入chapt目錄,輸入 ./learn_make 后回車,即可看見C++代碼運行的結果了。

4.3 Linux的環境變量

linux的環境變量,是一種全局變量,用于存儲系統和用戶級別的配置信息。

打開一個新的終端,輸入 echo $ROS_DISTRO ,然后回車

可以看見終端輸出了ROS2的版本信息humble。


以上內容可能存在不足和紕漏,僅供參考,各位閱讀時請帶著批判性思維學習,遇到問題多查查,謝謝。

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

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

相關文章

監控的基本理論和prometheus安裝

監控的基本理論和prometheus安裝 前言 這篇博客主要講的是關于理論的知識&#xff0c;大家盡可能的消化和吸收&#xff0c;也能擴展大家的知識面 監控的基本概念 監控俗稱為運維的第三只眼。沒有了監控&#xff0c;業務運維都是“瞎子”。所以說監控室運維這個職業的根本&…

互聯網生態下贏家群體的崛起與“開源AI智能名片鏈動2+1模式S2B2C商城小程序“的賦能效應

摘要&#xff1a;本文聚焦未來互聯網贏家群體的構成特征&#xff0c;剖析網紅經濟與專業主播的差異化發展路徑&#xff0c;結合開源AI智能名片鏈動21模式與S2B2C商城小程序的融合創新&#xff0c;提出技術賦能下互聯網商業生態的重構路徑。研究表明&#xff0c;開源AI技術通過智…

OneCode 圖表組件核心優勢解析

一、全方位的可視化能力 OneCode 圖表組件提供了15種專業圖表類型&#xff0c;覆蓋從基礎到高級的數據可視化需求&#xff1a; 基礎圖表&#xff1a;柱狀圖、折線圖、餅圖、面積圖等高級圖表&#xff1a;金字塔圖、雷達圖、儀表盤、LED圖表等實時圖表&#xff1a;實時折線圖、實…

【Linux】RHCE中ansible的配置

1.安裝并配置ansible 第一步先安裝ansible所需軟件 #安裝ansible所需軟件 [devopsworkstation ~]$ sudo dnf install ansible ansible-navigator rhel-system-roles -y 第二步登錄鏡像倉庫&#xff0c;在鏡像倉庫下載鏡像容器來運行ansible 由于ansible-navigator 知ansible…

ubuntu server系統 安裝寶塔

更新系統軟件包sudo apt update && sudo apt upgrade -y提示&#xff0c;如果想博主這樣是存綠色liunx系統&#xff0c;要先安裝python3腳本才可以python3 --version有pyhton版本號就是安裝了&#xff0c;沒有的話就要安裝安裝 Pythonsudo apt update sudo apt install…

用C++實現五子棋游戲

#include <iostream> #include <vector> #include <string> #include <iomanip> // 用于控制輸出格式 #include <limits> // 用于numeric_limitsusing namespace std;// 游戲常量定義 const int BOARD_SIZE 15; // 定義棋盤大小為15x15// 棋…

【LeetCode 熱題 100】73. 矩陣置零——(解法一)空間復雜度 O(M + N)

Problem: 73. 矩陣置零 題目&#xff1a;給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(M * N)空間復雜度&#xff1a;O(M N)整體思路…

【深度學習新浪潮】國內零樣本抗體設計的科研進展如何?

什么是AI零樣本抗體設計? AI零樣本抗體設計(Zero-shot AI Antibody Design)是指不依賴任何已知抗體序列或結構數據,僅根據靶點抗原信息,通過人工智能直接生成具有高親和力、高特異性的全新抗體序列的技術。其核心在于突破傳統抗體研發的“數據依賴瓶頸”,實現真正的“從…

【論文閱讀】A Diffusion model for POI recommendation

論文出處&#xff1a;ACM Transactions on Information Systems (TOIS) SCI一區 CCF-A期刊 論文地址&#xff1a;[2304.07041] A Diffusion model for POI recommendation 論文代碼&#xff1a;Yifang-Qin/Diff-POI: The official PyTorch implementation of Diff-POI. 目…

Rust實現FasterR-CNN目標檢測全流程

使用 Rust 和 FasterR-CNN 進行目標檢測 FasterR-CNN 是目標檢測領域廣泛使用的深度學習模型。Rust 生態中可以通過 tch-rs(Torch 綁定)調用預訓練的 PyTorch 模型實現。以下為完整實現步驟: 環境準備 安裝 Rust 和必要的依賴: cargo add tch cargo add anyhow # 錯誤…

Github 2025-07-03Go開源項目日報Top10

根據Github Trendings的統計,今日(2025-07-03統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Go項目10JavaScript項目2Go編程語言:構建簡單、可靠和高效的軟件 創建周期:3474 天開發語言:Go協議類型:BSD 3-Clause “New” or “Revise…

XML Schema 安裝使用教程

一、XML Schema 簡介 XML Schema&#xff08;XSD&#xff0c;全稱 XML Schema Definition&#xff09;是用于定義 XML 文檔結構、數據類型和數據約束的標準方式。它比 DTD 更加強大&#xff0c;支持數據類型、默認值、命名空間等&#xff0c;是企業級 XML 應用推薦的驗證方式。…

【字節跳動】數據挖掘面試題0008:計算西瓜視頻內容好評率

文章大綱題目描述題目描述 西瓜視頻近期開展了”2020百大人氣創作者”優質內容扶持項目&#xff0c;鼓勵用戶產出優質的視頻內容。 現需要統計2020年11月01日至2020年11月30日期間創作的視頻中&#xff0c; “科技”大類下“數碼測評"子類的視頻好評率&#xff08;好評率好…

Linux 進程控制:全面深入剖析進程創建、終止、替換與等待

文章目錄引言一、進程創建&#xff1a;fork()系統調用的奧秘1.1 fork()的基本原理1.2 代碼示例與解讀1.3 寫時復制&#xff08;COW&#xff09;優化二、進程終止&#xff1a;exit()與_exit()的抉擇2.1 exit()和_exit()的區別2.2 代碼示例與分析三、進程替換&#xff1a;exec()函…

PJSIP 中的 TCP 傳輸配置指南

PJSIP 支持通過 TCP 傳輸 SIP 消息&#xff0c;相比 UDP 提供了更可靠的傳輸機制。以下是關于在 PJSIP 中使用 TCP 的詳細指南。1. 創建 TCP 傳輸基本 TCP 傳輸配置cpjsua_transport_config tcp_cfg; pjsua_transport_config_default(&tcp_cfg); tcp_cfg.port 5060; // SI…

小菜狗的云計算之旅,今天學習MySQL數據庫基礎知識及操作

目錄 一、概述 數據庫概念 數據庫的類型 關系型數據庫模型 關系數據庫相關概念 二、安裝 1、mariadb安裝 2、mysql安裝 3、啟動并開機自啟 4、本地連接&#xff08;本地登錄&#xff09; 三、mysql數據庫配置與命令 yum安裝后生成的目錄 mysql服務器的啟動腳本 數…

為什么是直接在**原型(prototype)上**添加函數

這是一個非常經典、核心的 JavaScript 面向對象編程問題&#xff1a;> 為什么是直接在**原型&#xff08;prototype&#xff09;上**添加函數&#xff0c;而不是在類/構造函數內部直接添加&#xff1f;你提到的代碼中&#xff1a;javascript function TopSearchComponent() …

深入理解 classnames:React 動態類名管理的最佳實踐

在現代前端開發中&#xff0c;我們經常需要根據組件的狀態、屬性或用戶交互來動態切換 CSS 類名。雖然 JavaScript 提供了多種方式來處理字符串拼接&#xff0c;但隨著應用復雜性的增加&#xff0c;傳統的類名管理方式很快就會變得混亂不堪。這時&#xff0c;classnames 庫就像…

C++系列(七):深度探索C++內存 --- 分區、堆棧、new/delete與高效編程實踐

引言 程序運行的本質是對數據的處理&#xff0c;而內存則是程序執行的核心舞臺。理解內存的物理與邏輯分區&#xff0c;是掌握程序底層行為、編寫高效可靠代碼的關鍵基石。內存并非混沌一片&#xff0c;而是被嚴格劃分為代碼區、全局區、棧區和堆區。每個區域擁有獨特的生命周…

微信小程序71~80

1.總結小程序生命周期 小程序冷啟動&#xff0c;鉤子函數執行的順序保留當前頁面&#xff0c;進入下一個頁面&#xff0c;鉤子函數執行的順序銷毀當前頁面&#xff0c;進入下一個頁面&#xff0c;鉤子函數執行的順序小程序熱啟動&#xff0c;鉤子函數執行的順序 2.使用Componen…