All lens have some distortion no matter how big or small, so you should correct for lens distortion by calibrating a camera in terms of software. Especially, this technique is used for robotics and the distortion effects so much while a robot is mapping some obstacles using a camera as their eyes. Today, I am showing how to calibrate a ZED stereo camera for your project.
Environments & Equipments
- Ubuntu 16.04
- ROS Kinetic
- ZED SDK 2.8
- CUDA 10.0
- ZED Camera
I assume that you already have these environments and equipment to calibrate a ZED stereo camera. Please go to these links above, and set up correctly.
How to make a catkin workplace for ZED
1 2 3 4 5 6 7 8 9 |
source /opt/ros/kinetic/setup.bash mkdir -p ~/catkin_zed/src cd ~/catkin_ws/ catkin_make source devel/setup.bash cd src git clone https://github.com/stereolabs/zed-ros-wrapper.git cd .. catkin_make |
Compiling
1 2 |
rosdep install camera_calibration rosmake camera_calibration |
Calibration
1 |
roslaunch zed_wrapper zed.launch |
Open another tab on terminal
1 |
rosrun camera_calibration cameracalibrator.py --size 6x4 --square 0.035 --no-service-check right:=/zed/zed_node/right_raw/image_raw_color left:=/zed/zed_node/left_raw/image_raw_color right_camera:=/zed/zed_node/right left_camera:=/zed/zed_node/left |
For the calibration, I used calibration checkboard (6×4, square size 35mm). When you use another checkboard, you will just change the command after –size and –square.
Important!!!
Do NOT forget the command of
1 |
--no-service-check |
The driver does not support set_camera_info service. Without this command, you might have got this error message after rosrun.
1 2 3 4 5 |
('Waiting for service', '/zed/zed_node/left/set_camera_info', '...') Service not found ('Waiting for service', '/zed/zed_node/right/set_camera_info', '...') Service not found Segmentation fault (core dumped) |
There are active topics while roslaunch zed_wrapper zed.launch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
/diagnostics /rosout /rosout_agg /tf /tf_static /zed/joint_states /zed/zed_node/confidence/camera_info /zed/zed_node/confidence/confidence_image /zed/zed_node/confidence/confidence_image/compressed /zed/zed_node/confidence/confidence_image/compressed/parameter_descriptions /zed/zed_node/confidence/confidence_image/compressed/parameter_updates /zed/zed_node/confidence/confidence_image/compressedDepth /zed/zed_node/confidence/confidence_image/compressedDepth/parameter_descriptions /zed/zed_node/confidence/confidence_image/compressedDepth/parameter_updates /zed/zed_node/confidence/confidence_image/theora /zed/zed_node/confidence/confidence_image/theora/parameter_descriptions /zed/zed_node/confidence/confidence_image/theora/parameter_updates /zed/zed_node/confidence/confidence_map /zed/zed_node/depth/camera_info /zed/zed_node/depth/depth_registered /zed/zed_node/depth/depth_registered/compressed /zed/zed_node/depth/depth_registered/compressed/parameter_descriptions /zed/zed_node/depth/depth_registered/compressed/parameter_updates /zed/zed_node/depth/depth_registered/compressedDepth /zed/zed_node/depth/depth_registered/compressedDepth/parameter_descriptions /zed/zed_node/depth/depth_registered/compressedDepth/parameter_updates /zed/zed_node/depth/depth_registered/theora /zed/zed_node/depth/depth_registered/theora/parameter_descriptions /zed/zed_node/depth/depth_registered/theora/parameter_updates /zed/zed_node/disparity/disparity_image /zed/zed_node/left/camera_info /zed/zed_node/left/image_rect_color /zed/zed_node/left/image_rect_color/compressed /zed/zed_node/left/image_rect_color/compressed/parameter_descriptions /zed/zed_node/left/image_rect_color/compressed/parameter_updates /zed/zed_node/left/image_rect_color/compressedDepth /zed/zed_node/left/image_rect_color/compressedDepth/parameter_descriptions /zed/zed_node/left/image_rect_color/compressedDepth/parameter_updates /zed/zed_node/left/image_rect_color/theora /zed/zed_node/left/image_rect_color/theora/parameter_descriptions /zed/zed_node/left/image_rect_color/theora/parameter_updates /zed/zed_node/left_raw/camera_info /zed/zed_node/left_raw/image_raw_color /zed/zed_node/left_raw/image_raw_color/compressed /zed/zed_node/left_raw/image_raw_color/compressed/parameter_descriptions /zed/zed_node/left_raw/image_raw_color/compressed/parameter_updates /zed/zed_node/left_raw/image_raw_color/compressedDepth /zed/zed_node/left_raw/image_raw_color/compressedDepth/parameter_descriptions /zed/zed_node/left_raw/image_raw_color/compressedDepth/parameter_updates /zed/zed_node/left_raw/image_raw_color/theora /zed/zed_node/left_raw/image_raw_color/theora/parameter_descriptions /zed/zed_node/left_raw/image_raw_color/theora/parameter_updates /zed/zed_node/odom /zed/zed_node/parameter_descriptions /zed/zed_node/parameter_updates /zed/zed_node/path_map /zed/zed_node/path_odom /zed/zed_node/point_cloud/cloud_registered /zed/zed_node/pose /zed/zed_node/pose_with_covariance /zed/zed_node/rgb/camera_info /zed/zed_node/rgb/image_rect_color /zed/zed_node/rgb/image_rect_color/compressed /zed/zed_node/rgb/image_rect_color/compressed/parameter_descriptions /zed/zed_node/rgb/image_rect_color/compressed/parameter_updates /zed/zed_node/rgb/image_rect_color/compressedDepth /zed/zed_node/rgb/image_rect_color/compressedDepth/parameter_descriptions /zed/zed_node/rgb/image_rect_color/compressedDepth/parameter_updates /zed/zed_node/rgb/image_rect_color/theora /zed/zed_node/rgb/image_rect_color/theora/parameter_descriptions /zed/zed_node/rgb/image_rect_color/theora/parameter_updates /zed/zed_node/rgb_raw/camera_info /zed/zed_node/rgb_raw/image_raw_color /zed/zed_node/rgb_raw/image_raw_color/compressed /zed/zed_node/rgb_raw/image_raw_color/compressed/parameter_descriptions /zed/zed_node/rgb_raw/image_raw_color/compressed/parameter_updates /zed/zed_node/rgb_raw/image_raw_color/compressedDepth /zed/zed_node/rgb_raw/image_raw_color/compressedDepth/parameter_descriptions /zed/zed_node/rgb_raw/image_raw_color/compressedDepth/parameter_updates /zed/zed_node/rgb_raw/image_raw_color/theora /zed/zed_node/rgb_raw/image_raw_color/theora/parameter_descriptions /zed/zed_node/rgb_raw/image_raw_color/theora/parameter_updates /zed/zed_node/right/camera_info /zed/zed_node/right/image_rect_color /zed/zed_node/right/image_rect_color/compressed /zed/zed_node/right/image_rect_color/compressed/parameter_descriptions /zed/zed_node/right/image_rect_color/compressed/parameter_updates /zed/zed_node/right/image_rect_color/compressedDepth /zed/zed_node/right/image_rect_color/compressedDepth/parameter_descriptions /zed/zed_node/right/image_rect_color/compressedDepth/parameter_updates /zed/zed_node/right/image_rect_color/theora /zed/zed_node/right/image_rect_color/theora/parameter_descriptions /zed/zed_node/right/image_rect_color/theora/parameter_updates /zed/zed_node/right_raw/camera_info /zed/zed_node/right_raw/image_raw_color /zed/zed_node/right_raw/image_raw_color/compressed /zed/zed_node/right_raw/image_raw_color/compressed/parameter_descriptions /zed/zed_node/right_raw/image_raw_color/compressed/parameter_updates /zed/zed_node/right_raw/image_raw_color/compressedDepth /zed/zed_node/right_raw/image_raw_color/compressedDepth/parameter_descriptions /zed/zed_node/right_raw/image_raw_color/compressedDepth/parameter_updates /zed/zed_node/right_raw/image_raw_color/theora /zed/zed_node/right_raw/image_raw_color/theora/parameter_descriptions /zed/zed_node/right_raw/image_raw_color/theora/parameter_updates /zed/zed_node/stereo/image_rect_color /zed/zed_node/stereo/image_rect_color/compressed /zed/zed_node/stereo/image_rect_color/compressed/parameter_descriptions /zed/zed_node/stereo/image_rect_color/compressed/parameter_updates /zed/zed_node/stereo/image_rect_color/compressedDepth /zed/zed_node/stereo/image_rect_color/compressedDepth/parameter_descriptions /zed/zed_node/stereo/image_rect_color/compressedDepth/parameter_updates /zed/zed_node/stereo/image_rect_color/theora /zed/zed_node/stereo/image_rect_color/theora/parameter_descriptions /zed/zed_node/stereo/image_rect_color/theora/parameter_updates /zed/zed_node/stereo_raw/image_raw_color /zed/zed_node/stereo_raw/image_raw_color/compressed /zed/zed_node/stereo_raw/image_raw_color/compressed/parameter_descriptions /zed/zed_node/stereo_raw/image_raw_color/compressed/parameter_updates /zed/zed_node/stereo_raw/image_raw_color/compressedDepth /zed/zed_node/stereo_raw/image_raw_color/compressedDepth/parameter_descriptions /zed/zed_node/stereo_raw/image_raw_color/compressedDepth/parameter_updates /zed/zed_node/stereo_raw/image_raw_color/theora /zed/zed_node/stereo_raw/image_raw_color/theora/parameter_descriptions /zed/zed_node/stereo_raw/image_raw_color/theora/parameter_updates |
Calibration Result
Done!