ros學(xué)習(一)從工作區(qū)搭建到消息和服務(wù)的使用

文件系統(tǒng):

Packages:?軟件包,是ROS應(yīng)用程序代碼的組織單元,每個軟件包都可以包含程序庫、可執(zhí)行文件、腳本或者其它手動創(chuàng)建的東西。

Manifest (package.xml):?清單,是對于'軟件包'相關(guān)信息的描述,用于定義軟件包相關(guān)元信息之間的依賴關(guān)系,這些信息包括版本、維護者和許可協(xié)議等。

rospack find [包名稱]? :返回軟件包的位置

roscd [本地包名稱[/子目錄]] :直接cd到軟件包的位置

pwd:查看當前工作目錄

roscd只能切換到那些路徑已經(jīng)包含在ROS_PACKAGE_PATH環(huán)境變量中的軟件包,要查看ROS_PACKAGE_PATH中包含的路徑可以輸入:

echo $ROS_PACKAGE_PATH


ROS_PACKAGE_PATH環(huán)境變量應(yīng)該包含那些保存有ROS軟件包的路徑,并且每個路徑之間用冒號分隔開來。


roscd log :cd到保存ros運行日志的文件夾


rosls:可以按軟件包的名字來執(zhí)行l(wèi)s


創(chuàng)建ros程序包

如何使用roscreate-pkgcatkin創(chuàng)建一個新程序包,并使用rospack查看程序包的依賴關(guān)系?


一個程序包要想成為catkin程序包必須符合以下要求:

包含catkin compliant package.xml文件:即編譯時的package.xml文件

包含一個catkin 版本的CMakeLists.txt文件

每個目錄下只能有一個程序包。


開發(fā)catkin程序包的一個推薦方法是使用catkin工作空間


src下的cmakelist是catlin的? 而自己的package下的cmakelist是每個包的

如何使用catkin_create_pkg命令來創(chuàng)建一個新的catkin程序包?

切換到之前通過主catkin工作空間中的src目錄下:

cd ~/catkin_ws/src

使用catkin_create_pkg命令來創(chuàng)建一個名為'beginner_tutorials'的新程序包,這個程序包依賴于std_msgs、roscpp和rospy:

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

將會創(chuàng)建一個名為beginner_tutorials的文件夾,這個文件夾里面包含一個package.xml文件和一個CMakeLists.txt文件,這兩個文件都已經(jīng)自動包含了部分你在執(zhí)行catkin_create_pkg命令時提供的信息。


依賴關(guān)系:

在使用catkin_create_pkg命令時提供了幾個程序包作為依賴包,現(xiàn)在我們可以使用rospack命令工具來查看一級依賴包:

rospack depends1 beginner_tutorials

在很多情況中,一個依賴包還會有它自己的依賴包,比如,rospy還有其它依賴包。

rospack depends1 rospy


編譯程序包


事先source你的環(huán)境配置(setup)文件:

source /opt/ros/kinetic/setup.bash

使用 catkin_make,在catkin工作空間下(cd catkin_ws)

catkin_make [make_targets] [-DCMAKE_VARIABLES=...] (一般直接catkin_make也行)


節(jié)點

Nodes:節(jié)點,一個節(jié)點即為一個可執(zhí)行文件,它可以通過ROS與其它節(jié)點進行通信。

Messages:消息,消息是一種ROS數(shù)據(jù)類型,用于訂閱或發(fā)布到一個話題。

Topics:話題,節(jié)點可以發(fā)布消息到話題,也可以訂閱話題以接收消息。

Master:節(jié)點管理器,ROS名稱服務(wù) (比如幫助節(jié)點找到彼此)。

rosout: ROS中相當于stdout/stderr。

roscore: 主機+ rosout + 參數(shù)服務(wù)器 (參數(shù)服務(wù)器會在后面介紹)。


ROS客戶端庫允許使用不同編程語言編寫的節(jié)點之間互相通信:

rospy = python 客戶端庫

roscpp = c++ 客戶端庫

roscore?是你在運行所有ROS程序前首先要運行的命令。

使用?rosnode?像運行?roscore?一樣看看在運行什么...: rosnode list

rosnode?info?命令返回的是關(guān)于一個特定節(jié)點的信息:rosnode info /rosout


