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

harmish's profile - activity

2021-08-01 02:57:14 -0500 received badge  Nice Question (source)
2015-10-22 05:44:58 -0500 commented answer what is the best way to follow a moving target?

hi Procópio, have you already tried this hack? does is work as you needed? we also have similar situation where we would like local-planner to keep executing current plan while the global-planner is calculating the next plan (which can take several seconds in our case).

2014-07-22 05:09:31 -0500 received badge  Taxonomist
2013-07-04 01:35:25 -0500 received badge  Good Question (source)
2013-06-04 23:57:07 -0500 received badge  Famous Question (source)
2013-06-04 23:57:07 -0500 received badge  Popular Question (source)
2013-06-04 23:57:07 -0500 received badge  Notable Question (source)
2012-11-12 20:07:35 -0500 received badge  Famous Question (source)
2012-11-12 20:07:35 -0500 received badge  Notable Question (source)
2012-10-02 02:34:05 -0500 received badge  Famous Question (source)
2012-10-02 02:34:05 -0500 received badge  Notable Question (source)
2012-08-23 21:36:00 -0500 received badge  Famous Question (source)
2012-08-23 21:36:00 -0500 received badge  Popular Question (source)
2012-08-23 21:36:00 -0500 received badge  Notable Question (source)
2012-05-29 12:14:10 -0500 received badge  Popular Question (source)
2012-05-21 04:57:50 -0500 received badge  Popular Question (source)
2012-01-08 12:34:01 -0500 received badge  Great Question (source)
2012-01-07 17:33:10 -0500 marked best answer what is the reasoning behind current architecture of navigation stack (move_base), the way it is?

The nav_core package contains the BaseGlobalPlanner and BaseLocalPlanner interfaces so that various planners can be loaded in place of one another without modifying move_base. ROS does this using pluginlib.

Pluginlib is one of the reasons that the initialize method is required. Since plugins are loaded dynamically, one cannot instantiate an instance of a particular plugin (navfn, for example). move_base uses pluginlib's classLoader to load an instance of whatever planner is desired. It then calls the initialize method to set up all configurations, services, publishers, subscribers, etc. The initialize method does more than just pass the copy of the costmap. If you were to only try to use messages, you would not be able to dynamically load the planner (because it'd have to be pre-loaded to be able to subscribe to the topic and, thus, would not be dynamically loaded).

By enforcing the BaseGlobalPlanner and BaseLocalPlanner interfaces, move_base can always be sure that it has both planners at all times. If the planners ran standalone, move_base would have more difficulty controlling their operation, ensure that they're running, and creating/destroying instances of planners.

These are just my opinions on the matter, I'm sure it's not a comprehensive list, but I hope it helps.

2012-01-05 05:12:05 -0500 marked best answer what does origin represent in a costmap?

By resetting the costmap origin, you are telling the costmap that its position in the world frame has changed. The costmap_2d object uses the origin that you specify when calling the mapToWorld() method (among others) to determine the translation from world coordinates to individual costmap cells. You can set the origin in whatever frame you want.

So, if you set (10, 10) as the origin, and you sent a goal of (15, 15), when you look up the costmap grid space corresponding to your goal, the grid space would be ( (15-10) / resolution, (15-10) / resolution) ). So if your resolution was 0.1 meters/pixel, your costmap index for that goal would be (50, 50).

Additionally, the costmap grid spaces can never have a negative index (they're all unsigned int). You can find the API here if you're interested.

2011-12-16 07:12:46 -0500 received badge  Good Question (source)
2011-12-15 14:08:24 -0500 received badge  Nice Question (source)
2011-12-08 06:23:22 -0500 received badge  Nice Question (source)
2011-10-30 12:41:01 -0500 marked best answer how to stop an ubuntu update overwriting my code changes in ros?

The easiest way is to do a local (in ~/ros, for example) checkout of a the source code for a particular package, and then (as noted above) make sure it appears before /opt/ros/... in your ROS_PACKAGE_PATH.

But this is not going to generalize well, particularly if you want to distribute your code, because then everybody's going to need your patched version of move_base (or whatever).

If you're finding bugs, send them to the maintainers. Otherwise, a formal fork is going to be a better choice.

2011-10-03 20:59:14 -0500 received badge  Supporter (source)
2011-09-30 00:27:17 -0500 asked a question what does origin represent in a costmap?

i am using costmap_2d c++ api. In the constructor one can set an origin of the costmap. what does this origin represent? it is a point or a cell? if i set origin e.g. (10,10) does it mean the cell to the left and below origin will have a negative index?

2011-09-27 22:15:19 -0500 asked a question how to stop an ubuntu update overwriting my code changes in ros?

sometime i need to change a little in some of the ros packages for my use, e.g. in navfn and move_base. then comes the new ubuntu update and it overwrites my changes! what is the best workaround for this problem? (ofcourse, i need a solution other than not updateing ;)

2011-09-27 04:50:19 -0500 received badge  Student (source)
2011-09-27 01:50:24 -0500 edited question how to get a copy of global costmap from move_base

i am writing a package which needs to use global costmap for its calculations. this package does not implement BaseGlobalPlanner, because it is not the task of the package. the global costmap is private variable of move_base and i did not find any way to access it in another package. so my qestion is how do i get the global costmap from move_base for my calculations?

2011-09-27 01:45:01 -0500 edited question what is the reasoning behind current architecture of navigation stack (move_base), the way it is?

i was looking at how move_base and navigation stack works. somethings seems weird to me. nav_core package has BaseGlobalPlanner and BaseLocalPlanner interfaces, which is like general programming practice. navfn is a package that implements BaseGlobalPlanner. BaseGlobalPlanner interface has two methods to overwrite initialize and make_plan. it seems that the task of initialize method is to pass the global costmap to the planner. now, i think this can be achieved by same mechanism as ros messages or service. and task of make_plan can be also served by a ros service.

sometimes standard ros mechanisms (messages and services) used, as for costmap and recovery behaviours. however, sometimes general programming techniques (interfaces) are used, as for BaseGlobalPlanner and BaseLocalPlanner. so the question is why there is this kind of double practice? i would like to know the reasoning here, so i can make better decisions, as i will be working with the navigation stack for my project...