HUAT——Fasc——算法組學習筆記

目錄

系列文章目錄

前言

一、配置相關環境

二、創建工作空間

1.創建工作空間并初始化

2.進入 src 創建 ros 包并添加依賴

三、HelloWorld(C++版)

1.進入 ros 包的 src 目錄編輯源文件

2.編輯 ros 包下的 Cmakelist.txt文件

3.進入工作空間目錄并編譯

四 運行程序

五 總結問題


系列文章目錄

第一章 Ros入門 創建工作空間和運行ros包

前言

當你開始學習ROS(機器人操作系統)時,第一步通常是創建一個工作空間(workspace),它是你進行ROS開發的主要目錄。在工作空間中,你可以組織和管理ROS軟件包,構建和運行ROS節點,以及進行ROS相關的開發工作。我們的大致流程為

  1. 先創建一個工作空間;
  2. 再創建一個功能包;
  3. 編輯源文件;
  4. 編輯配置文件;
  5. 編譯并執行。

這篇教程會手把手帶你進行一次簡單的項目構建。先可以配合視頻使用https://www.bilibili.com/video/BV14642137Hn/?share_source=copy_web&vd_source=dc09b5f7d6dca9fee62fb97cb8d83044那么現在讓我們開始吧

一、配置相關環境

1. 確定是否安裝ros和cmake,打開終端輸入

rosversion -d 
cmake --version

會顯示類似于這樣的界面

如果沒有安裝ros和ubantu,ros推薦魚香ros一鍵安裝

wget http://fishros.com/install -O fishros && . fishros

cmake安裝:

sudo apt update
sudo apt install cmake

二、創建工作空間

1.創建工作空間并初始化

首先,我們將創建一個ROS工作空間,并在其中創建一個名為 "src" 的子目錄。

在終端中執行以下命令:

mkdir -p 自定義空間名/src
cd 自定義空間名稱
catkin_make

這將在你的主目錄下創建一個名為 "catkin_ws" 的ROS工作空間,并在其中創建 "src" 目錄。接著,執行 "catkin_make" 命令來編譯工作空間。(我這里的工作空間命名為test_ws。)

編譯完成后,將在工作空間中生成兩個文件夾:

  1. "build" 目錄:該目錄用于存放構建過程中生成的中間文件和最終生成的目標文件。這些文件包括編譯器生成的目標二進制文件、庫文件和其他構建過程中生成的臨時文件。

  2. "devel" 目錄:該目錄用于存放配置文件,其中包含構建系統需要的環境變量和路徑信息。這些配置文件用于后續編譯和運行ROS軟件包。例如,"devel/setup.bash" 文件包含了設置ROS環境變量的命令,你可以在每次新打開的終端中執行該文件以設置正確的ROS環境。

2.進入 src 創建 ros 包并添加依賴

進入 "src" 目錄,并使用?catkin_create_pkg?命令創建一個ROS包。在終端中執行以下命令:

cd src
catkin_create_pkg 自定義ROS包名 roscpp rospy std_msgs

這些命令將在工作空間下生成一個功能包,該功能包依賴于 "roscpp"、"rospy" 和 "std_msgs"。其中,"roscpp" 是使用C++實現的庫,"rospy" 是使用Python實現的庫,"std_msgs" 是標準消息庫。創建ROS功能包時,一般都會依賴這三個庫實現基本的功能。

三、HelloWorld(C++版)

1.進入 ros 包的 src 目錄編輯源文件

cd 自定義的包

cpp原文件

#include <ros/ros.h>
#include <std_msgs/String.h>int main(int argc, char **argv)
{// 初始化ROS節點ros::init(argc, argv, "hello_world_node");// 創建ROS節點句柄ros::NodeHandle nh;// 創建一個發布者,發布類型為String的主題ros::Publisher pub = nh.advertise<std_msgs::String>("hello_world_topic", 10);// 設置循環的頻率ros::Rate rate(1); // 發布頻率為1Hzwhile (ros::ok()){// 創建一個String類型的消息std_msgs::String msg;msg.data = "Hello World";// 發布消息pub.publish(msg);// 輸出消息到控制臺ROS_INFO("Published: %s", msg.data.c_str());// 按照頻率休眠rate.sleep();}return 0;
}