rosrun?允許你使用包名直接運行一個包內(nèi)的節(jié)點(而不需要知道這個包的路徑)。

rosrun [package_name] [node_name]:

rosrun turtlesim turtlesim_node

也就是這個包里的node_name執(zhí)行文件 并不是給節(jié)點取個名字,這個名字是初定好的

如果重新配置名稱:

rosrun turtlesim turtlesim_node __name:=my_turtle? 此處為自定義名字 以后rosnode list下這個節(jié)點就被重命名為my_turtle


話題

節(jié)點之間是通過一個ROS話題來互相通信的,turtle_teleop_key在一個話題上發(fā)布按鍵輸入消息,而turtlesim則訂閱該話題以接收該消息,使用rqt_graph來顯示當前運行的節(jié)點和話題。

rosrun rqt_graph rqt_graph

直接使用rqt_graph 也可


rostopic?echo可以顯示在某個話題上發(fā)布的數(shù)據(jù)。 相當于再新建一個節(jié)點來訂閱此話題

rostopic echo?/turtle1/cmd_vel


rostopic?list能夠列出所有當前訂閱和發(fā)布的話題。

rostopic list -v


發(fā)布器和訂閱器之間必須發(fā)送和接收相同類型的消息,話題的類型是由發(fā)布在它上面的消息類型決定的。使用rostopic?type命令可以查看發(fā)布在某個話題上的消息類型

rostopic type [topic]

使用rosmsg命令來查看消息的詳細情況:

rosmsg show geometry_msgs/Twist(消息類型)

發(fā)布消息

rostopic?pub可以把數(shù)據(jù)發(fā)布到當前某個正在廣播的話題上。

rostopic pub [topic] [msg_type] [args]:

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


其中:-1(單個破折號)這個參數(shù)選項使rostopic發(fā)布1條消息后馬上退出。

--?接下來的參數(shù)部分都不是命令選項


改為 -r 1? 按1赫茲的頻率持續(xù)發(fā)消息


rostopic hz


使用 rqt_plot


可以實時顯示一個發(fā)布到某個話題上的數(shù)據(jù)變化圖形

rosrun rqt_plot rqt_plot


服務(wù)和參數(shù)

服務(wù)(services)是節(jié)點之間通訊的另一種方式。服務(wù)允許節(jié)點發(fā)送請求(request)?并獲得一個響應(yīng)(response)

rosservice可以很輕松的使用 ROS 客戶端/服務(wù)器框架提供的服務(wù)。rosservice提供了很多可以在topic上使用的命令,如下所示:

rosservice list 輸出可用服務(wù)的信息:

? ?得到 例如? /clear? ?


使用rosservice?type命令更進一步查看服務(wù)的類型

rosservice type [service]:??rosservice type clear

? 得到?std_srvs/Empty

服務(wù)的類型為空(empty),這表明在調(diào)用這個服務(wù)是不需要參數(shù)

使用rosservice?call命令調(diào)用服務(wù):

rosservice call [service] [args]

?無參數(shù)調(diào)用clear? ?:rosservice call clear


對于帶參數(shù)的服務(wù)

使用rosservice type [service]| rossrv show? ? 來展示需要怎樣的參數(shù)


rosparam? ?參數(shù)服務(wù)器

rosparam使得我們能夠存儲并操作ROS?參數(shù)服務(wù)器(Parameter Server)上的數(shù)據(jù)。參數(shù)服務(wù)器能夠存儲整型、浮點、布爾、字符串、字典和列表等數(shù)據(jù)類型。


看看現(xiàn)在參數(shù)服務(wù)器上都有哪些參數(shù):

rosparam list


修改參數(shù):

rosparam set [param_name] [param]


調(diào)用清除服務(wù)使其生效

rosservice call clear


獲取特定參數(shù)的具體值

rosparam get [param_name]


rosparam get /? ? ? ? (所有值)


存儲參數(shù):? ?將所有的參數(shù)寫入

rosparam dump params.yaml? ? (最后一項是文件名,必須是yaml文件)


讀取:rosparam load [file_name] [namespace]? ?最后一項是名空間 如果用copy似乎就可以是全部的值

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容