welcom ! Handel home

2025年2月26日 星期三

ROS1 roscore 介紹 for rosmaster 核心功能

 ROS1 roscore 介紹

📌 roscore 是什麼?

ROS1 中,roscoreROS 主節點 (Master),負責管理 節點間的通訊。它相當於 ROS 系統的 中央伺服器,用來協調所有的 ROS 節點。

🚀 roscore 的作用

  • 啟動 ROS Master (rosmaster),用於管理節點與話題 (topics)。
  • 啟動 ROS 參數伺服器 (rosparam),用於儲存全局參數。
  • 啟動 ROS 記錄與日誌系統 (rosout),提供日誌記錄與錯誤回報機制。

🔧 roscore 啟動後產生的 Topics

執行 roscore 後,使用以下指令檢視 系統內建的話題 (topics)

sh
rostopic list

常見的 系統內建 ROS 話題

Topic 名稱類型 (Message Type)功能
/rosoutrosgraph_msgs/Log記錄 ROS 節點的日誌與錯誤訊息
/rosout_aggrosgraph_msgs/Log聚合所有日誌資訊,提供更完整的記錄
/clock (可選)rosgraph_msgs/Clock提供 ROS 時間訊號,常用於模擬環境

這些話題由 roscore 內建的 rosout 節點 (/rosout) 自動建立。


📡 roscore API 與功能

roscore 本身不提供 API,但 roscore 啟動後,ROS Master (rosmaster) 會提供 ROS XMLRPC API,允許開發者查詢與操作 ROS 內部狀態。

🔹 ROS Master XMLRPC API

可透過 rosmaster 提供的 HTTP 服務 (默認 http://localhost:11311) 進行操作,主要函式包括:

函式名稱功能範例
registerPublisher註冊一個新的話題 (Topic)rospy.Publisher() 內部呼叫
registerSubscriber註冊一個新的訂閱者 (Subscriber)rospy.Subscriber() 內部呼叫
lookupNode查找 ROS 節點名稱rosnode info /node_name
getSystemState獲取目前的話題、服務與節點狀態rosservice call /rosapi/get_system_state
getTopicTypes獲取目前可用的話題類型rosservice call /rosapi/get_topic_types

💻 roscore 相關指令與 API 呼叫範例

📌 1. 啟動 roscore

sh
roscore

啟動後,會看到類似輸出:

bash
... logging to ~/.ros/log/... started roslaunch server http://localhost:34311/ ros_comm version 1.15.9 SUMMARY ======== PARAMETERS * /rosdistro: noetic * /rosversion: 1.15.9 NODES / rosout (rosout)

📌 2. 查詢目前話題

sh
rostopic list

範例輸出:

bash
/rosout /rosout_agg

進一步檢視 /rosout 訊息格式:

sh
rostopic type /rosout

輸出:

mathematica
rosgraph_msgs/Log

檢視訊息內容:

sh
rostopic echo /rosout

📌 3. 查詢參數伺服器

roscore 會自動啟動 參數伺服器,可使用 rosparam 操作:

sh
rosparam list

輸出:

bash
/rosdistro /rosversion

讀取 ROS 參數:

sh
rosparam get /rosversion

輸出:

1.15.9

📌 4. 使用 Python API 呼叫 ROS Master

可以使用 xmlrpc.client 直接呼叫 ROS Master API:

python
import xmlrpc.client # 連接到 ROS Master (默認在 http://localhost:11311) ros_master = xmlrpc.client.ServerProxy("http://localhost:11311") # 查詢 ROS 系統狀態 code, msg, system_state = ros_master.getSystemState("/test_client") print("Topics:", system_state[0]) # 發布中的話題 (publishers) print("Services:", system_state[2]) # 服務 (services)

📌 5. 查詢目前運行中的節點

sh
rosnode list

範例輸出

bash
/rosout

查詢 /rosout 節點資訊:

sh
rosnode info /rosout

🔎 roscore 相關 API 與指令總結

功能指令 / API用途
啟動 ROS Masterroscore啟動 ROS 核心服務
列出所有 ROS 話題rostopic list顯示所有可用的話題
查詢某個話題的型別rostopic type /rosout查詢某個話題的訊息格式
監聽話題數據rostopic echo /rosout監聽 /rosout 訊息
列出目前 ROS 節點rosnode list顯示所有已啟動的節點
查詢某個節點資訊rosnode info /rosout查看某個節點的詳細資訊
列出參數伺服器內的參數rosparam list查詢所有儲存的參數
讀取某個參數的值rosparam get /rosversion取得 ROS 版本參數
Python API (系統狀態)getSystemState("/test_client")取得話題、服務與節點資訊

📌 總結

roscore 是 ROS1 的核心服務,用來管理 節點、話題、服務與參數
✅ 它自動啟動 /rosout 話題來記錄 所有 ROS 節點的日誌
✅ 可以透過 rostopicrosnoderosparam 來檢查系統狀態。
✅ 也可以使用 Python XMLRPC API 來查詢 ROS Master 狀態。

🚀 這些工具和指令是管理 ROS 系統的關鍵,確保你的機器人應用運行順暢! 🚀


強制停止  ros node command

$rosnode kill -a

方法使用場景指令
rosnode kill正常關閉特定節點rosnode kill /node_name
Ctrl + C在終端手動運行 rosrunroslaunchCtrl + C
kill強制終止特定節點kill -9 <PID>
pkill直接結束 Python 腳本pkill -f script.py
killall關閉所有 ROS 節點killall -9 rosmaster

如果你只是想停止單個節點,最好的方式是 rosnode kill

如果節點無法關閉,可以使用 kill -9 <PID> 強制終止。 



沒有留言: