PKG - navigation

2D navigation stack

input = odometry, sensor(avoid obstacles), and a goal pose

output = safe velocity commands

tf = determine the robot's location in the world and relate sensor data to a static map. (no velocity data)

odometry = publish both a transform and a nav_msgs/Odometry message that contains velocity information.

HW Requirements

  1. for both differential drive and holonomic wheeled robots only. command = Vel_x, Vel_y, Vel_theta.

  2. planar laser mounted, for map building and localization.

costmaps

This uses 2 costmaps to store information about obstacles in the world, and in total 3 maps

global = long-term plans

local = local planning and obstacle avoidance

common = global & local

http://wiki.ros.org/costmap_2d

costmap_common_params.yaml

# obstacle information
obstacle_range: 2.5
raytrace_range: 3.0

# robot body
footprint: [[x0, y0], [x1, y1], ... [xn, yn]]
#robot_radius: ir_of_robot
inflation_radius: 0.55

# source
observation_sources: laser_scan_sensor point_cloud_sensor
laser_scan_sensor: {sensor_frame: frame_name, data_type: LaserScan, topic: topic_name, marking: true, clearing: true}
point_cloud_sensor: {sensor_frame: frame_name, data_type: PointCloud, topic: topic_name, marking: true, clearing: true}

obstacle_range: 2.5

The robot will only update its map with info about obstacles that are within 2.5 meters of the base.

raytrace_range: 3.0

The robot will attempt to clear out space in front of it up to 3.0 meters away given a sensor reading.

footprint: [[x0, y0], [x1, y1], ... [xn, yn]]

center of the robot is assumed to be at (0.0, 0.0)

inflation_radius: 0.55

the robot will treat all paths that stay 0.55 meters or more away from obstacles as having equal obstacle cost.

global_costmap_params.yaml

global_costmap:
  global_frame: /map
  robot_base_frame: base_link
  update_frequency: 5.0
  static_map: true

global_frame

defines what coordinate frame the costmap should run in

robot_base_frame

defines the coordinate frame the costmap should reference for the base of the robot.

static_map

If you aren't using an existing map or map server, set the static_map parameter to false.

local_costmap_params.yaml

local_costmap:
  global_frame: odom
  robot_base_frame: base_link
  update_frequency: 5.0
  publish_frequency: 2.0
  static_map: false
  rolling_window: true
  width: 6.0
  height: 6.0
  resolution: 0.05

rolling_window

true means that the costmap will remain centered around the robot as the robot moves through the world.

width (meters), height (meters), and resolution (meters/cell)

dimension of the costmap

base_local_planner

given a high-level plan, compute velocity commands and send to the robot.

TrajectoryPlannerROS:
  max_vel_x: 0.45
  min_vel_x: 0.1
  max_vel_theta: 1.0
  min_in_place_vel_theta: 0.4

  acc_lim_theta: 3.2
  acc_lim_x: 2.5
  acc_lim_y: 2.5
  holonomic_robot: true

http://wiki.ros.org/base_local_planner

Last updated

Was this helpful?