Smooth Nearness Diagram Navigation

This driver implements the Smooth Nearness Diagram Navigation algorithm, an improvement over the nd driver that removes oscillatory patterns and improves overall driver performance.

This algorithm handles local collision-avoidance and goal-seeking and is designed for non-holonomic, non-circular robots operating in tight spaces. The algorithm is in the following paper:

Durham, J. ; Bullo, F. "Smooth Nearness-Diagram Navigation" 2008, IEEE/RSJ International Conference on Intelligent Robots and Systems,

  1. IROS 2008, 690-695

This driver reads pose information from a interface_position2d device, sensor data from a interface_laser device and/or interface_sonar device, and writes commands to a interface_position2d device. The two interface_position2d devices can be the same. At least one device of type interface_laser must be provided.

The driver itself supports the interface_position2d interface. Send PLAYER_POSITION2D_CMD_POS commands to set the goal pose. The driver also accepts PLAYER_POSITION2D_CMD_VEL commands, simply passing them through to the underlying output device.

This driver commands the underlying interface_position2d simply in velocity, so it's suitable to be used on the robots for which the GoTo() function is not yet implemented (e.g.: the Erratic robot).

Compile-time dependencies
  • none
Provides
  • interface_position2d
Requires
  • "input" interface_position2d : source of pose and velocity information
  • "output" interface_position2d : sink for velocity commands to control the robot
  • interface_laser : the laser to read from
Configuration requests
  • all interface_position2d requests are passed through to the underlying "output" interface_position2d device.
Configuration file options
  • robot_radius (length)
    • Default: 0.25 (m)
    • The radius of the minimum circle which contains the robot
  • min_gap_width (length)
    • Default: 2*Robot radius
    • Minimum passage width the driver will try to exploit
  • obstacle_avoid_dist(length)
    • Default: 4*Robot radius
    • Maximum distance allowed from an obstacle
  • max_speed (length/s)
    • Default: 0.5
    • Maximum speed allowed
  • max_turn_rate (angle/sec)
    • Default: 60 degrees
    • Maximum angular speed allowed
  • goal_position_tol (length)
    • Default: Robot radius/2
    • Maximum distance allowed from the final goal for the algorithm to stop.
  • goal_angle_tol (angle)
    • Default: 30 degrees
    • Maximum angular error from the final goal position for the algorithm to stop
Example
driver
(
  name "snd"
  provides ["position2d:1"]
  requires ["input:::position2d:0" "output:::position2d:0" "laser:0"]
  robot_radius 0.24
)
Author
Joey Durham (underlying algorithm), Luca Invernizzi (driver integration and documentation)