2.編輯 ros 包下的 Cmakelist.txt文件

根據視頻的講解尋找到相關的cmake源代碼 并且反注釋

add_executable(步驟3的源文件名src/步驟3的源文件名.cpp
)
target_link_libraries(步驟3的源文件名${catkin_LIBRARIES}
)

這里我們來詳細的討論下這兩行代碼的含義:

  1. add_executable(步驟3的源文件名 src/步驟3的源文件名.cpp)
  • 這個命令的作用是告訴CMake要將一個可執行文件添加到構建過程中。
  • add_executable?是一個CMake的函數,它接受兩個參數。
  • 第一個參數是可執行文件的名稱,這里使用了"步驟3的源文件名"作為示例。
  • 第二個參數是源文件的路徑,這里假設源文件位于"src"目錄下,并使用了"步驟3的源文件名.cpp"作為示例文件名。
  • 這個命令會將源文件編譯成一個可執行文件,并將其添加到構建過程中,以便在構建時生成該可執行文件。
  1. target_link_libraries(步驟3的源文件名 ${catkin_LIBRARIES})

    • 這個命令的作用是將目標文件與指定的庫進行鏈接。
    • target_link_libraries?是另一個CMake的函數,它接受兩個參數。
    • 第一個參數是目標文件的名稱,這里使用了"步驟3的源文件名"作為示例。
    • 第二個參數是要鏈接的庫,這里使用了${catkin_LIBRARIES}作為示例。
    • ${catkin_LIBRARIES}是一個變量,它包含了構建過程中所需的ROS相關庫。
    • 通過將目標文件與指定的庫進行鏈接,可以確保在運行可執行文件時,所需的庫能夠正確加載和使用。

通俗的來說:當我們編寫ROS節點時,需要將源代碼編譯成可執行文件,并將所需的庫與該可執行文件進行鏈接。這兩行CMake代碼就是用來完成這個任務的。

3.進入工作空間目錄并編譯

cd 自定義空間名稱
catkin_make

這會生成上面提到的?build devel .... 可執行文件就在build文件里面

四 運行程序

1. 打開一個新的終端 輸入

roscore

2. 在打開一個終端 cd到你對應的工作空間然后輸入

source ./devel/setup.bash
rosrun 包名 C++節點

source后,在我們輸入rosrun后可以按tab鍵快速補充。這是為什么呢?

source ./devel/setup.bash?的含義是在當前終端會話中加載ROS工作空間的環境設置。

具體來說,這段代碼的作用是:

  • source?是一個Shell命令,用于執行指定腳本文件中的命令,使其在當前終端會話中生效。
  • ./devel/setup.bash?是一個腳本文件的路徑,它位于ROS工作空間的?devel?目錄下。
  • devel/setup.bash?是ROS構建系統生成的一個腳本文件,其中包含了設置ROS環境變量的命令。

當你運行這段代碼時,它會執行?devel/setup.bash?腳本文件中的命令,設置當前終端會話的環境變量,以便正確地使用ROS工具和功能。

具體來說,devel/setup.bash?腳本文件中的命令會完成以下操作:

  • 設置?ROS_PACKAGE_PATH?環境變量,指定ROS工作空間的包路徑。
  • 設置?ROS_MASTER_URI?環境變量,指定ROS主節點的URI。
  • 設置?ROS_IP?或?ROS_HOSTNAME?環境變量,指定當前主機的IP地址或主機名。
  • 將ROS工作空間的?bin?和?lib?目錄添加到?PATH?和?LD_LIBRARY_PATH?環境變量中,以確保能夠正確找到和加載ROS工具和庫文件。

通過運行?source ./devel/setup.bash,你可以將ROS工作空間的環境設置加載到當前終端會話中,使得你可以在該終端中使用ROS工具和運行ROS節點。

