ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Javier Romero's profile - activity

2017-06-18 11:52:22 -0500 received badge  Nice Question (source)
2015-11-06 22:59:10 -0500 received badge  Good Answer (source)
2015-11-06 22:59:10 -0500 received badge  Enlightened (source)
2014-01-17 00:08:54 -0500 received badge  Taxonomist
2012-09-04 00:03:12 -0500 received badge  Famous Question (source)
2012-09-04 00:03:12 -0500 received badge  Popular Question (source)
2012-09-04 00:03:12 -0500 received badge  Notable Question (source)
2012-08-22 14:09:53 -0500 received badge  Famous Question (source)
2012-08-22 14:09:53 -0500 received badge  Notable Question (source)
2012-05-02 00:56:48 -0500 received badge  Popular Question (source)
2011-09-08 08:46:24 -0500 received badge  Nice Answer (source)
2011-08-17 09:33:55 -0500 received badge  Teacher (source)
2011-08-17 09:33:55 -0500 received badge  Self-Learner (source)
2011-07-19 05:23:37 -0500 marked best answer how to check if there are waiting messages in a callback queue?

The callback queues do not have this functionality. You'll need to clear the queue and build your own which you can track. If you use the boost shared pointer callbacks you can do this with only pointers and thus relatively efficiently.

2011-05-12 06:31:04 -0500 received badge  Student (source)
2011-05-03 12:34:50 -0500 answered a question problems with the ray in projectPixelTo3dRay

OK, it's pretty straightforward if you look at the code of the functions. The problem is that I was looking to the second camera of a stereo pair, and therefore the components Tx is non-zero. Therefore you have to make a couple of translations:

cv::Point2d pixel(r,c);
cv::Point3d ray =  model.projectPixelTo3dRay(pixel);
float tx_fx = model.Tx()/model.fx();
cv::Point3d point(z*(ray.x+tx_fx)-tx_fx,z*ray.y,z*ray.z);
cv::Point2d back_pixel = model.project3dToPixel(point);
2011-05-03 11:06:03 -0500 asked a question problems with the ray in projectPixelTo3dRay

According to the API, the return value is "the unit vector in the camera coordinate frame in the direction of rectified pixel" (from 1.4 is not unit, but with unit z component). I expected that multiplying such a vector by a scalar z would give me the 3D point with depth z that projects into the input pixel. However, when i back-project such a vector the result is not the input pixel:

cv::Point2d pixel(r,c);
cv::Point3d ray =  model.projectPixelTo3dRay(pixel);
cv::Point3d point = ray * z;
cv::Point2d back_pixel = model.project3dToPixel(point);

I would expect back_pixel be equal to pixel for any z, but it only happens for z=1. Have I misunderstood something?

2011-04-29 06:53:34 -0500 commented answer how to check if there are waiting messages in a callback queue?
I tried it, didn't work, so I edited my question.
2011-04-29 06:52:44 -0500 received badge  Editor (source)
2011-04-28 09:35:06 -0500 asked a question how to check if there are waiting messages in a callback queue?

The test case is the following: i receive images from a camera through a callback, and I want to run a loop of processing until a new image arrive. Is there any function that can tell me if there are new messages in the queue? The pseudocode would look like this (i'm looking for new_imagemsg()):

void imagecb(imagemsg)
{
  while(!new_imagemsg())
  {
    optimize(imagemsg);
  }
  return;
}

I tried the following:

void imagecb(imagemsg)
{
  while(static_cast<ros::CallbackQueue*>(nh->getCallbackQueue())->isEmpty())
  {
    optimize(imagemsg);
  }
  return;
}

But it looks like the function isEmpty() always returns false when called from inside a callback, which makes me think that the callback is removed once the callback function finishes instead of when it enters. Unfortunately it looks like CallbackQueue doesn't have a getSize function ( i would like to check if the size is bigger than one).

Any other ideas? clearing the queue from inside a callback function doesn't seem to work either, apart from being kind of hacky.

2011-04-25 14:25:07 -0500 asked a question equivalent cvToImgMsg for cv::Mat images

If I want to publish a cv::Mat that is not coming from a previous message, how should I proceed? With IplImages you can call cvToImgMsg. Should I fill a CvImage instance manually? The diamondback tutorial assumes the existence of a CvImage.