написать в векторе через тот же (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));
}

.....

Очевидно: «неверные аргументы» в // ОШИБКА

Может ли кто-нибудь помочь мне, пожалуйста? … Я думаю, что это что-то касается boost :: bind function
Спасибо

0

Решение

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector