問題描述:
在跑某些包時,僅僅有圖像數據是不夠的,還需要獲得相機信息。
例如跑stereo_image_proc時,需要左右目的camera_info
問題解決辦法:
1. 安裝camera_info軟件包
$ sudo apt-get install ros-kinetic-camera-info-manager
2. 開始在自己的代碼文件中進行修改
2.1 添加頭文件
#include <camera_info_manager/camera_info_manager.h>
2.2 在類中定義相關指針、發佈的話題
boost::shared_ptr<camera_info_manager::CameraInfoManager> cinfo_;
image_transport::CameraPublisher image_pub;
2.3 在構造函數中進行2.2中定義的指針的賦值
cinfo_.reset(new camera_info_manager::CameraInfoManager(node_, camera_name_, cam_info_url_));
這裏的node_爲類中定義的ros::NodeHandle node_;
camera_name_爲讀取的相機名稱,爲string類型;
cam_info_url_爲相機的配置文件所在的路徑,string類型,例如:
"file:///data/config/left.yaml"
2.4 在獲取到圖像後進行發佈時
首先需要將所需要發佈的圖像變爲sensor_msgs::Image(這裏視情況而定,各顯神通)
然後給這個sensor_msgs::Image的header.stamp賦值ros::Time::now()
然後新建CameraInfoPtr指針,賦值,再發布圖像和這個cameraInfo就好了:
sensor_msgs::CameraInfoPtr ci_(new sensor_msgs::CameraInfo(cinfo_->getCameraInfo()));
ci_->header.frame_id = msg_.header.frame_id;
ci_->header.stamp = msg_.header.stamp;
image_pub.publish(msg_, *ci_);
感覺寫的好爛啊。。。大家可以自己看參考鏈接。。。
參考鏈接:
1. ros_wiki相同問題
3.http://docs.ros.org/kinetic/api/sensor_msgs/html/msg/CameraInfo.html
4.http://wiki.ros.org/camera_info_manager