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>
Myled.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
,然后重试。谢谢您的回答。我试试看。