[TOC]node
程序包,裏面包含節點Node、ROS程序庫、數據集、配置文件bash
程序包的配置文件,即描述程序包的相關信息,包括其名字、版本、功能簡述、依賴關係服務器
代碼倉庫網絡
計算圖,ROS在點對點網絡裏整合並處理數據的過程。圖中包含的基本概念:節點、主機、參數服務器、消息、服務、話題、數據包。數據結構
節點,一個機器人控制系統由多個節點組成,每一個節點控制不一樣的部分。好比一個機器人有兩個節點,一個是傳感器節點,專門負責接收傳感器數據,另外一個是控制節點,專門負責控制機器人做出某些動做。分佈式
主機,節點管理器,功能是對於計算圖中各個元素進行名字註冊(register)和檢索,沒有主機,節點之間就不能找到彼此則沒法進行通訊。工具
參數服務器,是主機的一部分,容許數據經過鍵的方式存儲ui
消息,節點之間經過傳遞消息交流,消息是一種數據結構spa
話題,消息的傳輸使用的是發佈\訂閱的機制。一個話題可理解爲只針對某種消息,節點發送消息則是將該消息發佈到其對應的話題上,只有那些訂閱該話題的節點才能接收到這個消息。一個話題可能有多個訂閱者和發佈者,通常他們互相是不知道(也不需知道)對方的存在,以達到解耦(decouple)的效果。.net
【配圖,節點發送消息的過程】
服務,儘管"發佈\訂閱"模型很是靈活,但它是多對多、單向傳輸的,不適用於"發出請求\返回響應"方式的交互,然而這種交互在分佈式系統中十分常見。所以 "請求\響應"經過服務來實現。節點須要提供的信息有:所使用服務的名字以及使用服務的客戶,將這些信息打包成請求,發送出去以後等待答覆。
數據包,存儲一段時間內ROS的消息數據
至關於ROS中的stdout/stderr
主機+Rosout+參數服務器
catkin工做空間:
建立catkin工做空間,在須要建立的目錄下輸入命令:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make
source devel/setup.bash
echo $ROS_PACKAGE_PATH
能夠看到當前工做空間的路徑在最前面 【注:roscd, rospack等ROS工具只能針對那些路徑已包含在環境變量ROS_PACKAGE _PATH中的程序包】
cd ~/catkin_ws/src catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
(注意要先將當前工做空間的路徑添加到環境變量中,即前面提到的source命令,這樣以後執行rospack命令纔不會報錯提示找不到beginner_tutorials這個包)
rospack depends1 beginner_tutorials
輸出結果
std_msgs rospy roscpp
對於程序包A的一級依賴程序包B,其自身也依賴一些其它的程序包C,這些程序包C是A的間接依賴
rospack depends1 rospy
可看到rospy的一級依賴
rospack depend beginner_tutorials
遞歸檢測出A的全部的依賴包(包括一級和間接)
用catkin_make,可認爲是在CMake標準工做流程中依次調用了cmake和make
在工做空間中使用catkin_make 在工做空間的根目錄下,輸入
catkin_make
該命令會編譯位於目錄 catkin_ws/src 中的全部程序包
更多關於catkin_ make的資料: http://wiki.ros.org/catkin/commands/catkin_make
每一個節點是一個可執行文件
節點之間經過話題來通訊
使用rosrun
rosrun ros_pkg ros_pkg_node
使用rosnode list
rosnode list
使用rostopic echo
rostopic echo [topic]
使用rqt_graph
rosrun rqt_graph rqt_graph
使用rqt_plot
rosrun rqt_plot rqt_plot
首先運行turtlesim包中的turtlesim_node節點[海龜本體]
rosrun turtlesim turtlesim_node
另外打開一個終端
rosrun turtlesim turtle_teleop_key
在新終端中打開rqt_graph,可觀察到這兩個節點經過話題cmmd _vel來通訊
rosrun rqt_graph rqt_graph
在新終端中, 列出當前的topic
rostopic list
列出該話題的消息類型
rostopic type /turtle1/cmd_vel
列出該消息類型的詳細數據類型
rosmsg show geometry_msgs/Twist
發佈消息到話題cmd_vel,告訴turtlesim _node,使其以2.0大小的線速度和1.8大小的角速度移動
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
命令中的-1表示rostopic發佈一條信息後立刻退出,也能夠設置爲循環發送:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
該信息以1Hz的穩定頻率來發送,使turtle保持移動狀態
這時能夠觀察rqt_graph
發現多了一個節點:rostopic發佈器節點,一樣地,該節點與turtlesim_node節點[海龜本體] 經過話題cmd _vel通訊
使用roslaunch同時運行多個節點,經過編寫launch文件來配置各個節點
首先保證環境變量中是否有catkin_ws工做空間的路徑
echo $ROS_PACKAGE_PATH
若無,則進入該工做空間的根目錄,執行
source devel/setup.bash
以後在任意目錄下均可以進入以前建立的程序包
roscd beginner_tutorials
新建launch文件夾,在裏面建立launch文件
mkdir launch gedit turtlemimic.launch
拷貝如下launch文件的內容: http://wiki.ros.org/cn/ROS/Tutorials/UsingRqtconsoleRoslaunch
ROS編寫消息發佈器和訂閱器
相關API格式
https://blog.csdn.net/junshen1314/article/details/44701693 更詳細的解釋
[http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B)]