ROS1 roscore 介紹
📌 roscore 是什麼?
在 ROS1 中,roscore 是 ROS 主節點 (Master),負責管理 節點間的通訊。它相當於 ROS 系統的 中央伺服器,用來協調所有的 ROS 節點。
🚀 roscore 的作用
- 啟動 ROS Master (
rosmaster),用於管理節點與話題 (topics)。 - 啟動 ROS 參數伺服器 (
rosparam),用於儲存全局參數。 - 啟動 ROS 記錄與日誌系統 (
rosout),提供日誌記錄與錯誤回報機制。
🔧 roscore 啟動後產生的 Topics
執行 roscore 後,使用以下指令檢視 系統內建的話題 (topics):
常見的 系統內建 ROS 話題:
| Topic 名稱 | 類型 (Message Type) | 功能 |
|---|---|---|
/rosout | rosgraph_msgs/Log | 記錄 ROS 節點的日誌與錯誤訊息 |
/rosout_agg | rosgraph_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
啟動後,會看到類似輸出:
📌 2. 查詢目前話題
範例輸出:
進一步檢視 /rosout 訊息格式:
輸出:
檢視訊息內容:
📌 3. 查詢參數伺服器
roscore 會自動啟動 參數伺服器,可使用 rosparam 操作:
輸出:
讀取 ROS 參數:
輸出:
📌 4. 使用 Python API 呼叫 ROS Master
可以使用 xmlrpc.client 直接呼叫 ROS Master API:
📌 5. 查詢目前運行中的節點
範例輸出
查詢 /rosout 節點資訊:
🔎 roscore 相關 API 與指令總結
| 功能 | 指令 / API | 用途 |
|---|---|---|
| 啟動 ROS Master | roscore | 啟動 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 節點的日誌。
✅ 可以透過 rostopic、rosnode、rosparam 來檢查系統狀態。
✅ 也可以使用 Python XMLRPC API 來查詢 ROS Master 狀態。
🚀 這些工具和指令是管理 ROS 系統的關鍵,確保你的機器人應用運行順暢! 🚀
強制停止 ros node command
$rosnode kill -a
| 方法 | 使用場景 | 指令 |
|---|---|---|
rosnode kill | 正常關閉特定節點 | rosnode kill /node_name |
Ctrl + C | 在終端手動運行 rosrun 或 roslaunch | Ctrl + C |
kill | 強制終止特定節點 | kill -9 <PID> |
pkill | 直接結束 Python 腳本 | pkill -f script.py |
killall | 關閉所有 ROS 節點 | killall -9 rosmaster |
如果你只是想停止單個節點,最好的方式是 rosnode kill。
如果節點無法關閉,可以使用 kill -9 <PID> 強制終止。
沒有留言:
張貼留言