需要注意的是,每次打開一個新的終端時,都需要運行這段代碼,以確保每個終端會話都能正確地加載ROS工作空間的環境設置。

然后我們就可以在終端看到我們發布的 hellowrld!了

五 總結問題

1.問題一:工作空間與軟件包的關系與區別 ?
在ROS(機器人操作系統)中,工作空間(workspace)是一個包含多個軟件包(packages)的目錄。工作空間是一個用于組織和構建ROS項目的容器,它提供了一種管理和編譯多個軟件包的機制。每個軟件包代表著一個獨立的功能單元,可以包含節點(nodes)、消息(messages)、服務(services)、動作(actions)以及其他相關文件。
工作空間可以包含多個軟件包,這些軟件包可以是你自己編寫的或者是從其他人或團隊獲取的。通過將這些軟件包組織在一個工作空間中,你可以方便地進行編譯、構建和管理。


問題二:成功編譯所需的CMake指令 ?
在ROS中,CMake是用于構建和編譯ROS軟件包的工具。下面是一些常用的CMake指令:
1. cmake_minimum_required(VERSION x.x.x):指定所需的最低CMake版本。
2. project(project_name):指定項目名稱。
3. find_package(package_name):查找指定的依賴包。
4. add_executable(executable_name source_files):添加一個可執行文件。
5. add_library(library_name source_files):添加一個庫文件。
6. target_link_libraries(target_name library_names):將目標文件與指定的庫文件進行鏈接。
7. add_dependencies(target_name dependency_names):添加目標文件的依賴。
8. catkin_package():用于構建Catkin軟件包時,用于指定包的依賴關系和其他Catkin特定的配置。
這只是一些常用的CMake指令,具體使用取決于你的項目需求。


問題三:rosrun的實質和devel/lib下的可執行文件 ?
rosrun是ROS中一個常用的命令行工具,用于運行ROS軟件包中的節點。它的基本語法是:
``rosrun package_name node_name
其中,package_name是要運行的節點所在的軟件包的名稱,node_name是要運行的節點的名稱。
當你使用rosrun命令運行一個節點時,ROS會在工作空間的devel/lib目錄下查找對應的可執行文件。該目錄是在你執行catkin_make或catkin build等構建命令后自動生成的,其中包含了已編譯的節點可執行文件。


問題四:為什么有多個cmake文件

在ROS項目中通常會出現多個CMake文件,這是因為ROS項目的結構和功能較復雜,需要分別管理不同的部分和依賴項。以下是常見的幾種CMake文件:

  1. CMakeLists.txt:這是ROS項目中最常見的CMake文件,位于ROS包的根目錄。它用于定義整個ROS包的構建規則、依賴項和其他配置選項。該文件會告訴CMake如何構建該ROS包,包括編譯可執行文件、創建庫、生成消息和服務文件等。

  2. package.xml:雖然不是CMake文件,但它是ROS項目中必不可少的配置文件之一。package.xml?文件位于ROS包的根目錄,用于定義ROS包的元數據、依賴項和其他信息。它描述了ROS包的名稱、版本、作者、許可證等重要信息,同時也列出了ROS和其他軟件包的依賴關系。

  3. CMakeLists.txt(子目錄):在ROS包中的子目錄中,可能會有額外的CMake文件。這些文件用于定義子目錄中特定部分的構建規則和依賴項。例如,如果ROS包有一個獨立的節點或庫在子目錄中,可以在該子目錄中創建一個獨立的CMake文件來管理該部分的構建過程。

  4. Find<package>.cmake:這些是用于查找和配置其他非ROS軟件包的CMake模塊文件。這些文件通常用于在ROS項目中使用外部庫或工具,它們提供了與這些庫和工具的集成方法。

每個CMake文件都有其特定的作用和范圍,它們共同協同工作以構建和管理一個完整的ROS項目。這種分離的方式使得項目的組織和維護更加清晰,并允許不同部分的獨立管理和配置。

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

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

