записать вектор через тот же обратный вызов (ROS), используя boost::bind (C++)

я использую темы ROS, чтобы получить некоторые потоки изображений из симулятора. идея следующая: у меня есть "n" визуальных сенсоров и я хочу объявить n подписчиков (через цикл for), которые читают n разных тем и звонят одним и тем же обратный вызов: передача целого числа в c.b. я смогу заполнить вектор изображений (каждое из них получено по разным темам).

это мой код:

vector <IplImage*> Images;

void newImageTrigger_trgI(const sensor_msgs::ImageConstPtr& msg, int i)
{
 cv_bridge::CvImagePtr cv_ptr;


try
{

    cv_ptr = cv_bridge::toCvCopy(msg, enc::BGR8);

    Images[i] = cv_ptr->image;


}
catch (cv_bridge::Exception& e)
{
    ROS_ERROR("cv_bridge exception: %s", e.what());
}

}


 int main( int argc, char** argv )
 {


ros::init(argc, argv, "ImageProcessing");
ros::NodeHandle n;

    std::vector<ros::Subscriber> sub;
for (int i = 1; i < 6; i++)
{
    string str_i=string_converter(i);
     sub[i] = n.subscribe("/vrep/visionSensorData"+str_i, 1,...   //ERROR
       boost::bind(&newImageTrigger_trgI, _1, i));
     }

      .....

Очевидно: "недопустимые аргументы" в //ERROR

может кто-нибудь помочь мне, пожалуйста?... я думаю, что это что-то, касающееся функции boost::bind, спасибо


person Matteo    schedule 10.06.2013    source источник


Ответы (1)


Функция подписки в ошибочной строке должна быть явно создана для типа sensor_msgs::Image в этом случае:

sub[i] = n.subscribe<sensor_msgs::Image>("/vrep/visionSensorData"+str_i, 1, boost::bind(&newImageTrigger_trgI, _1, i));
person Matthias    schedule 21.10.2013