将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中

This commit is contained in:
zhangshixiang
2025-05-02 23:45:43 +08:00
parent 5668310401
commit 80380d1f4b
4 changed files with 32 additions and 4036 deletions

View File

@@ -12,6 +12,8 @@ def start_backend(
controllers_config: dict = {}, controllers_config: dict = {},
bridges=[], bridges=[],
without_host: bool = False, without_host: bool = False,
visual: str = "None",
resources_mesh_config: dict = {},
**kwargs **kwargs
): ):
if backend == "ros": if backend == "ros":
@@ -29,7 +31,7 @@ def start_backend(
backend_thread = threading.Thread( backend_thread = threading.Thread(
target=main if not without_host else slave, target=main if not without_host else slave,
args=(devices_config, resources_config, graph, controllers_config, bridges), args=(devices_config, resources_config, graph, controllers_config, bridges, visual, resources_mesh_config),
name="backend_thread", name="backend_thread",
daemon=True, daemon=True,
) )

View File

@@ -184,6 +184,7 @@ def main():
signal.signal(signal.SIGINT, _exit) signal.signal(signal.SIGINT, _exit)
signal.signal(signal.SIGTERM, _exit) signal.signal(signal.SIGTERM, _exit)
mqtt_client.start() mqtt_client.start()
args_dict["resources_mesh_config"] = {}
if args_dict["visual"] != "None": if args_dict["visual"] != "None":
if args_dict["visual"] == "rviz": if args_dict["visual"] == "rviz":
@@ -192,28 +193,9 @@ def main():
enable_rviz=False enable_rviz=False
resource_visualization = ResourceVisualization(devices_and_resources, args_dict["resources_config"] ,enable_rviz=enable_rviz) resource_visualization = ResourceVisualization(devices_and_resources, args_dict["resources_config"] ,enable_rviz=enable_rviz)
# 如果没有初始化则初始化ros并创建一个多线程执行器 args_dict["resources_mesh_config"] = resource_visualization.resource_model
# 在main_slave_run.py中也会初始化ros并创建一个多线程执行器 # 将joint_republisher和resource_mesh_manager添加进 main_slave_run.py中
# 所以这里需要判断是否已经初始化,如果已经初始化,则不重复初始化
if not rclpy.ok():
rclpy.init(args = ["--log-level", "debug"],)
executor = rclpy.__executor
if not executor:
executor = rclpy.__executor = MultiThreadedExecutor()
resource_mesh_manager = ResourceMeshManager(
resource_visualization.resource_model,
args_dict["resources_config"],
resource_tracker= DeviceNodeResourceTracker(),
device_id = 'resource_mesh_manager',
)
joint_republisher = JointRepublisher(
'joint_republisher',
DeviceNodeResourceTracker()
)
rclpy.__executor.add_node(resource_mesh_manager)
rclpy.__executor.add_node(joint_republisher)
start_backend(**args_dict) start_backend(**args_dict)
server_thread = threading.Thread(target=start_server) server_thread = threading.Thread(target=start_server)
server_thread.start() server_thread.start()

View File

@@ -6,6 +6,9 @@ import time
from typing import Optional, Dict, Any, List from typing import Optional, Dict, Any, List
import rclpy import rclpy
from unilabos.ros.nodes.presets.joint_republisher import JointRepublisher
from unilabos.ros.nodes.presets.resource_mesh_manager import ResourceMeshManager
from unilabos.ros.nodes.resource_tracker import DeviceNodeResourceTracker
from unilabos_msgs.msg import Resource # type: ignore from unilabos_msgs.msg import Resource # type: ignore
from unilabos_msgs.srv import ResourceAdd, SerialCommand # type: ignore from unilabos_msgs.srv import ResourceAdd, SerialCommand # type: ignore
from rclpy.executors import MultiThreadedExecutor from rclpy.executors import MultiThreadedExecutor
@@ -45,15 +48,15 @@ def main(
graph: Optional[Dict[str, Any]] = None, graph: Optional[Dict[str, Any]] = None,
controllers_config: Dict[str, Any] = {}, controllers_config: Dict[str, Any] = {},
bridges: List[Any] = [], bridges: List[Any] = [],
visual: str = "None",
resources_mesh_config: dict = {},
args: List[str] = ["--log-level", "debug"], args: List[str] = ["--log-level", "debug"],
discovery_interval: float = 5.0, discovery_interval: float = 5.0,
) -> None: ) -> None:
"""主函数""" """主函数"""
if not rclpy.ok():
rclpy.init(args=args) rclpy.init(args=args)
executor = rclpy.__executor executor = rclpy.__executor = MultiThreadedExecutor()
if not executor:
executor = rclpy.__executor = MultiThreadedExecutor()
# 创建主机节点 # 创建主机节点
host_node = HostNode( host_node = HostNode(
"host_node", "host_node",
@@ -65,6 +68,21 @@ def main(
discovery_interval, discovery_interval,
) )
if visual != "None":
resource_mesh_manager = ResourceMeshManager(
resources_mesh_config,
resources_config,
resource_tracker= DeviceNodeResourceTracker(),
device_id = 'resource_mesh_manager',
)
joint_republisher = JointRepublisher(
'joint_republisher',
DeviceNodeResourceTracker()
)
executor.add_node(resource_mesh_manager)
executor.add_node(joint_republisher)
thread = threading.Thread(target=executor.spin, daemon=True, name="host_executor_thread") thread = threading.Thread(target=executor.spin, daemon=True, name="host_executor_thread")
thread.start() thread.start()

File diff suppressed because it is too large Load Diff