ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

Camera pose calibration: no request callback

asked 2011-08-22 04:57:50 -0500

Sébastien Ducatteeuw gravatar image

updated 2016-10-24 09:10:23 -0500

ngrennan gravatar image

I am trying to do a camera pose calibration using multiple cameras. The camera_pose_calibration package in our setup with two Prosilica cameras is running pretty good (depending on the network (1Gbps), I sometimes receive the "Couldn't get measurement in interval" message). Unfortunately, when I try the same thing with the rectified images (RGB mono) of two kinects, the pose calibration is never capturing a calibration sample.

This is the current setup:

kinect2 on miniitx2 (Ubuntu 10.04 with ROS Diamondback)
kinect3 on miniitx3 (Ubuntu 10.04 with ROS Diamondback)
pma-09-042 (=PC from where I launch everything) (Ubuntu 10.04 with ROS Diamondback)

camera launch file:

<launch>

<!-- MACHINES -->

  <machine name="miniitx2" address="192.168.10.72" user="common" default="never" ros-root="$(env ROS_ROOT)" ros-package-path="$(env ROS_PACKAGE_PATH)">
   <env name="ROS_IP" value="192.168.10.72" />
   <env name="ROS_MASTER_URI" value="http://192.168.10.72:11311/" />
   <env name="ROS_PACKAGE_PATH" value="/opt/ros/diamondback:$ROS_PACKAGE_PATH" />
  </machine>

  <machine name="miniitx3" address="192.168.10.73" user="common" default="never" ros-root="$(env ROS_ROOT)" ros-package-path="$(env ROS_PACKAGE_PATH)">
   <env name="ROS_IP" value="192.168.10.73" />
   <env name="ROS_MASTER_URI" value="http://192.168.10.72:11311/" />
   <env name="ROS_PACKAGE_PATH" value="/opt/ros/diamondback:$ROS_PACKAGE_PATH" />
  </machine>

<!-- LAUNCH KINECT2 ON MINIITX2 -->

  <node machine="miniitx2" ns="kinect2" pkg="nodelet" type="nodelet" name="manager" args="manager"/>

  <!-- Driver nodelet -->
  <node machine="miniitx2" ns="kinect2" pkg="nodelet" type="nodelet" name="openni_node2" args="load openni_camera/driver manager">
    <param name="rgb_camera_info_url" value="file:///home/common/ros_seb/calibration_rgb.yaml" />
    <param name="depth_camera_info_url" value="file:///home/common/ros_seb/calibration_depth.yaml" />
    <param name="rgb_frame_id" type="str" value="kinect2" />
  </node>

  <node machine="miniitx2" ns="kinect2/rgb/" name="image_proc" pkg="image_proc" type="image_proc" output="screen" >
    <remap from="image_raw" to="/kinect2/rgb/image_raw" />
    <remap from="cam_info" to="/kinect2/rgb/camera_info" />
  </node>

<!-- LAUNCH KINECT3 ON MINIITX3 -->

  <node machine="miniitx3" ns="kinect3" pkg="nodelet" type="nodelet" name="manager" args="manager"/>

  <!-- Driver nodelet -->
  <node machine="miniitx3" ns="kinect3" pkg="nodelet" type="nodelet" name="openni_node3" args="load openni_camera/driver manager">
    <param name="rgb_camera_info_url" value="file:///home/common/ros_seb/calibration_rgb.yaml" />
    <param name="depth_camera_info_url" value="file:///home/common/ros_seb/calibration_depth.yaml" />
    <param name="rgb_frame_id" type="str" value="kinect3" />
  </node>

  <node machine="miniitx3" ns="kinect3/rgb/" name="image_proc" pkg="image_proc" type="image_proc" output="screen" >
    <remap from="image_raw" to="/kinect3/rgb/image_raw" />
    <remap from="camera_info" to="/kinect3/rgb/camera_info" />
  </node>

<!-- INCLUDES -->

  <include file="$(find openni_camera)/launch/kinect_frames.launch" />

  <include file="$(find camera_pose_calibration)/blocks/calibration_tf_publisher.launch" >
    <arg name="cache_file" value="/tmp/camera_pose_calibration_cache.bag" />
  </include>

</launch>

The calibrate_2_camera.launch file:

<launch>

  <arg name="camera1_ns" default="kinect2/rgb" />
  <arg name="camera2_ns" default="kinect3/rgb" />

  <arg name="checker_rows" default="7"/>
  <arg name="checker_cols" default="6"/>
  <arg name="checker_size" default="0.108"/>
  <arg name="headless" default="false" />

  <!-- checkerboard detector for each camera -->
  <include file="$(find camera_pose_calibration)/blocks/rgb_block.launch">
    <arg name="ns" value="$(arg camera1_ns)" />
    <arg name="checker_rows" value="$(arg checker_rows)" />
    <arg name="checker_cols" value="$(arg checker_cols)" />
    <arg name="checker_size" value="$(arg checker_size)" />
  </include>
  <include file="$(find camera_pose_calibration)/blocks/rgb_block.launch">
    <arg name="ns" value="$(arg camera2_ns)" />
    <arg name="checker_rows" value="$(arg checker_rows ...
(more)
edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted
2

answered 2011-08-22 06:18:25 -0500

Wim gravatar image

You get sometimes the "Couldn't get measurement in interval" message when you don't detect checkerboards in the images at a high enough rate. This can be caused by images coming in at a slow rate, or by the checkerboard detector running slowly when the images are very large. So, when you get the "Couldn't get measurement in interval" message, it means you are running on the edge of the capabilities of your system. You can either modify your computer/camera setup, or you can increase the length of the intervals by setting the "min_duration" parameter of the interval filters.

To debug this type of problems, you should check the rate at which checkerboards get detected, but looking at the 'features' topic in the camera namespace. "rostopic hz" will tell you the detection rate. You want the interval size be be such that you will get at least about 5 detections within one interval. E.g. when the detecor rate is 10 hz, a 0.5 sec interval should be good.

edit flag offensive delete link more

Question Tools

2 followers

Stats

Asked: 2011-08-22 04:57:50 -0500

Seen: 703 times

Last updated: Aug 23 '11