日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS学习笔记三:编写第一个ROS节点程序

發(fā)布時間:2025/5/22 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS学习笔记三:编写第一个ROS节点程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在編寫第一個ROS節(jié)點程序之前需要創(chuàng)建工作空間(workspace)和功能包(package)。


一、創(chuàng)建工作空間(workspace)

創(chuàng)建一個catkin_ws:

#注意:如果使用sudo一次性創(chuàng)建多個目錄,則這多個目錄屬主都為root,若是非root用戶創(chuàng)建的ROS,則無法在root目錄創(chuàng)建工作空間 sudo mkdir -p ~/dev/catkin_ws/src cd ~/dev/catkin_ws/src catkin_init_workspace


當我們創(chuàng)建工作空間文件夾后,里面并沒有功能包,只有CMakeList.txt。下一步是編譯工作空間,使用下面命令:

cd ~/dev/catkin_ws catkin_make

現(xiàn)在,如果你輸入ls -l命令,可以看到上面命令創(chuàng)建的新文件夾,分別是“build”和一個“devel”文件夾:

zlkj@ubuntu:~/dev/catkin_ws$ ls -l total 12 drwxrwxr-x 7 zlkj zlkj 4096 Mar 19 12:10 build drwxrwxr-x 3 zlkj zlkj 4096 Mar 19 12:10 devel drwxrwxr-x 2 zlkj zlkj 4096 Mar 19 11:23 srczlkj@ubuntu:~/dev/catkin_ws/build$ ls -l total 64 drwxrwxr-x 3 zlkj zlkj 4096 Mar 19 12:10 catkin drwxrwxr-x 4 zlkj zlkj 4096 Mar 19 12:10 catkin_generated -rw-rw-r-- 1 zlkj zlkj 0 Mar 19 12:10 CATKIN_IGNORE -rw-rw-r-- 1 zlkj zlkj 125 Mar 19 12:10 catkin_make.cache -rw-rw-r-- 1 zlkj zlkj 16071 Mar 19 12:10 CMakeCache.txt drwxrwxr-x 9 zlkj zlkj 4096 Mar 19 12:10 CMakeFiles -rw-rw-r-- 1 zlkj zlkj 7365 Mar 19 12:10 cmake_install.cmake -rw-rw-r-- 1 zlkj zlkj 284 Mar 19 12:10 CTestTestfile.cmake drwxrwxr-x 3 zlkj zlkj 4096 Mar 19 12:10 gtest -rw-rw-r-- 1 zlkj zlkj 8578 Mar 19 12:10 Makefile drwxrwxr-x 2 zlkj zlkj 4096 Mar 19 12:10 test_resultszlkj@ubuntu:~/dev/catkin_ws/devel$ ls -l total 36 -rwxr-xr-x 1 zlkj zlkj 506 Mar 19 12:10 env.sh drwxrwxr-x 2 zlkj zlkj 4096 Mar 19 12:10 lib -rw-r--r-- 1 zlkj zlkj 260 Mar 19 12:10 setup.bash -rw-r--r-- 1 zlkj zlkj 2542 Mar 19 12:10 setup.sh -rwxr-xr-x 1 zlkj zlkj 12378 Mar 19 12:10 _setup_util.py -rw-r--r-- 1 zlkj zlkj 270 Mar 19 12:10 setup.zsh

可以看到在devel目錄下,有很多setup.*sh文件,讀取這些文件中的任何一個都會將當前工作空間的環(huán)境變量置于所有環(huán)境變量的最上層。如果我們打開這些文件會發(fā)現(xiàn),最終都是要讀取setup.bash文件,這個文件中定義了catkin_ws空間所需要的環(huán)境變量。


讀取setup.bash文件:

source devel/setup.bash

確認已經(jīng)加載好catkin工作空間環(huán)境變量:

echo $ROS_PACKAGE_PATH//顯示出: /home/zlkj/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks

這時ROS的工作空間已經(jīng)創(chuàng)建好了。


總結:

初始化ROS的catkin工作空間:catkin_init_workspace

編譯ROS的catkin工作空間:catkin_make

讀取當前catkin工作空間的環(huán)境變量:source devel/setup.bash

驗證ROS工作空間的環(huán)境變量加載成功:echo $ROS_PACKAGE_PATH


二、創(chuàng)建功能包(package)

使用catkin_create_pkg命令行工具在之前創(chuàng)建的工作空間創(chuàng)建新的功能包:

cd ~/dev/catkin_ws/src catkin_create_pkg amin std_msgs roscpp

