
라즈베리파이 2대 -> TX2로 image 전송하는 시스템이다.
> pub.cpp
int main(int argc, char **argv){
ros::init(argc, argv, "image_pub2"); // PI1: image_pub1
ros::NodeHandle nh;
image_transport::ImageTransport it(nh);
image_transport::Publisher pub = it.advertise("camera/image2", 1);
// PI1: camera/image1 PI2: camera/image2
// 4 for Yoga-Slim
cv::VideoCapture cap(4, cv::CAP_V4L);
if(!cap.isOpened()) return 1;
cv::Mat frame;
sensor_msgs::ImagePtr msg;
ros::Rate loop_rate(5);
while(nh.ok()){
cap >> frame;
imshow("test", frame); // TEST
if(!frame.empty()){
std_msgs::Header header;
header.stamp = ros::Time::now();
msg = cv_bridge::CvImage(header, "bgr8", frame).toImageMsg();
pub.publish(msg);
ROS_INFO("send");
}
if(cv::waitKey(1) >= 0) break;
ros::spinOnce();
loop_rate.sleep();
}
}

#rostopic echo /camera/image1 > test.txt
다음 명령어로 topic 내용을 test.txt에 저장해서 볼 수 있다.

다음 사진은 ImagePtr에 대한 Structure이다.
ros::Time::now() 값을 넣으면 timestamp 값을 저장할 수 있다.> sub.cpp
void callback(const sensor_msgs::ImageConstPtr& image1, const sensor_msgs::ImageConstPtr& image2)
{
ROS_INFO("success");
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "image_listener");
ros::NodeHandle nh;
image_transport::ImageTransport it(nh);
image_transport::SubscriberFilter sub1(it, "camera/image1", 1);
image_transport::SubscriberFilter sub2(it, "camera/image2", 1);
typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::Image, sensor_msgs::Image> SyncPolicy;
message_filters::Synchronizer<SyncPolicy> sync(SyncPolicy(10), sub1, sub2);
sync.registerCallback(boost::bind(&callback, _1, _2));
std::cout << "output\n";
ros::spin();
}

http://docs.ros.org/en/noetic/api/image_transport/html/classimage__transport_1_1SubscriberFilter.html
첫번째 파라미터는 ImageTransport 함수를 받는다.
두번째 파라미터는 topic 명칭을 받는다. (해당 예제에서는 camera/image)
세번째 파라미터는 queue size를 int로 받는다.
마지막 파라미터는 이미제에 대한 정보를 받는다. ( raw(default), theora, compressed ...)


http://docs.ros.org/en/noetic/api/message_filters/html/c++/classmessage__filters_1_1Synchronizer.html#a4a9dc3f5236f36fc2b1fb74a5b0872d7
첫번째 파라미터는 아까 설정한 sync_policies와 동기화할 queue 개수를 int로 받는다.
두번째 파라미터부터는 동기화할 Topic들을 받는다.

원본

publisher

subscriber
