используя сжатие изображения и библиотеку boost c++

У меня есть обратный вызов, который мне нужно запустить после подписки на тему образа ROS:

void imageCallback(const sensor_msgs::ImageConstPtr& original_image, int n) {
   ..
}

как видите, обратный вызов принимает два параметра: изображение и число. Я знаю, что можно использовать библиотеку boost для отправки двух параметров в обратный вызов следующим образом:

image_transport::Subscriber sub = it.subscribe("/camera1/RGB", 1, boost::bind(imageCallback,_1, 1));

но я хотел бы также использовать подключаемый модуль сжатия. Итак, если я напишу

 image_transport::Subscriber sub = it.subscribe("/camera1/RGB", 1, boost::bind(imageCallback, _1, 1),image_transport::TransportHints::TransportHints("compressed"));

Я не могу построить код:

error: no matching function for call to ‘image_transport::ImageTransport::subscribe(const char [13], int, boost::_bi::bind_t<void, void (*)(const sensor_msgs::ImageConstPtr&, int), boost::_bi::list2<boost::arg<1>, boost::_bi::value<int> > >, image_transport::TransportHints)’
/opt/ros/fuerte/stacks/image_common/image_transport/include/image_transport/image_transport.h:40: note: candidates are: image_transport::Subscriber image_transport::ImageTransport::subscribe(const std::string&, uint32_t, const boost::function<void(const sensor_msgs::ImageConstPtr&)>&, const ros::VoidPtr&, const image_transport::TransportHints&)
/opt/ros/fuerte/stacks/image_common/image_transport/include/image_transport/image_transport.h:48: note:                 image_transport::Subscriber image_transport::ImageTransport::subscribe(const std::string&, uint32_t, void (*)(const sensor_msgs::ImageConstPtr&), const image_transport::TransportHints&)

Итак, как мне написать код абонентской линии? Спасибо


person hamid    schedule 07.01.2014    source источник


Ответы (1)


Похоже, вам нужно использовать эта перегрузка:

Subscriber image_transport::ImageTransport::subscribe(
        const std::string &     base_topic, 
        uint32_t                queue_size, 
        const boost::function<void(const sensor_msgs::ImageConstPtr &)>& callback, 
        const ros::VoidPtr &    tracked_object = ros::VoidPtr(), 
        const TransportHints &  transport_hints = TransportHints()
        )

Поэтому я предполагаю, что вам просто нужно явно передать параметр tracked_object:

image_transport::Subscriber sub = it.subscribe(
    "/camera1/RGB", 
    1, 
    boost::bind(imageCallback, _1, 1),
    ros::VoidPtr(),                       // THIS ADDED
    image_transport::TransportHints::TransportHints("compressed")
);

(Вместо этого вы вполне можете просто передать nullptr, NULL или 0. У меня нет опыта работы с библиотеками, показанными здесь.)

person sehe    schedule 07.01.2014