日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: h片在线观看视频 | 免费插插视频 | 日韩电影一区二区三区四区 | 91人妻一区二区 | 牛夜精品久久久久久久99黑人 | 毛片综合| 亚洲aⅴ在线观看 | japanese中文字幕 | 亚州精品国产精品乱码不99按摩 | 中文字幕一区二区三区不卡 | 亚洲一区和二区 | 欧美日韩麻豆 | 农村妇女毛片精品久久久 | 国产日韩欧美在线观看视频 | 日韩欧美一级视频 | 欧美18—19性高清hd4k | 久久午夜激情 | www.久久.com | 人妻中文字幕一区 | 日韩免费视频一区 | 性感美女一区二区三区 | 日韩视频精品在线 | 最新日本中文字幕 | 欧美日韩一 | 嫩草懂你 | 黄色免费在线网址 | 日本精品一二区 | 天天干夜夜添 | 9色av| 牛牛超碰 | 欧洲精品久久 | 少妇欧美激情一区二区三区 | 中国老头性行为xxxx | 日韩国产一区二区三区 | 免费av软件 | 久操成人 | 色94色欧美sute亚洲线路二 | 农夫色综合 | 先锋资源在线视频 | 亚洲精品成人电影 | 国产第六页 | 亚洲人成7777 | 国产一区在线观看免费 | 一区二区小说 | 激情拍拍拍 | 亚洲天天干 | 国产精品久久久久久免费观看 | 毛片动态图 | 精品无码一区二区三区的天堂 | 亚洲码国产精品高潮在线 | 黄色资源在线 | 久久中文字幕一区二区 | 黄色一级大片免费版 | 欧美一级做a爰片免费视频 成人激情在线观看 | 男女午夜免费视频 | 新天堂av | 国产中文字幕在线免费观看 | 亚洲高清天堂 | 在线观看不卡一区 | 国产永久视频 | 日韩亚洲欧美综合 | 亚洲人成人无码网www国产 | 噼里啪啦国语高清 | 韩国黄色视屏 | 黄色片免费在线 | 国产吧在线 | 丰满人妻在公车被猛烈进入电影 | 一级黄色大片免费 | 97xxxxx| 激情aaa | 国产欧美一区在线观看 | 一级片一区二区三区 | 你懂的在线免费观看 | 日日撸夜夜撸 | 精品国产乱码久久久久久图片 | 在线看成人 | 亚洲免费视频一区二区三区 | 久久综合久久鬼色 | 波多野结衣一本一道 | 艳母免费在线观看 | 成人欧美激情 | 亚洲 欧美 日韩 国产综合 在线 | 中文无码一区二区三区在线观看 | 国产一级二级在线 | 亚洲美女色| 日韩激情中文字幕 | 中文字幕第31页 | 黑丝扣逼 | 性色在线视频 | 成人h动漫精品一区二 | 风间由美一区二区三区 | 在线观看国产免费av | 国产传媒在线 | 国产a v一区二区三区 | 尤物国产 | 欧美午夜性 | 欧美视频你懂的 | 午夜亚洲av永久无码精品 | 欧美性做爰大片免费 |