1. 程式人生 > 其它 >【ROS】ROS使用

【ROS】ROS使用

技術標籤:ros

一、構建軟體包

首先要source一下:

source /opt/ros/kinetic/setup.bash
catkin_make是一個命令列工具,它簡化了標準catkin工作流程
在catkin工作空間下
$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]

如果你的原始碼不在預設位置(catkin_ws/src),比如說存放在了my_src中,那可以這樣來使用catkin_make:

# 在catkin工作空間下
$ catkin_make --source my_src

前文中利用catkin_create_pkg

已經在~/catkin_ws/src中建立了一個beginner_tutorials的軟體包,就可以用catkin_make進行編譯。

二、ROS節點

計算圖(Computation Graph)是一個由ROS程序組成的點對點網路,它們能夠共同處理資料。ROS的基本計算圖概念有節點(Nodes)、主節點(Master)、引數伺服器(Parameter Server)、訊息(Messages)、服務(Services)、話題(Topics)和袋(Bags),它們都以不同的方式向圖(Graph)提供資料。

roscore是你在執行所有ROS程式前首先要執行的命令(確保roscore正在執行)

roscore

然後會有如下資訊:

... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://machine_name:33919/
ros_comm version 1.4.7

SUMMARY
========

PARAMETERS
 * /rosversion
 * /rosdistro

NODES

auto-starting new master
process[master]: started with pid [13054]
ROS_MASTER_URI=http://machine_name:11311/

setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
process[rosout-1]: started with pid [13067]
started core service [/rosout]

rosnode顯示當前正在執行的ROS節點資訊。rosnodelist命令會列出這些活動的節點:

rosnode list

輸出:/rosout

rosnodeinfo命令返回的是某個指定節點的資訊:

rosnode info /rosout

rosrun可以讓你用包名直接執行軟體包內的節點(而不需要知道包的路徑):

rosrun [package_name] [node_name]

所以現在我們試著執行turtlesim包中的turtlesim_node。

在一個終端中:

rosrun turtlesim turtlesim_node

我們還需要通過鍵盤來控制turtle,開啟一個終端:

rosrun turtlesim turtle_teleop_key

三、ROS話題

turtlesim_node節點和turtle_teleop_key節點之間是通過一個ROS話題來相互通訊的。turtle_teleop_key在話題上釋出鍵盤按下的訊息,turtlesim則訂閱該話題以接收訊息。

rqt_graph用動態的圖顯示了系統中正在發生的事情。rqt_graph是rqt程式包中的一部分。如果你發現沒有安裝,請:

sudo apt-get install ros-<distro>-rqt
sudo apt-get install ros-<distro>-rqt-common-plugins

rosrun rqt_graph rqt_graph

rostopic命令工具能讓你獲取ROS話題的資訊:

rostopicecho可以顯示在某個話題上釋出的資料

rostopic echo [topic]
Eg:rostopic echo /turtle1/cmd_vel

rostopiclist能夠列出當前已被訂閱和釋出的所有話題

rostopic list -v

rostopictype命令用來檢視所釋出話題的訊息型別

rostopic type [topic]
rostopic type /turtle1/cmd_vel
輸出:geometry_msgs/Twist

rosmsg檢視訊息的詳細資訊:

rosmsg show geometry_msgs/Twist

rostopicpub -1可以把一條資料釋出到當前某個正在廣播的話題上

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]'
【以上命令會發送一條訊息給turtlesim,告訴它以2.0大小的線速度和1.8大小的角速度移動】

用rostopicpub-r命令來發布源源不斷的命令,以1 Hz的速度釋出velocity指令到velocity話題上:

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

四、ROS服務

服務(Services)是節點之間通訊的另一種方式。服務允許節點發送一個請求(request)並獲得一個響應(response)

rosservice list         輸出活躍服務的資訊
rosservice call         用給定的引數呼叫服務
rosservice type         輸出服務的型別
rosservice find         按服務的型別查詢服務
rosservice uri          輸出服務的ROSRPC uri
服務型別:
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level

rosparam能讓我們在ROS引數伺服器(Parameter Server)上儲存和操作資料。引數伺服器能夠儲存整型(integer)、浮點(float)、布林(boolean)、字典(dictionaries)和列表(list)等資料型別。

rosparam set            設定引數
rosparam get            獲取引數
rosparam load           從檔案中載入引數
rosparam dump           向檔案中轉儲引數
rosparam delete         刪除引數
rosparam list           列出引數名
/rosdistro
/roslaunch/uris/host_nxt__43407
/rosversion
/run_id
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r

五、使用rqt_console和roslaunch

rqt_console連線到了ROS的日誌框架,以顯示節點的輸出資訊。

rqt_logger_level允許我們在節點執行時改變輸出資訊的詳細級別,包括Debug、Info、Warn和Error`。

$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level

roslaunch可以用來啟動定義在launch(啟動)檔案中的節點。

roslaunch [package] [filename.launch]

$ cd ~/catkin_ws
$ source devel/setup.bash
$ roscd beginner_tutorials
然後建立一個launch目錄:
$ mkdir launch
$ cd launch

現在一起建立一個名為turtlemimic.launch的launch檔案並複製貼上以下內容進去:

切換行號顯示

   1 <launch>
   2 
   3   <group ns="turtlesim1">
   4     <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
   5   </group>
   6 
   7   <group ns="turtlesim2">
   8     <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
   9   </group>
  10 
【此處我們建立了兩個分組,並以名稱空間(namespace)標籤來區分,其中一個名為turtulesim1,另一個名為turtlesim2,兩個分組中都有相同的名為sim的turtlesim節點。這樣可以讓我們同時啟動兩個turtlesim模擬器,而不會產生命名衝突。】
  11   <node pkg="turtlesim" name="mimic" type="mimic">
  12     <remap from="input" to="turtlesim1/turtle1"/>
  13     <remap from="output" to="turtlesim2/turtle1"/>
  14   </node>
  15 
【在這裡我們啟動模仿節點,話題的輸入和輸出分別重新命名為turtlesim1和turtlesim2,這樣就可以讓turtlesim2模仿turtlesim1了。】
  16 </launch>
啟動
roslaunch beginner_tutorials turtlemimic.launch
傳送資料
$ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

rosedrosbash套件的一部分。利用它可以直接通過軟體包名編輯包中的檔案,而無需鍵入完整路徑。

rosed是rosbash套件的一部分。利用它可以直接通過軟體包名編輯包中的檔案,而無需鍵入完整路徑。