ROS基礎(一)

一、ROS文件系統

rospack:獲取軟件包的有關信息

$ rospack find [包名稱]

返回軟件包的路徑信息

roscd:直接切換工作目錄到某個軟件包或者軟件包集當中

$ roscd [本地包名稱[/子目錄]]

注:就像ROS中的其它工具一樣,roscd只能切換到那些路徑已經包含在ROS_PACKAGE_PATH環境變量中的軟件包,要查看ROS_PACKAGE_PATH中包含的路徑可以輸入:

$ echo $ROS_PACKAGE_PATH

(ROS_PACKAGE_PATH環境變量應該包含那些保存有ROS軟件包的路徑,並且每個路徑之間用冒號分隔開來。一個典型的ROS_PACKAGE_PATH環境變量如下:
/opt/ros/indigo/base/install/share:/opt/ros/indigo/base/install/stacks)
跟其他路徑環境變量類似,你可以在ROS_PACKAGE_PATH中添加更多其它路徑,每條路徑使用冒號’:'分隔。
另:
①使用roscd也可以切換到一個軟件包或軟件包集的子目錄中。(如:$ roscd roscpp/cmake)
②使用roscd log可以切換到ROS保存日記文件的目錄下。需要注意的是,如果你沒有執行過任何ROS程序,系統會報錯說該目錄不存在。

rosls:直接按軟件包的名稱而不是絕對路徑執行ls命令(羅列目錄)

$ rosls [本地包名稱[/子目錄]]

ROS工具支持TAB自動完成輸入的功能

二、創建ROS程序包

一個程序包要想稱爲catkin程序包必須符合以下要求:
①包含package.xml(提供有關程序包的元信息)
②包含CMakeLists.txt(metapackages必須包含對它的引用)
③每個目錄下只能有一個程序包(即同一目錄下不能嵌套或有多個包存在)

第一步:創建工作空間

1.$ mkdir -p catkin_ws/src
創建工作空間目錄(也可以不叫catkin_ws)
2.$ cd ~/catkin_ws/
3.$ catkin_make(編譯軟件包)
4.通過$ source devel/setup.bash添加工作空間下的/devel/setup.bash文件的路徑
注:爲了不用每次打開終端都source這個軟件包,我們可以修改整個環境:
$ gedit ~/.bashrc
②把編輯文本拉至最後,添加:$ source ~/catkin_ws/devel/setup.bas
5.要確保您的工作區被安裝腳本正確覆蓋,請確保ROS_PACKAGE_PATH環境變量包含您所在的目錄。

$ echo $ROS_PACKAGE_PATH /home/youruser/catkin_ws/src:/opt/ros/indigo/share

第二步:創建軟件包

軟件包一般在工作空間的src下創建,否則ros無法定位。命名避免與指令名相同,不能以數字或者符號開頭,且不允許有大寫字母

創建軟件包:$ catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
(package_name表示包名,depend各種依賴,依賴包保存在package.xml文件)

依賴分爲一級依賴(創建軟件包的過程添加的依賴)和間接依賴(各依賴項之間的關係)

命令 作用
$ rospack depends1 package_name 查看一級依賴
$ rospack depends package_name 查看所有依賴

刪除軟件包:直接使用rm指令,並重新編譯

三、編譯ROS程序包

$ cd ~/catkin_ws/
$ catkin_make

編譯src文件夾下所有catkin工程
(若不在默認的src中,比如說存放在了my_src中,那麼你可以這樣來使用
$catkin_make:catkin_make --source my_src

編譯之後在catkin_ws下生成build、devel和原有的src
build 目錄是build space的默認所在位置,同時cmake 和 make也是在這裏被調用來配置並編譯你的程序包。devel 目錄是devel space的默認所在位置, 同時也是在你安裝程序包之前存放可執行文件和庫文件的地方。

四、理解 ROS節點

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

rosnode:顯示當前運行的ROS節點信息
rosnode list :指令列出活躍的節點
rosnode info :返回的是關於一個特定節點的信息(如:$ rosnode info /rosout
可以通過ping來測試節點(如:$ rosnode ping my_turtle

rosrun:允許你使用包名直接運行一個包內的節點(而不需要知道這個包的路徑)

五、理解ROS話題

rqt_graph:能夠創建一個顯示當前系統運行情況的動態圖形。(查看node和它們之間的topic)

$ rosrun rqt_graph rqt_graph

rostopic命令工具能讓你獲取有關ROS話題的信息。
你可以使用幫助選項查看rostopic的子命令:

$ rostopic -h
rostopic bw    display bandwidth used by topic
rostopic echo    print messages to screen
rostopic hz     display publishing rate of topic
rostopic list     print information about active topics
rostopic pub    publish data to topic
rostopic type    print topic type

rostopic echo:可以顯示在某個話題上發佈的數據。

$ rostopic echo [topic]

rostopic list:能夠列出所有當前訂閱和發佈的話題。
讓我們查看一下list子命令需要的參數,在一個新終端中運行:

$ rostopic list -h
Usage: rostopic list [/topic]

Options:
  -h, --help          show this help message and exit
  -b BAGFILE, --bag=BAGFILE  list topics in .bag file
  -v, --verbose                  list full details about each topic
  -p                                  list only publishers
  -s                                  list only subscribers

rostopic type:查看所發佈話題的消息類型。

$rostopic type [topic]

rosmsg:查看消息的詳細情況。

$rosmsg show [topic]

rostopic pub:把數據發佈到當前某個正在廣播的話題上。

$ rostopic pub [topic] [msg_type] [args]

常用選項:
-l  使rostopic發佈一條消息之後馬上退出
如:$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
/turtle1/command_velocity:消息所發佈到的話題名稱。
turtlesim/Velocity:所發佈消息的類型。
–(雙破折號):這會告訴命令選項解析器接下來的參數部分都不是命令選項。這在參數裏面包含有破折號-(比如負號)時是必須要添加的。
‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’:相關信息。(可以用$rosmsg show [topic]查看)

另:$ rostopic pub -r命令來發佈一個穩定的命令流
如:$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
這條命令以1Hz的頻率發佈速度命令到速度話題上。

rostopic hz:查看數據發佈的頻率。

$ rostopic hz [topic]

rqt_plot:實時顯示一個發佈到某個話題上的數據變化圖形。

$ rosrun rqt_plot rqt_plot
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章