相關文章

docker 基礎(二)

常見命令 Docker最常見的命令就是操作鏡像、容器的命令&#xff0c;詳見官方文檔&#xff1a;https://docs.docker.com/ 數據卷 命令說明文檔地址docker volume create創建數據卷docker volume createdocker volume ls創建數據卷docker volume lsdocker volume rm查看所有數…

asp.net core webapi接收application/x-www-form-urlencoded和form-data參數

框架&#xff1a;asp.net core webapiasp.net core webapi接收參數&#xff0c;請求變量設置 目錄 接收multipart/form-data、application/x-www-form-urlencoded類型參數接收URL參數接收上傳的文件webapi接收json參數 接收multipart/form-data、application/x-www-form-urlenc…

Swiper實現輪播效果

swiper官網&#xff1a;https://3.swiper.com.cn/ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&…

中間件-Nginx加固(控制超時時間限制客戶端下載速度并發連接數)

中間件-Nginx加固&#xff08;控制超時時間&限制客戶端下載速度&并發連接數&#xff09; 1.1 Nginx 控制超時時間配置1.2 Nginx 限制客戶端下載速度&并發連接數 &#x1f496;The Begin&#x1f496;點點關注&#xff0c;收藏不迷路&#x1f496; 1.1 Nginx 控制超…

TypeScript07:枚舉enum

一、擴展類型 擴展類型&#xff1a;類型別名、枚舉、接口、類。 枚舉&#xff1a;通常用于約束某個變量的取值范圍。 字面量和聯合類型配合使用&#xff0c;也可以達到同樣的目標。 二、字面量類型的問題 在類型約束位置&#xff0c;會產生重復代碼。可以使用類型別名解…

PSMC:繪圖腳本 psmc_plot.pl 腳本參數詳解

=> psmc_plot.plUsage: psmc_plot.pl [options] <out.prefix> <in.psmc>Options: -u FLOAT absolute mutation rate per nucleotide [2.5e-08]-s INT skip used in data preparation [100]-X FLOAT maximum generations,

機器學習圖像識別如何處理標簽以外的圖像?

機器學習圖像識別技術是一種基于人工智能的圖像處理方法&#xff0c;它通過訓練大量的圖像數據集來讓計算機學習如何識別和分類圖像。在圖像識別任務中&#xff0c;我們通常需要對圖像進行標注和分類&#xff0c;以便讓計算機能夠從中學習。但是&#xff0c;有時候我們可能會遇…

大數據旅游數據分析:基于Python旅游數據采集可視化分析推薦系統

文章目錄 基于Python旅游數據采集可視化分析推薦系統一、項目概述二、項目說明三、開發環境四、功能實現五、系統頁面實現用戶登錄注冊系統首頁數據操作管理價格與銷量分析旅游城市和景點等級分析旅游數據評分情況分析旅游數據評論情況分析旅游景點推薦Django系統后臺管理 六、…

centos7 安裝python3.8運行導入ssl報錯,親測驗證有效版

centos安裝python3.7時遇到如下問題&#xff0c;查閱知需要的openssl版本最低為1.0.2&#xff0c;但是centos 默認的為1.0.1&#xff0c;所以需要重新更新openssl import _ssl # if we cant import it, let the error propagate ImportError: No module named _ssl1、安…

【前端早早聊直播回顧】Harmony 時代的跨端方案

上周末&#xff0c;凡泰極客CTO - 徐鵬受邀出席「前端早早聊」直播活動&#xff0c;并以【跨端新挑戰-鴻蒙時代的跨端】為主題進行演講。 摘取部分分享實錄&#xff1a; 終端系統的數量和種類不斷增長&#xff0c;開發者面臨著多平臺開發的挑戰。以往開發者一般只需要維護iOS、…

2024年3月阿里云服務器大規模價格下調后優惠折扣表

