mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-17 13:01:12 +00:00
Initial commit
This commit is contained in:
68
unilabos/web/utils/ros_utils.py
Normal file
68
unilabos/web/utils/ros_utils.py
Normal file
@@ -0,0 +1,68 @@
|
||||
"""
|
||||
ROS 工具函数模块
|
||||
|
||||
提供处理 ROS 节点信息的辅助函数
|
||||
"""
|
||||
|
||||
import traceback
|
||||
from typing import Dict, Any
|
||||
|
||||
from unilabos.web.utils.action_utils import get_action_info
|
||||
|
||||
# 存储 ROS 节点信息的全局变量
|
||||
ros_node_info = {"online_devices": {}, "device_topics": {}, "device_actions": {}}
|
||||
|
||||
def get_ros_node_info() -> Dict[str, Any]:
|
||||
"""获取 ROS 节点信息,包括设备节点、发布的状态和动作
|
||||
|
||||
Returns:
|
||||
包含 ROS 节点信息的字典
|
||||
"""
|
||||
global ros_node_info
|
||||
# 触发更新以获取最新信息
|
||||
update_ros_node_info()
|
||||
return ros_node_info
|
||||
|
||||
|
||||
def update_ros_node_info() -> Dict[str, Any]:
|
||||
"""更新 ROS 节点信息,使用全局设备注册表
|
||||
|
||||
Returns:
|
||||
更新后的 ROS 节点信息字典
|
||||
"""
|
||||
global ros_node_info
|
||||
result = {"registered_devices": {}, "device_topics": {}, "device_actions": {}}
|
||||
|
||||
try:
|
||||
from unilabos.ros.nodes.base_device_node import registered_devices
|
||||
|
||||
for device_id, device_info in registered_devices.items():
|
||||
# 设备基本信息
|
||||
result["registered_devices"][device_id] = {
|
||||
"node_name": device_info["node_name"],
|
||||
"namespace": device_info["namespace"],
|
||||
"uuid": device_info["uuid"],
|
||||
}
|
||||
|
||||
# 设备话题(状态)信息
|
||||
result["device_topics"][device_id] = {
|
||||
k: {
|
||||
"type_name": v.msg_type.__module__ + "." + v.msg_type.__name__,
|
||||
"timer_period": v.timer_period,
|
||||
"topic_path": device_info["base_node_instance"].namespace + "/" + v.name,
|
||||
}
|
||||
for k, v in device_info["status_publishers"].items()
|
||||
}
|
||||
|
||||
# 设备动作信息
|
||||
result["device_actions"][device_id] = {
|
||||
k: get_action_info(v, k)
|
||||
for k, v in device_info["actions"].items()
|
||||
}
|
||||
# 更新全局变量
|
||||
ros_node_info = result
|
||||
except Exception as e:
|
||||
print(f"更新ROS节点信息出错: {e}")
|
||||
traceback.print_exc()
|
||||
|
||||
return result
|
||||
Reference in New Issue
Block a user