參考資料:
https://www.icourse163.org/course/ISCAS-1002580008?tid=1003713012 //中國大學MOOC
https://www.bilibili.com/video/av23401751 //B站
《ROS操作系統入門講義》PDF下載
鏈接:https://pan.baidu.com/s/1OCja2WLDRnjYXMrpnZ3-sQ
提取碼:mziy
第三章 ROS通信架構(一)
1. 節點node:ROS世界中最小的進程單元
- 程序角度:可執行文件被執行,加載至內存,生成node
- 功能角度:一個node復制機器人的一個單獨功能
注:可執行文件是靜態的,節點node是動態的
2. 節點管理器master
- node首先在master處進行注冊,之后master會將該node納入整個ROS程序中
- node之間的通信也是先由master進行“牽線”,才能兩兩的進行點對點通信
3. 啟動master和node

- roscore //啟動master、rosout和parameter server
- rosrun pkg_name node_name //rosrun尋找包pkg_name下名為node_name的可執行程序
注:rosrun命令的詳細用法 rosrun [--prefix cmd] [--debug] pkg_name node_name [ARGS]
示例:rosrun --prefix 'gdb -ex run --args' pkg_name node_name //在GDB下運行ros程序

注:通過 rosnode help 查看命令幫助
4. launch文件:一次性把多個節點按照預先的配置啟動起來
(1)用法:roslaunch pkg_name file_name.launch //若master沒有啟動,那么roslaunch就會首先自動啟動master
(2)寫法與格式:xml格式規范

(3)示例
- 啟動rospy_tutorials軟件包中單個節點talker

- Ros-Academy-for-Beginners 中的 robot_sim_demo:啟動gazebo模擬器,導入參數內容,加入機器人模型

5. 話題topic //適用於實時性、周期性的消息,如傳感器數據
(1)ROS的四大通信方式
- Topic 話題 //節點對節點的單向通信;異步通信
- Service 服務 //請求-查詢式的雙向通信模型;同步通信
- Parameter Server 參數服務器 //使用數據字典維護全局共享參數
- Actionlib 動作庫 //請求-響應-反饋式雙向通信
(2)話題的建立過程(單向)

- publisher節點和subscriber節點都要到節點管理器進行注冊
- publisher會發布topic
- subscriber在master的指揮下會訂閱該topic,從而建立起sub-pub之間的直接通信
注:
- 異步指的是發布者和訂閱者不關心對方的狀態,各司其職,不存在協同工作
- topic發送時調用publish()方法,發送完成立即返回,不用等待反饋
- subscriber通過回調函數的方式來處理消息
- topic可以同時有多個subscribers,也可以同時有多個publishers;ROS中這樣的例子有:/rosout、/tf等等
(3)topic常用命令

注:使用 rostopic help 或 rostopic command -h 查看具體用法
6. Message(.msg) //topic的數據格式標准,利用 rostopic type topic_name 進行查看
(1)msg的基本數據類型:bool、int8、int16、int32、int64(以及uint)、float、float64、string、time、duration、header、可變長數組array[ ]、固定長度數組array[C]
示例:sensor_msgs/msg/image.msg

注:可以將msg類比為“類”,而每次發布的具體內容為“對象”
(2)rosmsg的常用命令

