首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

ROS C++ 開發入門:編寫發布者與訂閱者節點完整指南

     編輯:關於C++

ROS (Robot Operating System) 採用發布/訂閱模式實現節點間通信。本文以經典的 beginner_tutorials 功能包為例,詳細講解如何使用 C++ 編寫發布者與訂閱者節點,並通過編譯運行驗證通信流程。

一、創建發布者節點

  1. 在 beginner_tutorials 功能包的 src 目錄下創建 talker.cpp。
  2. 編寫發布邏輯:初始化節點、創建發布者、循環發布消息。

二、創建訂閱者節點

  1. 同目錄下創建 listener.cpp。
  2. 編寫訂閱邏輯:初始化節點、創建訂閱者、註冊回調函數、進入 ros::spin() 循環。

三、修改 CMakeLists.txt 添加可執行目標

# 添加 talker 可執行文件
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)

# 添加 listener 可執行文件
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener beginner_tutorials_generate_messages_cpp)

關鍵點:add_dependencies 確保消息頭文件在編譯前已生成,避免找不到自定義消息類型的編譯錯誤。

四、編譯工作空間

cd ~/catkin_ws
catkin_make

編譯成功後,可執行文件默認生成在 ~/catkin_ws/devel/lib/beginner_tutorials/ 目錄下。

五、環境配置與運行驗證

打開三個終端,分別執行以下命令(確保已 source devel/setup.bash):

終端 1:啟動 ROS Master

roscore

終端 2:運行發布者

rosrun beginner_tutorials talker

終端 3:運行訂閱者

rosrun beginner_tutorials listener

六、預期輸出與驗證

  • talker 終端循環打印發布的消息內容(如 hello world [計數])。
  • listener 終端同步打印接收到的消息,證明發布/訂閱通信鏈路暢通。

七、常見問題排查

現象可能原因解決方案
編譯報錯找不到消息頭文件缺少 add_dependencies 或未運行 catkin_make 生成消息補全依賴並重新編譯
運行時提示 "Unable to register with master node"roscore 未啟動或網絡配置問題先啟動 roscore,檢查 ROS_MASTER_URI 和 ROS_IP
訂閱者無輸出話題名稱不一致或隊列大小設置過小核對話題名,增大隊列

八、進階提示

  • 使用 rostopic list、rostopic echo /chatter 查看話題與消息內容。
  • 使用 rqt_graph 可視化節點拓撲關係。
  • 生產環境建議採用 catkin_tools 替代 catkin_make 實現隔離構建。

掌握發布/訂閱模式是 ROS 開發的基石,後續可進一步學習服務通信、動作庫、節點佈管理等進階主題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved