導航:首頁 > 源碼編譯 > 編譯之後怎麼找ros節點

編譯之後怎麼找ros節點

發布時間:2023-01-11 06:58:56

『壹』 ROS 計算圖級,理解ROS 節點、話題

計算圖級-------是 ROS 處理數據的一種點對點的網路形式。程序運行時,所有進程及它們所進行的數據處理,將會通過一種點對點的網路形式表現出來,即通過節點、節點管理器、話題、服務等來進行表現。
ROS 中的基本計算圖級概念包括:節點、節點管理器、參數伺服器、消息、服務、話題和包。這些概念以各種形式來提供數據。

ros 命令的說明及參數可以通過 < 命令 > -h (或 --help )來查看
例如: rosnode -h

用鍵盤控制小海龜運動這一過程的通信機制是怎樣的呢?其實,這兩個節點是通過一個 ROS 話題( Topic )來相互通信的, turtle_teleop_key 在這個話題上發布鍵盤輸入的的消息,而 turtlesim 則訂閱該話題以接收該消息。下面通過 rqt 功能包和 rostopic 命令來查看相關信息:

2, rostopic list :能夠列出所有當前訂閱和發布的話題。
先看一下 rostopic list 子命令需要哪些參數。運行命令:
rostopic list -h
使用 verbose 選項,以列出相關話題的詳細信息。運行命令:
rostopic list -v
顯示了有關所發布和訂閱的話題的詳細信息,其中方括弧中表示的是話題的類型。
3, rostopic type :用來查看所發布話題的消息類型。
用法: rostopic type [topic] 運行如下命令:
rostopic type /turtle1/cmd_vel
上面的 geometry_msgs/Twist 即為話題 /turtle1/cmd_vel 的消息類型,這在執行命令 rostopic list -v 時
也有所體現。
下面用 rosmsg 命令來查看消息的詳細情況:
rosmsg show geometry_msgs/Twist

4, rostopic pub :把數據發布到當前某個正在廣播的話題上。通過此命令可以通過直接在終端發送命令來控制小海龜
用法: rostopic pub [topic] [msg_type] [args]

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

『貳』 ros中的節點用c++編寫的時候直接調用就可以了嗎

一、首先建一個包
我的工作空間catkin_ws事先建好了,路徑是/home/siat/catkin_ws
然後運行以下命令在src文件夾下建立test包
$ cd ~/catkin_ws/src
$ catkin_create_pkg test roscpp1212

注意在包的名字後加上一些基本的依賴,比如roscpp和rospy這樣就可以直接調用C++和python節點了,這將會在CMakeLists.txt中出現
find_package(catkin REQUIRED COMPONENTS roscpp)11

注意如果沒有加依賴,而是直接運行
$ catkin_create_pkg test11

來創建包的,在CMakeLists.txt中是這樣的
find_package(catkin REQUIRED)11

在後面編譯C++節點的時候將會提示「對各種ros類下的函數未定義的引用」
二、編寫節點文件

『叄』 ros編譯提示缺少鏈接庫怎麼辦

一、標准:ROS功能包中調用第三方靜態庫
include_directories(
include
${catkin_INCLUDE_DIRS}
)

add_executable(${PROJECT_NAME}_node src/source.cpp
include/source.h
)

target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
${PROJECT_SOURCE_DIR}/lib/第三方庫名
)
以上一般情況下都沒問題,但是有些靜態庫沒有添加pie系統保護功能,導致程序轉載的地址是無效的,所以我們在鏈接時候也需要關閉pie功能。
註:引入PIE的原因是讓程序能裝載在隨機的地址,通常情況下,內核都在固定的地址運行,如果能改用位置無關,那攻擊者就很難藉助系統中的可執行碼實施攻擊了。類似緩沖區溢出之類的攻擊將無法實施。而且這種安全提升的代價很小
二、解決鏈接未開啟pie功能的靜態庫時,編譯報錯
先作對比:
include_directories(
include
${catkin_INCLUDE_DIRS}
)
add_executable(${PROJECT_NAME}_node src/source.cpp
include/source.h
)

