yaml_to_camera_info.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 import rospy
3 import yaml
4 import sys
5 from sensor_msgs.msg import CameraInfo
6 from sensor_msgs.msg import Image
7 
8 def yaml_to_CameraInfo(yaml_fname):
9  with open(yaml_fname, "r") as file_handle:
10  first_line = file_handle.readline()
11  if "%YAML:" not in first_line:
12  file_handle.seek(0)
13  calib_data = yaml.load(file_handle, Loader=yaml.FullLoader)
14 
15  camera_info_msg = CameraInfo()
16  camera_info_msg.width = calib_data["image_width"]
17  camera_info_msg.height = calib_data["image_height"]
18  camera_info_msg.K = calib_data["camera_matrix"]["data"]
19  camera_info_msg.D = calib_data["distortion_coefficients"]["data"]
20  camera_info_msg.R = calib_data["rectification_matrix"]["data"]
21  camera_info_msg.P = calib_data["projection_matrix"]["data"]
22  camera_info_msg.distortion_model = calib_data["distortion_model"]
23  return camera_info_msg
24 
25 def callback(image):
26  global publisher
27  global camera_info_msg
28  global frameId
29  camera_info_msg.header = image.header
30  if frameId:
31  camera_info_msg.header.frame_id = frameId
32  publisher.publish(camera_info_msg)
33 
34 if __name__ == "__main__":
35 
36  rospy.init_node("yaml_to_camera_info", anonymous=True)
37 
38  yaml_path = rospy.get_param('~yaml_path', '')
39  scale = rospy.get_param('~scale', 1.0)
40  if not yaml_path:
41  print('yaml_path parameter should be set to path of the calibration file!')
42  sys.exit(1)
43 
44  frameId = rospy.get_param('~frame_id', '')
45  camera_info_msg = yaml_to_CameraInfo(yaml_path)
46 
47  if scale!=1.0:
48  camera_info_msg.K[0] = camera_info_msg.K[0]*scale
49  camera_info_msg.K[2] = camera_info_msg.K[2]*scale
50  camera_info_msg.K[4] = camera_info_msg.K[4]*scale
51  camera_info_msg.K[5] = camera_info_msg.K[5]*scale
52  camera_info_msg.P[0] = camera_info_msg.P[0]*scale
53  camera_info_msg.P[2] = camera_info_msg.P[2]*scale
54  camera_info_msg.P[3] = camera_info_msg.P[3]*scale
55  camera_info_msg.P[5] = camera_info_msg.P[5]*scale
56  camera_info_msg.P[6] = camera_info_msg.P[6]*scale
57  camera_info_msg.width = int(camera_info_msg.width*scale)
58  camera_info_msg.height = int(camera_info_msg.height*scale)
59 
60  publisher = rospy.Publisher("camera_info", CameraInfo, queue_size=1)
61  rospy.Subscriber("image", Image, callback, queue_size=1)
62  rospy.spin()
yaml_to_camera_info.callback
callback
Definition: yaml_to_camera_info.py:61
yaml_to_camera_info.yaml_to_CameraInfo
def yaml_to_CameraInfo(yaml_fname)
Definition: yaml_to_camera_info.py:8


rtabmap_util
Author(s): Mathieu Labbe
autogenerated on Mon Apr 28 2025 02:40:50