其實,這個功能包創(chuàng)建命令沒有做太多工作,它只不過創(chuàng)建了一個存放這個功能包的目錄(也就是我所創(chuàng)建的功能包amin),并在amin那個目錄下生成了兩個配置文件。

  • 第一個配置文件,叫做 package.xml,稱為清單文件。
  • 第二個文件,叫做 CMakeLists.txt,是一個 Cmake 的腳本文件,Cmake 是一個符合工業(yè)標準的跨平臺編譯系統(tǒng)。這個文件包含了一系列的編譯指令,包括應該生成哪種可執(zhí)行文件,需要哪些源文件,以及在哪里可以找到所需的頭文件和鏈接庫。當然,這個文件表明 catkin 在內(nèi)部使用了 Cmake。


catkin_create_pkg命令的格式包括功能包的名稱和依賴項。在上面示例中,依賴項為std_msgs和roscpp。如以下命令行所示:

catkin_create_pkg [package_name] [depend1] [depend2] [depend3]

這些依賴項包括:

  • std_msgs 包含了常見消息類型,表示基本數(shù)據(jù)類型和其他基本的消息構造,如多維數(shù)組。
  • roscpp 使用C++實現(xiàn)ROS的各種功能。它提供了一個客戶端庫,讓C++程序員能夠調(diào)用這些接口快速完成與ROS的主題、服務和參數(shù)相關的開發(fā)工作。

注意:ROS 功能包的命名遵循一個命名規(guī)范,只允許使用小寫字母、數(shù)字和下劃線,而且首字符必須是一個小寫字母。一些 ROS工具,包括 catkin,不支持那些不遵循此命名規(guī)范的功能包。


三、編寫ROS節(jié)點程序

編寫一個簡單的ros節(jié)點程序,命名為hello.cpp。這個名為 hello.cpp 的源文件也存放在你的功能包 amin文件夾中 , 挨著 package.xml 和 CMakeLists.txt。

注意:一些在線教程建議在你的功能包目錄中創(chuàng)建 src 目錄來存放 C ++源文件。這個附加的組織結構可能是有益的,特別是對于那些含有多種類型文件的較大的功能包,但它不是嚴格必要的。

ROS節(jié)點程序如下:

#include <ros/ros.h>int main (int argc, char **argv) {ros::init(argc, argv, "hello") ;ros::NodeHandle nh;ROS_INFO_STREAM("Hello, ROS!") ; }


四、編譯Hello.cpp程序

我們該如何編譯和運行這個程序呢?這些交給ROS的catkin編譯系統(tǒng)來處理。

第一步:聲明依賴庫

首先,我們需要聲明程序所依賴的其他功能包。對于 c++程序而言,此步驟是必要的,以確保 catkin 能夠向 c++編譯器提供合適的標記來定位編譯功能包所需的頭文件和鏈接庫。

為了給出依賴庫,需要編輯功能目錄下的 CMakeLists.txt 與 package.xml 文件,通過使用build_depend (編譯依賴)和 run_depend(運行依賴)兩個關鍵字實現(xiàn),格式如下:

<build_depend>package-name</build_depend> <run_depend>package-name</run_depend>

不過這一步可以省略,因為在創(chuàng)建功能包說明依賴項的同時,系統(tǒng)自動聲明了依賴庫,除非創(chuàng)建時未說明依賴項。

使用rospack depend1 amin可以查看直接功能包的直接依賴。在很多情況下,我們會遇到依賴的依賴,即間接依賴。例如amin的依賴文件roscpp也有其他依賴。如果我們使用rospack depends amin,則會列出amin功能包的所有依賴文件。


第二步:聲明可執(zhí)行文件

接下來,我們需要在 CMakeLists.txt 中添加兩行,來聲明我們需要創(chuàng)建的可執(zhí)行文件。其一般形式是:

add_executable(executable-name source-files) target_link_libraries(executable-name ${catkin_LIBRARIES})
  • 第一行聲明了我們想要的可執(zhí)行文件的文件名,以及生成此可執(zhí)行文件所需的源文件列表。如果你有多個源文件,把它們列在此處,并用空格將其區(qū)分開。
  • 第二行告訴 Cmake 當鏈接此可執(zhí)行文件時需要鏈接哪些庫(在上面的 find_package 中定義)。如果你的包中包括多個可執(zhí)行文件,為每一個可執(zhí)行文件復制和修改上述兩行代碼。

在本例程中,我們需要一個名為 hello 的可執(zhí)行文件,它通過名為 hello.cpp 的源文件編譯而來。所以我們需要添加如下兩行代碼到 CMakeLists.txt 文件中 include_directories(include ${catkin_INCLUDE_DIRS}) 之后:

