ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
Ok as many people has viewed this so i thought of answering my own question. I solved it like this.
import message_filters
import cv2
import rospy
from cv_bridge import CvBridge
def callback(rgb_msg, camera_info):
rgb_image = CvBridge().imgmsg_to_cv2(rgb_msg, desired_encoding="rgb8")
camera_info_K = np.array(camera_info.K).reshape([3, 3])
camera_info_D = np.array(camera_info.D)
rgb_undist = cv2.undistort(rgb_image, camera_info_K, camera_info_D)
if __name__ == '__main__':
rospy.init_node('my_node', anonymous=True)
image_sub = message_filters.Subscriber('/ardrone/front/image_raw', Image)
info_sub = message_filters.Subscriber('/ardrone/front/camera_info', CameraInfo)
ts = message_filters.ApproximateTimeSynchronizer([image_sub, info_sub], 10, 0.2)
ts.registerCallback(callback)
rospy.spin()
So my problem was how to subscribe on two different topics and use their data for further processing. "message_filters.ApproximateTimeSynchronizer" synchronized the incoming messages according to the time stamp with each message being received and with "ts.registerCallback(callback)" i was able to use both subscribed messages together for further processing in callback function.