For the extrensic calibration of the RGB to IR camera the standard program (camera_pose_calibration) doesn’t work correctly. It seems that IR image is offerd to the checkerboard detector in 16bit format and the checkerboard detector is using the 8 most significant bits while the IR image is placed in the 8 less significant bits. This way the checkboard detector doesn’t detect anything. The application however seems to display the 8 less significant bits, so visually it looks alright.
To get the checkboard detector working we created a node that gets the IR image and increases the contrast (multiplies every pixel value by 256). Using the output of the node the checkerboard detector will work (but the image in the application will be completly white). This node is not limited to the IR image, but can increase the contrast of every grey scale image (e.g.: depth map).
You can download the node here.
After building you can start the node with
contrast_augmenter image:=<grey scale image> [contrast]
If no remapping and argument is given /camera/ir/image_raw and contrast multiplication of 256 is used.
The node will use the namespace of the given topic to listen to 3 topics.
- The given image topic
- The image_rect topic
- The camera_info topic
After contrast increase it will publish the topics to the <namespace>_augmented namespace. The image_rect topic is automatically monitored in case you would like both raw image and rectified image to be increased.
We want to increase the contrast of the camera /kinect for usage with camera_pose_calibration.
The image of interest is published on /kinect/ir/image_rect. /kinect/ir/camera_info contains information that is needed for the calibration. The node is started with:
Which will give us 3 new topics:
/kinect/ir_augmented/image_rect can now be used in the calibration with something like this:
roslaunch camera_pose_calibration calibrate_2_camera.launch camera1_ns:=/kinect/rgb_bag camera2_ns:=/kinect/ir_augmented checker_rows:=6 checker_cols:=7 checker_size:=0.108