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

Tabjones's profile - activity

2016-08-10 11:29:52 -0500 received badge  Necromancer (source)
2016-08-10 11:29:52 -0500 received badge  Teacher (source)
2015-06-13 01:46:31 -0500 received badge  Famous Question (source)
2015-03-24 05:59:48 -0500 received badge  Notable Question (source)
2015-03-24 03:10:32 -0500 answered a question Moving Least Squares (MLS) surface reconstruction method.

Code looks ok, i'm guessing the problem is that your input point cloud has too few points (only 5) and with very sparse coordinates (you are randomizing them) so that mls can't find any surface in a radius of 3cm.

Also generally you should compute normals yourself, with NormalEstimation class and supply your normal to mls with mls.setInputNormals so that you can control how these normals are computed.

Hope this helps

2015-03-23 13:34:05 -0500 answered a question set parameter using launch file

1st) Take a look here: roslaunch/xml/param.

For example you can set the parameter test to be a double of value 2.0:

<param name="test" type="double" value="2.0" />

Now the parameter 'test' is loaded into ROS parameter server and you can access it from your node like this:

double testvar;
node_handle.getParam("/test", testvar);
std::cout<<testvar; //prints 2

Look also here for more examples.

2nd) You can do this using the method described above, simply load ID1 and ID2 as default values of parameters and load them inside your node where you can publish them.

3rd) I don't think there's a way to do this from command line only, AFAIK, and i would not endorse that, what if there are 1000 variables? creating a tousand topics would probaly clog your system.

I think the best way would be to create a custom message with an array, if the variables are double the message would look like this:

//customMSG.msg
double[] myvars

Then the subscriber can parse the message and determine how many variables are there.

2015-03-23 08:40:01 -0500 commented answer One callback interrupting another, is that possible?

Thanks, this was very helpful.

2015-03-23 08:39:01 -0500 received badge  Supporter (source)
2015-03-23 08:38:47 -0500 received badge  Popular Question (source)
2015-03-23 08:38:24 -0500 received badge  Scholar (source)
2015-03-23 07:54:32 -0500 received badge  Editor (source)
2015-03-23 07:52:42 -0500 answered a question One callback interrupting another, is that possible?

Soved! Following dorhege suggestions, i switched to AsyncSpinner:

//in main()
ros::AsyncSpinner spinner (0);
while (node.ok())
{
 spinner.start();
}
spinner.stop();

Now both callbacks can interrupt each other. Thanks.

An yea it might be worth it to switch to actionlib in a near future.

2015-03-23 04:55:31 -0500 asked a question One callback interrupting another, is that possible?

Hi, I built a node with a class in it, the class has two callbacks one is bind to dynamic reconfigure server, the other is bind to a service. Both callbacks are class member. So it is something like this:

class A 
{
   bool param;
   bool callback1 (node::service::Request &req, node::service::Response &res)
   {  
    //some long computations
    if (param)
    //do something
    else
    //do something else
   }

   void callback2 (node::nodeConfig &config, uint32_t level)
   {
    //updating parameters...
    param = config.param;
   }
}

The service callback has some internal loop that requires user input to continue, my idea was to let user (re)configure parameters while the service executes. However this is not working because callback2 does not interrupt callback1 and param is only set AFTER callback1 terminates.

What would be the correct way to achieve this ? How can i rewrite the class so that callback2 can interrupt callback1 ?

I thought that maybe this happens because both callbacks are class members, what if callback2 is a global function ?