Controller 自定义控制器在全局启动文件中启动时死亡

Controller 自定义控制器在全局启动文件中启动时死亡,controller,config,ros,robotics,robot,Controller,Config,Ros,Robotics,Robot,我有一个定制机器人,由不同的节点和控制器组成,这些节点和控制器以子包的形式组织: . ├── project │   ├── launch ├── project_description │   └── urdf ├── project_hardware │   ├── config │   ├── launch ├── project_logic │   ├── launch ├── project_networking └── project_vision 我实现了一个定制的LedCont

我有一个定制机器人,由不同的节点和控制器组成,这些节点和控制器以子包的形式组织:

.
├── project
│   ├── launch
├── project_description
│   └── urdf
├── project_hardware
│   ├── config
│   ├── launch
├── project_logic
│   ├── launch
├── project_networking
└── project_vision
我实现了一个定制的
LedController
,以按照通常的ROS方法(即定制接口、手柄、控制器、消息)控制硬件上的一些LED

当我启动
硬件时,控制器工作正常(即通过相应主题将LED设置为给定值)。启动位于
项目\u硬件中的

但是,当我使用全局启动文件robot.launch启动所有东西时,
LedController
会死掉(同时也会杀死
controller\u manager
,这反过来又会杀死我的所有其他控制器)。launch
仅位于另一个名为
project
的子包中

当我将Led部件从
hardware.xml
移动到一个单独的文件(
Led.launch
)并首先启动
robot.launch
,然后启动
Led.launch
时,一切正常。当我在
robot.launch
中包含
led.launch
(见下文)时,它不工作

由于工作和不工作之间的区别只是包括
led.launch
或通过
roslaunch
手动启动,我没有调试的想法。我很感激任何提示,告诉我进一步的调试步骤,并最终解决我的问题。如果你需要进一步的信息,请告诉我

我的
硬件。启动

<launch>
  <arg name="nodelet_manager" default="nodelet_manager" />
  <node name="$(arg nodelet_manager)" pkg="nodelet" type="nodelet" args="manager" />

  <param name="robot_description" command="$(find xacro)/xacro.py '$(find project_description)/urdf/ccs_robot.xacro'" />

  <include file="$(find project_hardware)/launch/hardware.xml">
    <arg name="nodelet_manager" value="$(arg nodelet_manager)" />
  </include>
</launch>
<launch>
  <arg name="nodelet_manager" default="nodelet_manager" />
  <node name="$(arg nodelet_manager)" pkg="nodelet" type="nodelet" args="manager" />

  <param name="robot_description" command="$(find xacro)/xacro.py '$(find project_description)/urdf/ccs_robot.xacro'" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>

  <include file="$(find project_vision)/launch/feature_extraction.xml">
    <arg name="nodelet_manager" value="$(arg nodelet_manager)" />
  </include>
  <include file="$(find project_logic)/launch/demo_app.xml" />
  <include file="$(find project_logic)/launch/logic.xml">
    <arg name="nodelet_manager" value="$(arg nodelet_manager)" />
  </include>
  <include file="$(find project_hardware)/launch/hardware.xml">
    <arg name="nodelet_manager" value="$(arg nodelet_manager)" />
  </include>
  <!--<include file="$(find project_hardware)/launch/led.launch" />-->
  <include file="$(find project_networking)/launch/monitoring.launch" />
</launch>
我的
机器人。启动

<launch>
  <arg name="nodelet_manager" default="nodelet_manager" />
  <node name="$(arg nodelet_manager)" pkg="nodelet" type="nodelet" args="manager" />

  <param name="robot_description" command="$(find xacro)/xacro.py '$(find project_description)/urdf/ccs_robot.xacro'" />

  <include file="$(find project_hardware)/launch/hardware.xml">
    <arg name="nodelet_manager" value="$(arg nodelet_manager)" />
  </include>
</launch>
<launch>
  <arg name="nodelet_manager" default="nodelet_manager" />
  <node name="$(arg nodelet_manager)" pkg="nodelet" type="nodelet" args="manager" />

  <param name="robot_description" command="$(find xacro)/xacro.py '$(find project_description)/urdf/ccs_robot.xacro'" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>

  <include file="$(find project_vision)/launch/feature_extraction.xml">
    <arg name="nodelet_manager" value="$(arg nodelet_manager)" />
  </include>
  <include file="$(find project_logic)/launch/demo_app.xml" />
  <include file="$(find project_logic)/launch/logic.xml">
    <arg name="nodelet_manager" value="$(arg nodelet_manager)" />
  </include>
  <include file="$(find project_hardware)/launch/hardware.xml">
    <arg name="nodelet_manager" value="$(arg nodelet_manager)" />
  </include>
  <!--<include file="$(find project_hardware)/launch/led.launch" />-->
  <include file="$(find project_networking)/launch/monitoring.launch" />
</launch>
My
led.launch
包含从
hardware.xml移动的led部件:

<launch>
  <rosparam file="$(find project_hardware)/config/led_controller.yaml" />
  <node name="led_controller_spawner" pkg="controller_manager" type="spawner" args="led_controller --shutdown-timeout 2" />
</launch>

基于启动文件,一切似乎都很好,但我认为您的错误是,在编写节点时,您使用相同的值初始化了两个不同代码的节点,当一个启动时,停止另一个,因此所有节点都将断开(但不确定是否会看到错误)


您可以尝试向node.init添加
ros::init\u options::AnonymousName
,然后重试。

谢谢您的回答。我试试看。