target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
${PROJECT_SOURCE_DIR}/lib/第三方庫名 -no-pie
)
與一般的鏈接形式對比,我們只是在鏈接第三方庫的後面加了-no-pie,之後再到ROS的工作空間中重新編譯就完成了!

『肆』 ROS 工作空間、package 及 catkin 編譯系統

本文內容都可以在 ROS 官網 wiki ( http://wiki.ros.org/ROS/Tutorials )中找到,作者只是根據自己的理解重新闡述了其中的某些內容,或許能幫助讀者更好的理解 ROS 系統中的一些概念。首先保證 ROS 已經正確安裝了。安裝方式可以參考 本博客的另一篇文章 。

簡單地說,ROS workspace (工作空間)就是統一存放 ROS 文件的地方,比如一個項目的所有 ROS 文件最好都放在一個 workspace 中,便於統一管理、編譯和調用。

catkin 是目前 ROS 的編譯系統,自 ROS Groovy 版本開始使用,取代了之前的 rosbuild 編譯系統。

ROS workspace 中可以包含若干 ROS package,每個 package 內部包含實現某些特定功能的文件。

其中,~ 表示當前用戶的 home 目錄, -p (parent)參數可以創建某個文件夾和它的父文件夾,也就是兩層的路徑。這里 workspace 的名字是 catkin_ws,這個名字可以按照自己項目的內容設定,但是 src 這個文件夾的名字是固定的。

初始化工作空間。這里 src 就是以後存放 ROS 源文件的地方。上述命令之後,會在 src 目錄下產生 CMakeLists.txt 文件,這實際上是一個鏈接到ROS 安裝目錄下的 /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake 一個超鏈接文件,對工作空間做了一些初始設置。不用去管它,也不要隨便修改它。

會一次性編譯 src 文件夾中的所有源文件,同時生成 devel 和 build 兩個文件夾。

實際上,catkin_make 這個命令並沒有特別神奇的地方,它只是把一系列基本的編譯命令整合在了一起,一個 catkin_make 命令相當於如下的一系列命令:

如果要深入研究 catkin_make 編譯方式,可以參考 這篇文章 。

將 workspace 的信息載入系統環境變數。
這種方法載入的信息只對當前 terminal 有效。新開一個 terminal 就無效了。如果要對每個 terminal 都有效,可以將上述命令寫入用戶 home 路徑下的 .bashrc 文件中:

注意,.bashrc 文件是隱藏文件,在 home 路徑下通過命令

命令可以看到。

還要注意, >> 是將 echo 後邊的內容寫入文件的尾部,如果用 > 則要覆蓋原文件,一定不要搞錯。

編譯之後,由於我們只是一個空的 workspace,還沒有任何 package,所以沒有什麼實質性的東西,只是告訴系統這里有個 ROS workspace,算是在系統中注冊了一下。

package 是組織 ROS 文件的基本單元,一般來說,每個 package 完成一些特定功能。

package 中至少包含兩個文件: package.xml 和 CMakeLists.txt.

package 在 workspace 中的存放結構一般如下:

也可採用其他的結構,但是要注意 package 之間不能嵌套,也就是在一個 package 中,不能再創建另一個 package ,所有 package 都必須是相對獨立的目錄。

用 catkin 創建 package 的過程很簡單,用如下命令:

其中 depend 為依賴的其他 package。這樣創建之後,package 中的 CMakeLists.txt 和 package.xml 中會體現出這種依賴關系。創建時也可以不指明依賴關系,在後續編譯 package 的時候再補上。

創建好了 package,就可以使用 rospack 相關的命令進行查找、進入等操作了。不過,有時會有延遲,可以用命令

或者

查找、更新一下。

上述方式創建了 ROS package,然後就可以在其中編寫 源文件了,可用的語言主要是 c++, python,我們現在的項目中還用到了 Julia。這里就不再細述具體的源文件編寫過程了。

創建好了源文件,如果是 c++ 編寫的,要編譯一下。這里要設置好 package.xml 和 CMakeLists.txt 中的信息。如果依賴的 package 已經設置好了,就不需要修改 package.xml 了,只需要在 CMakeLists.txt 中添加源文件對應的編譯信息如下:

實際上在 CMakeLists.txt 中有非常全面的模板,很容易找到在哪裡添加這些編譯文件信息。

設置好了編譯信息,就可以回到 workspace 的 src 所在文件夾中,用如下命令編譯:

該命令可以一次性編譯 src 中的所有 package。如果只想編譯指定的 package,可以用如下命令:

但是,這個命令似乎有時不太管用,根據我們的實際經驗,最有效的方法是用如下的 whitelist 命令:

這樣就是只編譯 package1 和 package2。但是要注意,該命令中的 whitelist 具有記憶功能。用完該命令之後,下次如果要編譯 src 中所有的 package,如果只用 catkin_make,則還是只編譯 whitelist 中的 package,需要用如下命令清除一下 whitelist

以上就是我們使用 ROS 中的一些基本操作,希望其中的一些內容對讀者有幫助。

Written by SH

Revised by QP

『伍』 如何使用 sdk交叉編譯ros

使用ros_qtc_plugin插件新建項目

使用插件新建項目Import ROS
Workspace選項僅新建工作空間導入現工作空間新建文件ROS面Package、Basic
Node等選項創建package節點、launch文件、urdf文件等
現我創建新catkin工作空間,並且面創建package

1、新建項目

文件——新建文件或項目選擇Import ROS Workspace——choose圖

填寫catkin工作空間名字位置圖

我Namecatkin工作空間文件夾名字相同(同)名catkin_new選擇瀏覽——創建文件夾創建名catkin_new文件夾圖按車再選擇打

現框詢問新建工作空間未初始化否執行初始化我選擇yes
相於執行catkin_init_workspace命令使工作空間初始化

點擊Generate Project File再點擊步
項目管理步驟配置版本控制系統我選擇完圖

建工作空間catkin_new空圖

2、創建package

接我工作空間創建新package
catkin_new面src右鍵單擊選擇添加新文件圖

選擇ROS——package——choose

填寫package名字test1
填寫作者(Authors)維護者(Maintainers)Qt環境部沒配置文支持請要用文否則新建package或者新建package面package.xml空文件
DependenciesCatkin欄填寫依賴通用C++寫節點需要添加roscpp依賴


點擊完

3、添加新節點

目前package空沒任何節點
我test1src文件夾右鍵單擊選擇添加新文件

選擇ROS——Basic Node——choose創建節點新建.cpp文件

節點名稱寫node1則名node1.cpp源文件

用ROS模板新建node1.cpp源文件圖自Hello World程序

4、編譯節點

讓編譯執行文件我需要編輯test1makefile圖
test1CMakeLists.txt加面幾行意思node1.cpp編譯名node1節點
add_executable(node1 src/node1.cpp)
target_link_libraries(node1
${catkin_LIBRARIES}
)

閱讀全文

與編譯之後怎麼找ros節點相關的資料

熱點內容
阿里雲伺服器低價續費 瀏覽:335
python監控日誌腳本 瀏覽:132
雲伺服器實例是什麼意思 瀏覽:708
小尋app是做什麼的 瀏覽:647
c語言中編譯和運行 瀏覽:999
畫流圖找循環編譯原理 瀏覽:143
oppo手機西瓜視頻的文件夾 瀏覽:867
騎手一般用哪個app 瀏覽:610
程序員老闆用什麼手機 瀏覽:848
比心app頭像不通過為什麼 瀏覽:105
加密幣市值前十走勢 瀏覽:190
單片機學習推薦課程 瀏覽:473
對數ln的運演算法則圖片 瀏覽:735
仿微博app源碼 瀏覽:781
怎麼取消調用app 瀏覽:545
程序員去哪裡求助 瀏覽:834
伺服器里的埠是什麼 瀏覽:975
aspnetjavaphp 瀏覽:399
程序員畢業時間 瀏覽:286
程序員用戶免費軟體 瀏覽:754