add_executable(hello hello.cpp) target_link_libraries(hello ${catkin_LIBRARIES})


第三步:編譯工作區(qū)

利用catkin_make這個命令進行編譯,注意必須在你的工作空間目錄運行。

cd ~/dev/catkin_ws catkin_make

運行完后會在 ~/dev/catkin_ws/devel/amin 目錄下生產(chǎn) hello 這個可執(zhí)行文件。下圖為運行的結果。


五、執(zhí)行hello程序

首先要啟動 roscore:這個程序是一個節(jié)點,節(jié)點需要一個節(jié)點管理器才可以正常運行。啟動節(jié)點管理器的命令:

roscore

啟動完節(jié)點管理器后,執(zhí)行名為 setup.bash 的腳本文件,它是 catkin_make 在你工作區(qū)的 devel 子目錄下生成的。這個自動生成的腳本文件設置了若干環(huán)境變量,從而使 ROS 能夠找到你創(chuàng)建的功能包和新生成的可執(zhí)行文件。(也就是將程序注冊)

source devel/setup.bash

最后一步,運行節(jié)點,用命令:使用格式為"rosrun package-name executable-name" ,package-name 為功能包名稱, executable-name為可執(zhí)行文件名稱。

rosrun amin hello


運行結果如圖:

這樣一個簡單的ROS程序就完成了。


轉(zhuǎn)載于:https://www.cnblogs.com/linuxAndMcu/p/10571643.html

總結

以上是生活随笔為你收集整理的ROS学习笔记三:编写第一个ROS节点程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲日日日 | 天堂一区 | 欧美日韩精品一区二区在线观看 | 精品人妻人伦一区二区有限公司 | 极品尤物一区二区 | 色一情一伦一子一伦一区 | 国产女人呻吟高潮抽搐声 | 99国产在线观看 | brazzers精品成人一区 | 亚洲日本中文字幕 | 91青青操 | 在线成人免费观看 | 中文久久久久 | 日产国产亚洲精品系列 | 正在播放adn156松下纱荣子 | 蜜臀aⅴ国产精品久久久国产老师 | 牛牛在线免费视频 | 日本精品一区二区 | www.96av| 亚洲激情视频在线 | www.在线| 欧美乱大交xxxxx潮喷 | 老司机精品视频在线播放 | 欧美成人a交片免费看 | 香蕉一区二区三区四区 | 中文字幕理伦片免费看 | 久久天天躁狠狠躁夜夜av | 成人国产精品久久久网站 | 黄色片网站在线 | 亚洲25p | 亚洲综合激情在线 | 国产精品成人无码 | 人人亚洲| 天天综合av| 久久久久久国产精品三级玉女聊斋 | 黄页网站免费观看 | 精品亚洲国产成av人片传媒 | 麻豆av一区 | 污视频在线免费 | 黄色免费网| 欧美日韩视频免费 | 国偷自拍第113页 | 欧美日韩国产在线 | 日韩有码在线观看 | 国产三级在线看 | 国产污污| 黄色动漫在线免费观看 | 毛片少妇| 都市激情中文字幕 | 夜夜精品视频 | 国产一区二区三区中文字幕 | 国产一区视频在线观看免费 | 色xxxx| 豆豆色成人网 | 人人综合网 | 人人妻人人澡人人爽国产一区 | 男人爽女人下面动态图 | 国产成人三级在线观看视频 | 污污视频网站免费观看 | www.日韩.com| 国产肉体ⅹxxx137大胆 | 69午夜 | 久久久久久久女国产乱让韩 | 久久av喷吹av高潮av萌白 | 97久久人国产精品婷婷 | 一级片免费观看视频 | 日韩在线观看视频一区 | 在线精品视频播放 | 欧美无砖砖区免费 | 欧美人和黑人牲交网站上线 | 欧美a级在线免费观看 | 91精品久久久久久久久 | 久久久精品 | 欧美日韩一区二区三区国产精品成人 | 公车乳尖揉捏酥软呻吟 | av网站地址 | 黄视频网站在线看 | 欧美三级特黄 | 久久无码人妻一区二区三区 | 日韩激情视频网站 | 激情午夜天 | 免费在线看黄色片 | 国产在线视频在线观看 | 中文字幕无码乱人伦 | 国产小视频在线播放 | 国产日韩欧美在线 | 99在线免费观看 | 精品人伦一区二区三区 | 福利亚洲 | 欧美日日骚 | 香蕉久久国产av一区二区 | 夜夜夜操操操 | 天堂中文字幕在线观看 | 人人看人人看 | 黄色a区| a视频免费看| 午夜成年视频 | 欧美日韩不卡在线 | 毛片你懂的 |