1

我只能单独运行一台相机

我正在关注此在此处输入链接描述

我需要同时运行两个摄像头

运行第二台摄像机时,输出:

[ INFO] [1550737732.951379947]: Initializing nodelet with 4 worker threads.
[FATAL] [1550737734.651595532]: Failed to load nodelet '/camera/rgb_rectify_mono` of type `image_proc/rectify` to manager `camera_nodelet_manager'
[camera/rgb_rectify_mono-4] process has died [pid 12535, exit code 255, cmd /opt/ros/indigo/lib/nodelet/nodelet load image_proc/rectify camera_nodelet_manager --no-bond image_mono:=rgb/image_mono image_rect:=rgb/image_rect_mono __name:=rgb_rectify_mono __log:=/home/turtlebot/.ros/log/4c3c5ce6-35a0-11e9-97f4-6c71d9e07c7b/camera-rgb_rectify_mono-4.log].
log file: /home/turtlebot/.ros/log/4c3c5ce6-35a0-11e9-97f4-6c71d9e07c7b/camera-rgb_rectify_mono-4*.log

openni.launch,这个文件会导致它们之间的冲突

<!-- Entry point for using OpenNI devices -->
<launch>

  <!-- "camera" should uniquely identify the device. All topics are pushed down
       into the "camera" namespace, and it is prepended to tf frame ids. -->
  <arg name="camera" default="camera" />
  <arg name="rgb_frame_id"   default="$(arg camera)_rgb_optical_frame" />
  <arg name="depth_frame_id" default="$(arg camera)_depth_optical_frame" />

  <!-- device_id can have the following formats:
         "B00367707227042B": Use device with given serial number
         "#1"              : Use first device found
         "2@3"             : Use device on USB bus 2, address 3
         "2@0"             : Use first device found on USB bus 2
    -->
  <arg name="device_id" default="#1" />

  <!-- By default, calibrations are stored to file://${ROS_HOME}/camera_info/${NAME}.yaml,
       where ${NAME} is of the form "[rgb|depth]_[serial#]", e.g. "depth_B00367707227042B".
       See camera_info_manager docs for calibration URL details. -->
  <arg name="rgb_camera_info_url"   default="" />
  <arg name="depth_camera_info_url" default="" />

  <!-- Use OpenNI's factory-calibrated depth->RGB registration? -->
  <arg name="depth_registration" default="false" />

  <!-- Arguments for remapping all device namespaces -->
  <arg name="rgb"                       default="rgb" />
  <arg name="ir"                        default="ir" />
  <arg name="depth"                     default="depth" />
  <arg name="depth_registered"          default="depth_registered" />
  <arg name="depth_registered_filtered" default="depth_registered" />
  <arg name="projector"                 default="projector" />

  <!-- Optionally suppress loading the driver nodelet and/or publishing the default tf
       tree. Useful if you are playing back recorded raw data from a bag, or are
       supplying a more accurate tf tree from calibration. -->
  <arg name="load_driver" default="true" />
  <arg name="publish_tf" default="true" />
  <!-- Processing Modules -->
  <arg name="rgb_processing"                  default="true"/>
  <arg name="ir_processing"                   default="true"/>
  <arg name="depth_processing"                default="true"/>
  <arg name="depth_registered_processing"     default="true"/>
  <arg name="disparity_processing"            default="true"/>
  <arg name="disparity_registered_processing" default="true"/>
  <arg name="hw_registered_processing"        default="true" />
  <arg name="sw_registered_processing"        default="true" />

  <!-- Disable bond topics by default -->
  <arg name="bond" default="false" /> <!-- DEPRECATED, use respawn arg instead -->
  <arg name="respawn" default="$(arg bond)" />

  <!-- Worker threads for the nodelet manager -->
  <arg name="num_worker_threads" default="4" />

  <!-- Push down all topics/nodelets into "camera" namespace -->
  <group ns="$(arg camera)">

    <!-- Start nodelet manager in top-level namespace -->
    <arg name="manager" value="$(arg camera)_nodelet_manager" />
    <arg name="debug" default="false" /> <!-- Run manager in GDB? -->
    <include file="$(find rgbd_launch)/launch/includes/manager.launch.xml">
      <arg name="name"                value="$(arg manager)" />
      <arg name="debug"               value="$(arg debug)" />
      <arg name="num_worker_threads"  value="$(arg num_worker_threads)" />
    </include>

    <!-- Load driver -->
    <include if="$(arg load_driver)"
         file="$(find openni_launch)/launch/includes/device.launch.xml">
      <!-- Could really use some syntactic sugar for this -->
      <arg name="manager"               value="$(arg manager)" />
      <arg name="device_id"             value="$(arg device_id)" />
      <arg name="rgb_frame_id"          value="$(arg rgb_frame_id ...

