Improving Navigation Interactions
During his internship at Willow Garage David Lu from Washington University in St. Louis spent the first three months of 2013 improving the navigation stack, a solution that many robots use to move around without colliding into obstacles. Specifically, he made the costmap functionality more flexible to allow for custom adjustments to be made, allowing for the robot to navigate with increased awareness about specific things in its context, like the presence of people.
The costmap is the data structure that represents places that are safe for the robot to be in a grid of cells. Usually, the values in the costmap are binary, representing free space or places where the robot would be in collision. The ROS Navigation stack had the capacity to represent intermediate values, but with the exception of some values to make sure the robot's didn't drive immediately next to obstacles, it primarily used the two values.
The new structure created by David allows for extensive customization of the values that go into the costmap. The different parts of the costmap (the static map, the sensed obstacles and the inflated areas) are all separated into distinct layers of the costmap. Each layer is represented as a ROS plugin that can be compiled independently. Through the parameter server, users can specify additional plugins to be included with functionality they can design.
One use case of special interest for David and his collaborators was the personal space case mentioned above. By integrating a special "social" costmap plugin, the values around sensed people is increased proportional to a normal distribution, causing the robot to tend to drive further away from the person. By taking these proxemic concerns and other social navigation issues into account, David looks to improve human-robot interaction by making the navigation stack create more friendly navigation behaviors.