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>
強制終止。
沒有留言:
張貼留言