freenect.launch

<!-- Entry point for using OpenNI devices -->
<launch>

  <!-- "camera" should uniquely identify the device. All topics are pushed down
       into the "camera" namespace, and it is prepended to tf frame ids. -->
  <arg name="camera" default="camera" />
  <arg name="rgb_frame_id"   default="$(arg camera)_rgb_optical_frame" />
  <arg name="depth_frame_id" default="$(arg camera)_depth_optical_frame" />

  <arg name="data_skip" default="0" />

  <!-- device_id can have the following formats:
         "B00367707227042B": Use device with given serial number
         "#1"              : Use first device found
    -->
  <arg name="device_id" default="#1" />

  <!-- By default, calibrations are stored to file://${ROS_HOME}/camera_info/${NAME}.yaml,
       where ${NAME} is of the form "[rgb|depth]_[serial#]", e.g. "depth_B00367707227042B".
       See camera_info_manager docs for calibration URL details. -->
  <arg name="rgb_camera_info_url"   default="" />
  <arg name="depth_camera_info_url" default="" />

  <!-- Use OpenNI's factory-calibrated depth->RGB registration? -->
  <arg name="depth_registration" default="false" />

  <!-- Arguments for remapping all device namespaces -->
  <arg name="rgb"              default="rgb" />
  <arg name="ir"               default="ir" />
  <arg name="depth"            default="depth" />
  <arg name="depth_registered" default="depth_registered" />
  <arg name="projector"        default="projector" />

  <!-- Optionally suppress loading the driver nodelet and/or publishing the default tf
       tree. Useful if you are playing back recorded raw data from a bag, or are
       supplying a more accurate tf tree from calibration. -->
  <arg name="load_driver" default="true" />
  <arg name="publish_tf" default="true" />
  <!-- Processing Modules -->
  <arg name="rgb_processing"                  default="true"/>
  <arg name="ir_processing"                   default="true"/>
  <arg name="depth_processing"                default="true"/>
  <arg name="depth_registered_processing"     default="true"/>
  <arg name="disparity_processing"            default="true"/>
  <arg name="disparity_registered_processing" default="true"/>
  <arg name="hw_registered_processing"        default="true" />
  <arg name="sw_registered_processing"        default="true" />

  <!-- Disable bond topics by default -->
  <arg name="bond" default="false" /> <!-- DEPRECATED, use respawn arg instead -->
  <arg name="respawn" default="$(arg bond)" />

  <!-- Worker threads for the nodelet manager -->
  <arg name="num_worker_threads" default="4" />

  <!-- enable libfreenect debug logging -->
  <arg name="libfreenect_debug" default="false" />

  <!-- enable diagnostics support for freenect_camera -->
  <arg name="enable_rgb_diagnostics" default="false" />
  <arg name="enable_ir_diagnostics" default="false" />
  <arg name="enable_depth_diagnostics" default="false" />
  <arg name="diagnostics_max_frequency" default="30.0" />
  <arg name="diagnostics_min_frequency" default="30.0" />
  <arg name="diagnostics_tolerance" default="0.05" />
  <arg name="diagnostics_window_time" default="5.0" />

  <!-- Push down all topics/nodelets into "camera" namespace -->
  <group ns="$(arg camera)">

    <!-- Start nodelet manager in provided namespace -->
    <arg name="manager" value="$(arg camera)_nodelet_manager" />
    <arg name="debug" default="false" /> <!-- Run manager in GDB? -->
    <include file="$(find rgbd_launch)/launch/includes/manager.launch.xml">
      <arg name="name"                value="$(arg manager)" />
      <arg name="debug"               value="$(arg debug)" />
      <arg name="num_worker_threads"  value="$(arg num_worker_threads)" />
    </include>

    <!-- Load driver -->
    <include if="$(arg load_driver)"
         file="$(find freenect_launch)/launch/includes/device.launch.xml">
      <!-- Could really use some syntactic sugar for this -->
      <arg name="manager"                   value="$(arg manager)" />
      <arg name="device_id"                 value="$(arg device_id)" />
      <arg name="rgb_frame_id"              value="$(arg rgb_frame_id)" />
      <arg name="depth_frame_id"            value="$(arg depth_frame_id)" />
      <arg name="rgb_camera_info_url"       value="$(arg rgb_camera_info_url)" />
      <arg name="depth_camera_info_url"     value="$(arg depth_camera_info_url)" />
      <arg name="depth_registration"        value="$(arg depth_registration)" />
      <arg name="data_skip"                 value="$(arg data_skip)" />
      <arg name="rgb"                       value="$(arg rgb)" />
      <arg name="ir"                        value="$(arg ir)" />
      <arg name="depth"                     value="$(arg depth)" />
      <arg name="depth_registered"          value="$(arg depth_registered)" />
      <arg name="projector"                 value="$(arg projector)" />
      <arg name="respawn"                   value="$(arg respawn)" />
      <arg name="libfreenect_debug"         value="$(arg libfreenect_debug)" />
      <arg name="enable_rgb_diagnostics"    value="$(arg enable_rgb_diagnostics)" />
      <arg name="enable_ir_diagnostics"     value="$(arg enable_ir_diagnostics)" />
      <arg name="enable_depth_diagnostics"  value="$(arg enable_depth_diagnostics)" />
      <arg name="diagnostics_max_frequency" value="$(arg diagnostics_max_frequency)" />
      <arg name="diagnostics_min_frequency" value="$(arg diagnostics_min_frequency)" />
      <arg name="diagnostics_tolerance"     value="$(arg diagnostics_tolerance)" />
      <arg name="diagnostics_window_time"   value="$(arg diagnostics_window_time)" />
    </include>

    <!-- Load standard constellation of processing nodelets -->
    <include file="$(find rgbd_launch)/launch/includes/processing.launch.xml">
      <arg name="manager"                         value="$(arg manager)" />
      <arg name="rgb"                             value="$(arg rgb)" />
      <arg name="ir"                              value="$(arg ir)" />
      <arg name="depth"                           value="$(arg depth)" />
      <arg name="depth_registered"                value="$(arg depth_registered)" />
      <arg name="projector"                       value="$(arg projector)" />
      <arg name="respawn"                         value="$(arg respawn)" />
      <arg name="rgb_processing"                  value="$(arg rgb_processing)" />
      <arg name="ir_processing"                   value="$(arg ir_processing)" />
      <arg name="depth_processing"                value="$(arg depth_processing)" />
      <arg name="depth_registered_processing"     value="$(arg depth_registered_processing)" />
      <arg name="disparity_processing"            value="$(arg disparity_processing)" />
      <arg name="disparity_registered_processing" value="$(arg disparity_registered_processing)" />
      <arg name="hw_registered_processing"        value="$(arg hw_registered_processing)" />
      <arg name="sw_registered_processing"        value="$(arg sw_registered_processing)" />
    </include>

  </group> <!-- camera -->

  <!-- Load reasonable defaults for the relative pose between cameras -->
  <include if="$(arg publish_tf)"
       file="$(find rgbd_launch)/launch/kinect_frames.launch">
    <arg name="camera" value="$(arg camera)" />
  </include>

</launch>

我正在运行 Kinect

roslaunch freenect_launch freenect.launch

我正在运行华硕和 Kinect

roslaunch openni_launch openni.launch

将华硕终端中的第二个摄像头作为第二个摄像头运行后,输出:

[ERROR] [1550795336.052843598]: Failed to find nodelet with name '/camera/disparity_registered_hw' to unload

此外,Kinect 的输出变为:

[FATAL] [1550795336.061536430]: Failed to unload nodelet '/camera/disparity_registered_hw` from manager `camera_nodelet_manager'

请帮我

先感谢您

4

1 回答 1

1

我建议尝试在自己的命名空间中启动每个节点。查看启动文件,您应该能够运行:
roslaunch freenect_launch freenect.launch camera:=cam_kinect

roslaunch openni_launch openni.launch camera:=cam_asus

这应该避免与节点名称和主题名称冲突。

于 2019-03-03T14:52:47.157 回答