阿里云服務器ECS等核心產品價格全線下調&#xff0c;最高幅度達55%&#xff0c;2024年3月1日生效&#xff0c;針對ECS部分在售產品的官網折扣價、ECS計算型節省計劃進行調整&#xff0c;生效后&#xff0c;基于官網折扣價的新購和續費&#xff0c;將按照新的價格進行計費。阿里…

程序媛的mac修煉手冊-- Node.js入門篇

最近因為參與一個微信小程序的開發&#xff0c;開始摸索JavaScript。期間&#xff0c;需要基于Node.js安裝微信開發工具的依賴項&#xff0c;所以又順帶學習了Node.js的包管理工具npm&#xff08;Node Package Manager&#xff09;。不過&#xff0c;之前看到國外的全棧大佬??…

flutter學習(一) 安裝以及配置環境

首先需要下載flutter&#xff0c;然后解壓 然后配置環境變量&#xff0c;配置到bin目錄就行 配置完之后cmd運行flutter doctor 你就會發現&#xff0c;都是錯 此時腦海里響起&#xff0c;臥槽&#xff0c;怎么回事&#xff0c;咋辦 別著急&#xff0c;我教你。。。 問題 這…

RK3568 RK809電源管理 RTC功能使能 定時喚醒

概述 RK809 是一款高性能 PMIC,RK809 集成 5 個大電流 DCDC、9 個 LDO、2 個 開關SWITCH、 1個 RTC、1個 高性能CODEC、可調上電時序等功能。 系統中各路電源總體分為兩種:DCDC 和 LDO。兩種電源的總體特性如下(詳細資料請自行搜索): DCDC:輸入輸出壓差大時,效率高,但…

python學習筆記 - 標準庫常量

Python 中有一些內置的常量&#xff0c;它們是一些特殊的值&#xff0c;通常不會改變。以下是其中一些常見的內置常量及其詳細解釋以及使用示例&#xff1a; True&#xff1a; 表示布爾值真。給 True 賦值是非法的并會引發 SyntaxError。 x True print(x) # 輸出&#xff1a…

內網穿透 nas/樹莓派+ipv4服務器 (ipv6)

nas 1.有個服務器 2.有個nas https://github.com/snail007/goproxy/blob/master/README_ZH.md https://github.com/snail007/proxy_admin_free/blob/master/README_ZH.md 2個官網一個是程序&#xff0c;一個是網站 手冊 https://snail007.host900.com/goproxy/manual/zh/#/?i…

Unity3D Shader事項法線貼圖功能詳解

前言 Unity3D它提供了豐富的功能和工具&#xff0c;使開發人員能夠輕松創建出色的游戲和應用程序。其中Shader是Unity3D中非常重要的一部分&#xff0c;它可以幫助開發人員實現各種視覺效果&#xff0c;包括法線貼圖功能。 對惹&#xff0c;這里有一個游戲開發交流小組&#…

rocketmq+rocket-dashboard win10安裝部署+注冊為Windows服務

1.1 首先去官網下載zip包 選擇自己需要的版本 下載 | RocketMQ 1.2 、下載后&#xff0c;解壓到指定目錄 1.3、配置RocketMQ環境變量 注意&#xff0c;看對應的版本需要jdk版本 1.4、啟動mqnameserver 進入bin目錄下&#xff0c;雙擊啟動mqnamesrv.cmd 啟動后&#xff0c;…

灰度圖像轉化為黑白圖像、轉化圖像為一位位深度的圖像(僅保留黑色)

/// <summary> /// 灰度圖像處理 /// </summary> public class PicGray {/// <summary>/// 獲取pic圖像對應的黑白圖像/// </summary>/// <param name"pic"></param>/// <param name"NumGray">像素灰度值</p…

webpack5基礎--02_基本配置( 5 大核心概念)

基本配置 在開始使用 Webpack 之前&#xff0c;我們需要對 Webpack 的配置有一定的認識。 5 大核心概念 entry&#xff08;入口&#xff09; 指示 Webpack 從哪個文件開始打包 output&#xff08;輸出&#xff09; 指示 Webpack 打包完的文件輸出到哪里去&#xff0c;如何…