ROS2基礎

1.helloworld案例

1.創建功能包(C++)

終端下,進入ws00_helloworld/src目錄,使用如下指令創建一個C ++ 功能包:

ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld

執行完畢,在src目錄下將生成一個名為pkg01_helloworld_cpp的目錄,且目錄中已經默認生成了一些子級文件與文件夾。

2.編輯源文件

進入pkg01\_helloworld\_cpp/src目錄,該目錄下有一helloworld.cpp文件,修改文件內容如下:

#include "rclcpp/rclcpp.hpp"int main(int argc, char ** argv)
{// 初始化 ROS2rclcpp::init(argc,argv);// 創建節點auto node = rclcpp::Node::make_shared("helloworld_node");// 輸出文本RCLCPP_INFO(node->get_logger(),"hello world!");// 釋放資源rclcpp::shutdown();return 0;
}

3.編譯執行

在終端進入ws_helloworld下,執行:

colcon build
. install/setup.bash
ros2 run pkg01_helloworld_cpp helloworld

程序執行,在終端下將輸出文本:"hello world!"。

4.創建功能包(Python)

ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld

5.編輯源文件

進入pkg02_helloworld_py/pkg02_helloworld_py目錄,該目錄下有一helloworld.py文件,修改文件內容如下:

import rclpydef main():# 初始化 ROS2rclpy.init()# 創建節點node = rclpy.create_node("helloworld_py_node")# 輸出文本node.get_logger().info("hello world!")# 釋放資源rclpy.shutdown()if __name__ == '__main__':main()

6.編譯執行

終端下進入到工作空間,執行如下指令:

colcon build
. install/setup.bash
ros2 run pkg02_helloworld_py helloworld

7.運行優化

每次終端中執行工作空間下的節點時,都需要調用. install/setup.bash指令,使用不便,優化策略是,可以將該指令的調用添加進~/setup.bash,操作格式如下:

echo "source /{工作空間路徑}/install/setup.bash" >> ~/.bashrc

示例:

echo "source /home/ros2/ws00_helloworld/install/setup.bash" >> ~/.bashrc

以后再啟動終端時,無需手動再手動刷新環境變量。

8.定向構建

colcon build --packages-select 文件名

9.功能包

功能包是ROS2應用程序的核心,但是功能包不能直接構建,必須依賴于工作空間,一個ROS2工作空間的目錄結構如下:

WorkSpace --- 自定義的工作空間。|--- build:存儲中間文件的目錄,該目錄下會為每一個功能包創建一個單獨子目錄。|--- install:安裝目錄,該目錄下會為每一個功能包創建一個單獨子目錄。|--- log:日志目錄,用于存儲日志文件。|--- src:用于存儲功能包源碼的目錄。|-- C++功能包|-- package.xml:包信息,比如:包名、版本、作者、依賴項。|-- CMakeLists.txt:配置編譯規則,比如源文件、依賴項、目標文件。|-- src:C++源文件目錄。|-- include:頭文件目錄。|-- msg:消息接口文件目錄。|-- srv:服務接口文件目錄。|-- action:動作接口文件目錄。|-- Python功能包|-- package.xml:包信息,比如:包名、版本、作者、依賴項。|-- setup.py:與C++功能包的CMakeLists.txt類似。|-- setup.cfg:功能包基本配置文件。|-- resource:資源目錄。|-- test:存儲測試相關文件。|-- 功能包同名目錄:Python源文件目錄。

另外,無論是Python功能包還是C++功能包,都可以自定義一些配置文件相關的目錄。

|-- C++或Python功能包|-- launch:存儲launch文件。|-- rviz:存儲rviz2配置相關文件。|-- urdf:存儲機器人建模文件。|-- params:存儲參數文件。|-- world:存儲仿真環境相關文件。|-- map:存儲導航所需地圖文件。|-- ......

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

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

相關文章

Python爬蟲實戰:研究pygalmesh,構建Thingiverse平臺三維網格數據處理系統

1. 引言 1.1 研究背景 在數字化浪潮席卷全球的當下,三維建模技術已成為連接虛擬與現實的核心紐帶,廣泛滲透于工程設計、地理信息系統(GIS)、虛擬現實(VR)、增強現實(AR)、醫學影像等關鍵領域。例如,在建筑工程中,BIM(建筑信息模型)技術依賴高精度三維網格實現施工…

開發者說 | EmbodiedGen:為具身智能打造可交互3D世界生成引擎

概述 具身智能的發展離不開高質量、多樣化的可交互3D仿真環境。為突破傳統構建方式的瓶頸,我們提出了EmbodiedGen,一個基于生成式AI技術的自動化3D世界生成引擎,助力低成本、高效率地創建真實且可交互的3D場景。用戶僅需輸入任務定義或場景圖…

GitHub Copilot:AI編程助手的架構演進與真實世界影響

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 1. 技術背景與核心架構 GitHub Copilot 是由 GitHub 與 OpenAI 聯合開…

PDF OCR + 大模型:讓文檔理解不止停留在識字

在企業數字化的實際場景中,PDF OCR 已經很普遍了:從掃描件提取文本、表格到生成可搜索 PDF。但這類技術往往停留在"把圖片變成文字",對文檔背后的語義、邏輯、業務價值理解不足。 而當 OCR 遇上大語言模型(LLM&#xff…

半敏捷衛星觀測調度系統的設計與實現

半敏捷衛星觀測調度系統的設計與實現 摘要 本文詳細闡述了一個基于Python的半敏捷衛星觀測調度系統的設計與實現過程。系統針對半敏捷衛星特有的機動能力限制,綜合考慮了地面目標觀測需求、衛星資源約束、能源管理等多重因素,提出了一種混合啟發式算法解…

軟件測試中,常用的抓包工具有哪些?抓包的原理是什么?

回答重點在軟件測試中,常用的抓包工具主要有:1)Fiddler2)Wireshark3)Charles4)Postman(它的攔截器功能也可以用于抓包)5)tcpdump抓包的原理大致是通過安裝在本地的抓包工…

Cesium學習(二)-地形可視化處理

Cesium地形可視化是其核心功能之一,允許開發者在3D地球中展示真實的地形數據。以下是關于Cesium地形可視化的詳細處理方法: 文章目錄1. 啟用地形可視化基本地形加載自定義地形提供者2. 地形相關操作地形高度采樣地形夸張效果3. 地形可視化設置地形照明效…

《告別 if-else 迷宮:Python 策略模式 (Strategy Pattern) 的優雅之道》

《告別 if-else 迷宮:Python 策略模式 (Strategy Pattern) 的優雅之道》 大家好,我是你的朋友,一位與 Python 代碼相伴多年的開發者。在我們的編程生涯中,幾乎都曾與一種“代碼怪獸”搏斗過,它就是那冗長、復雜、牽一發而動全身的 if-elif-else 結構。 每當一個新的需求…

Redis--day7--黑馬點評--優惠券秒殺

(以下內容全部來自上述課程)優惠券秒殺 1. 全局唯一ID 每個店鋪都可以發布優惠券:當用戶搶購時,就會生成訂單并保存到tb voucher order這張表中,而訂單表如果使用數據庫自增ID就存在一些問題: id的規律性太明顯受單表數據量的限制…

Vue 與 React 深度對比:設計哲學、技術差異與應用場景

一、核心設計理念對比 特性 Vue React 設計目標 漸進式框架,降低學習曲線 構建大型應用,保持靈活性 設計哲學 “約定優于配置” “配置優于約定” 核心思想 響應式數據綁定 函數式編程 + 虛擬DOM 模板語言 HTML-based 模板 JSX(JavaScript XML) 狀態管理 內置響應式系統 依…

軟件開發 - foreground 與 background

foreground 與 background 1、foreground詞性含義n.前景;最突出的位置.v使突出;強調# 例詞in the 【foreground】(在最顯眼的位置)【foreground】 task(前臺任務)【foreground】 color(前景色&a…

深度學習——03 神經網絡(2)-損失函數

2 損失函數 2.1 概述作用:衡量模型預測結果(y^\hat{y}y^?)和真實標簽(yyy)的差異,差異越大,說明模型參數“質量越差”(需要調整);本質:深度學習訓…

【大模型微調系列-04】 神經網絡基礎與小項目實戰

【大模型微調系列-04】 神經網絡基礎與小項目實戰💡 本章目標:通過構建一個能識別手寫數字的AI模型,讓你真正理解神經網絡是如何"學習"的。2-3小時后,你將擁有第一個自己訓練的AI模型!4.1 理論講解&#xff…

JavaWeb前端(HTML,CSS具體案例)

前言 一直在學習B站黑馬程序員蒼穹外賣。現在已經學的差不多了,但是我學習一直是針對后端開發的,前端也沒太注重去學(他大部分都給課程資料嘻嘻🤪),但我還是比較感興趣,準備先把之前學JavaWeb&…

核心數據結構:DataFrame

3.3.1 創建與訪問什么是 DataFrame?DataFrame 是 Pandas 中的核心數據結構之一,多行多列表格數據,類似于 Excel 表格 或 SQL 查詢結果。它是一個 二維表格結構,具有行索引(index)和列標簽(colu…

深入探索Go語言標準庫 net 包中的 IP 處理

深入探索Go語言標準庫 net 包中的 IP 處理 文章目錄深入探索Go語言標準庫 net 包中的 IP 處理引言核心知識type IP常用函數常用方法代碼示例常見問題1. DNS 查詢失敗怎么辦?2. 如何區分 IPv4 和 IPv6 地址?使用場景1. 服務器端編程2. 網絡監控和調試3. 防…

2.4 雙向鏈表

目錄 引入 結構定義 結構操作 初始化 插入 刪除 打印 查找 隨機位置插入 隨機位置刪除 銷毀 總結 數據結構專欄https://blog.csdn.net/xyl6716/category_13002640.html 精益求精 追求卓越 【代碼倉庫】:Code Is Here 【合作】 :apollomona…

開發指南132-DOM的寬度、高度屬性

寬度、高度類似。這里以高度為例來說明DOM中有關高度的概念:1、height取法:element.style.height說明:元素內容區域的高度,不含padding、border、margin該屬性可寫2、clientHeight取法:element..clientHeight&#xff…

魔改chromium源碼——解除 iframe 的同源策略

在進行以下操作之前,請確保已完成之前文章中提到的 源碼拉取及編譯 部分。 如果已順利完成相關配置,即可繼續執行后續操作。 同源策略限制了不同源(協議、域名、端口)的網頁腳本訪問彼此的資源。iframe 的跨域限制由 Blink 渲染引擎和 Chromium 的安全層共同實現。 咱們直…

在鴻蒙中實現深色/淺色模式切換:從原理到可運行 Demo

摘要 現在幾乎所有主流應用都支持“深色模式”和“淺色模式”切換,這已經成了用戶習慣。鴻蒙(HarmonyOS)同樣提供了兩種模式(dark / light),并且支持應用根據系統主題切換,或者應用內手動切換。…