Public Member Functions | Private Member Functions | Private Attributes | Friends
iri_ackermann_local_planner::TrajectoryPlanner Class Reference

Computes control velocities for a robot given a costmap, a plan, and the robot's position in the world. More...

#include <trajectory_planner.h>

List of all members.

Public Member Functions

bool checkTrajectory (double x, double y, double theta, double vx, double vy, double vtheta, double vx_samp, double vy_samp, double vtheta_samp)
 Generate and score a single trajectory.
Trajectory findBestPath (tf::Stamped< tf::Pose > global_pose, tf::Stamped< tf::Pose > global_vel, tf::Stamped< tf::Pose > &drive_velocities, geometry_msgs::Twist &ackermann_state)
 Given the current position, orientation, and velocity of the robot, return a trajectory to follow.
bool getCellCosts (int cx, int cy, float &path_cost, float &goal_cost, float &occ_cost, float &total_cost)
 Compute the components and total cost for a map grid cell.
void getLocalGoal (double &x, double &y)
 Accessor for the goal the robot is currently pursuing in world corrdinates.
void reconfigure (AckermannLocalPlannerConfig &cfg)
 Reconfigures the trajectory planner.
double scoreTrajectory (double x, double y, double theta, double vx, double vy, double vtheta, double vx_samp, double vy_samp, double vtheta_samp)
 Generate and score a single trajectory.
 TrajectoryPlanner (WorldModel &world_model, const costmap_2d::Costmap2D &costmap, std::vector< geometry_msgs::Point > footprint_spec, double max_acc=1.0, double max_vel=0.3, double min_vel=-0.3, double max_steer_acc=1.0, double max_steer_vel=0.5, double min_steer_vel=-0.5, double max_steer_angle=0.35, double min_steer_angle=-0.35, double axis_distance=1.65, double sim_time=10.0, double sim_granularity=0.025, int vx_samples=20, int vtheta_samples=20, double pdist_scale=0.6, double gdist_scale=0.8, double occdist_scale=0.01, double hdiff_scale=1.0, bool simple_attractor=false, double angular_sim_granularity=0.025, int heading_points=8, double xy_goal_tol=0.5)
 Constructs a trajectory controller.
void updatePlan (const std::vector< geometry_msgs::PoseStamped > &new_plan, bool compute_dists=false)
 Update the plan that the controller is following.
 ~TrajectoryPlanner ()
 Destructs a trajectory controller.

Private Member Functions

Trajectory createTrajectories (double x, double y, double theta, double vx, double vy, double vtheta, double acc_x, double acc_y, double acc_theta)
 Create the trajectories we wish to explore, score them, and return the best option.
double footprintCost (double x_i, double y_i, double theta_i)
 Checks the legality of the robot footprint at a position and orientation using the world model.
void generateTrajectory (double x, double y, double theta, double vx, double vy, double vtheta, double vx_samp, double vy_samp, double vtheta_samp, double acc_x, double acc_y, double acc_theta, double impossible_cost, Trajectory &traj)
 Generate and score a single trajectory.
void getFillCells (std::vector< iri_ackermann_local_planner::Position2DInt > &footprint)
 Fill the outline of a polygon, in this case the robot footprint, in a grid.
std::vector
< iri_ackermann_local_planner::Position2DInt
getFootprintCells (double x_i, double y_i, double theta_i, bool fill)
 Used to get the cells that make up the footprint of the robot.
void getLineCells (int x0, int x1, int y0, int y1, std::vector< iri_ackermann_local_planner::Position2DInt > &pts)
 Use Bresenham's algorithm to trace a line between two points in a grid.
double headingDiff (int cell_x, int cell_y, double x, double y, double heading)
double lineCost (int x0, int x1, int y0, int y1)
double pointCost (int x, int y)

Private Attributes

double ack_acc_max_
double ack_axis_distance_
double ack_steer_acc_max_
double ack_steer_angle_max_
double ack_steer_angle_min_
double ack_steer_speed_max_
double ack_steer_speed_min_
double ack_vel_max_
double ack_vel_min_
double angular_sim_granularity_
 The distance between angular simulation points.
boost::mutex configuration_mutex_
const costmap_2d::Costmap2Dcostmap_
 Provides access to cost map information.
std::vector< geometry_msgs::Pointfootprint_spec_
 The footprint specification of the robot.
double gdist_scale_
std::vector
< geometry_msgs::PoseStamped > 
global_plan_
 The global path for the robot to follow.
double goal_x_
double goal_y_
 Storage for the local goal the robot is pursuing.
double hdiff_scale_
 Scaling factors for the controller's cost function.
int heading_points_
MapGrid map_
 The local map grid where we propagate goal and path distance.
double occdist_scale_
double pdist_scale_
double sim_granularity_
 The distance between simulation points.
double sim_time_
 The number of seconds each trajectory is "rolled-out".
bool simple_attractor_
 Enables simple attraction to a goal point.
double steering_speed_
Trajectory traj_one
Trajectory traj_two
 Used for scoring trajectories.
int vtheta_samples_
 The number of samples we'll take in the theta dimension of the control space.
int vx_samples_
 The number of samples we'll take in the x dimenstion of the control space.
WorldModelworld_model_
 The world model that the controller uses for collision detection.
double xy_goal_tol_

Friends

class TrajectoryPlannerTest

Detailed Description

Computes control velocities for a robot given a costmap, a plan, and the robot's position in the world.

Definition at line 76 of file trajectory_planner.h.


Constructor & Destructor Documentation

iri_ackermann_local_planner::TrajectoryPlanner::TrajectoryPlanner ( WorldModel world_model,
const costmap_2d::Costmap2D costmap,
std::vector< geometry_msgs::Point footprint_spec,
double  max_acc = 1.0,
double  max_vel = 0.3,
double  min_vel = -0.3,
double  max_steer_acc = 1.0,
double  max_steer_vel = 0.5,
double  min_steer_vel = -0.5,
double  max_steer_angle = 0.35,
double  min_steer_angle = -0.35,
double  axis_distance = 1.65,
double  sim_time = 10.0,
double  sim_granularity = 0.025,
int  vx_samples = 20,
int  vtheta_samples = 20,
double  pdist_scale = 0.6,
double  gdist_scale = 0.8,
double  occdist_scale = 0.01,
double  hdiff_scale = 1.0,
bool  simple_attractor = false,
double  angular_sim_granularity = 0.025,
int  heading_points = 8,
double  xy_goal_tol = 0.5 
)

Constructs a trajectory controller.

Parameters:
world_modelThe WorldModel the trajectory controller uses to check for collisions
costmapA reference to the Costmap the controller should use
footprint_specA polygon representing the footprint of the robot. (Must be convex)
inscribed_radiusThe radius of the inscribed circle of the robot
circumscribed_radiusThe radius of the circumscribed circle of the robot
acc_lim_xThe acceleration limit of the robot in the x direction
acc_lim_yThe acceleration limit of the robot in the y direction
acc_lim_thetaThe acceleration limit of the robot in the theta direction
sim_timeThe number of seconds to "roll-out" each trajectory
sim_granularityThe distance between simulation points should be small enough that the robot doesn't hit things
vx_samplesThe number of trajectories to sample in the x dimension
vtheta_samplesThe number of trajectories to sample in the theta dimension
pdist_scaleA scaling factor for how close the robot should stay to the path
gdist_scaleA scaling factor for how aggresively the robot should pursue a local goal
occdist_scaleA scaling factor for how much the robot should prefer to stay away from obstacles
heading_lookaheadHow far the robot should look ahead of itself when differentiating between different rotational velocities
oscillation_reset_distThe distance the robot must travel before it can explore rotational velocities that were unsuccessful in the past
escape_reset_distThe distance the robot must travel before it can exit escape mode
escape_reset_thetaThe distance the robot must rotate before it can exit escape mode
holonomic_robotSet this to true if the robot being controlled can take y velocities and false otherwise
max_vel_xThe maximum x velocity the controller will explore
min_vel_xThe minimum x velocity the controller will explore
max_vel_thThe maximum rotational velocity the controller will explore
min_vel_thThe minimum rotational velocity the controller will explore
min_in_place_vel_thThe absolute value of the minimum in-place rotational velocity the controller will explore
backup_velThe velocity to use while backing up
dwaSet this to true to use the Dynamic Window Approach, false to use acceleration limits
heading_scoringSet this to true to score trajectories based on the robot's heading after 1 timestep
heading_scoring_timestepHow far to look ahead in time when we score heading based trajectories
simple_attractorSet this to true to allow simple attraction to a goal point instead of intelligent cost propagation
y_velsA vector of the y velocities the controller will explore
angular_sim_granularityThe distance between simulation points for angular velocity should be small enough that the robot doesn't hit things

Definition at line 89 of file trajectory_planner.cpp.

Destructs a trajectory controller.

Definition at line 111 of file trajectory_planner.cpp.


Member Function Documentation

bool iri_ackermann_local_planner::TrajectoryPlanner::checkTrajectory ( double  x,
double  y,
double  theta,
double  vx,
double  vy,
double  vtheta,
double  vx_samp,
double  vy_samp,
double  vtheta_samp 
)

Generate and score a single trajectory.

Parameters:
xThe x position of the robot
yThe y position of the robot
thetaThe orientation of the robot
vxThe x velocity of the robot
vyThe y velocity of the robot
vthetaThe theta velocity of the robot
vx_sampThe x velocity used to seed the trajectory
vy_sampThe y velocity used to seed the trajectory
vtheta_sampThe theta velocity used to seed the trajectory
Returns:
True if the trajectory is legal, false otherwise

Definition at line 684 of file trajectory_planner.cpp.

Trajectory iri_ackermann_local_planner::TrajectoryPlanner::createTrajectories ( double  x,
double  y,
double  theta,
double  vx,
double  vy,
double  vtheta,
double  acc_x,
double  acc_y,
double  acc_theta 
) [private]

Create the trajectories we wish to explore, score them, and return the best option.

Parameters:
xThe x position of the robot
yThe y position of the robot
thetaThe orientation of the robot
vxThe x velocity of the robot
vyThe y velocity of the robot
vthetaThe theta velocity of the robot
acc_xThe x acceleration limit of the robot
acc_yThe y acceleration limit of the robot
acc_thetaThe theta acceleration limit of the robot
Returns:

Definition at line 710 of file trajectory_planner.cpp.

Trajectory iri_ackermann_local_planner::TrajectoryPlanner::findBestPath ( tf::Stamped< tf::Pose global_pose,
tf::Stamped< tf::Pose global_vel,
tf::Stamped< tf::Pose > &  drive_velocities,
geometry_msgs::Twist &  ackermann_state 
)

Given the current position, orientation, and velocity of the robot, return a trajectory to follow.

Parameters:
global_poseThe current pose of the robot in world space
global_velThe current velocity of the robot in world space
drive_velocitiesWill be set to velocities to send to the robot base
Returns:
The selected path or trajectory

Definition at line 984 of file trajectory_planner.cpp.

double iri_ackermann_local_planner::TrajectoryPlanner::footprintCost ( double  x_i,
double  y_i,
double  theta_i 
) [private]

Checks the legality of the robot footprint at a position and orientation using the world model.

Parameters:
x_iThe x position of the robot
y_iThe y position of the robot
theta_iThe orientation of the robot
Returns:

Definition at line 1054 of file trajectory_planner.cpp.

void iri_ackermann_local_planner::TrajectoryPlanner::generateTrajectory ( double  x,
double  y,
double  theta,
double  vx,
double  vy,
double  vtheta,
double  vx_samp,
double  vy_samp,
double  vtheta_samp,
double  acc_x,
double  acc_y,
double  acc_theta,
double  impossible_cost,
Trajectory traj 
) [private]

Generate and score a single trajectory.

Parameters:
xThe x position of the robot
yThe y position of the robot
thetaThe orientation of the robot
vxThe x velocity of the robot
vyThe y velocity of the robot
vthetaThe theta velocity of the robot
vx_sampThe x velocity used to seed the trajectory
vy_sampThe y velocity used to seed the trajectory
vtheta_sampThe theta velocity used to seed the trajectory
acc_xThe x acceleration limit of the robot
acc_yThe y acceleration limit of the robot
acc_thetaThe theta acceleration limit of the robot
impossible_costThe cost value of a cell in the local map grid that is considered impassable
trajWill be set to the generated trajectory with its associated score

Definition at line 129 of file trajectory_planner.cpp.

bool iri_ackermann_local_planner::TrajectoryPlanner::getCellCosts ( int  cx,
int  cy,
float &  path_cost,
float &  goal_cost,
float &  occ_cost,
float &  total_cost 
)

Compute the components and total cost for a map grid cell.

Parameters:
cxThe x coordinate of the cell in the map grid
cyThe y coordinate of the cell in the map grid
path_costWill be set to the path distance component of the cost function
goal_costWill be set to the goal distance component of the cost function
occ_costWill be set to the costmap value of the cell
total_costWill be set to the value of the overall cost function, taking into account the scaling parameters
Returns:
True if the cell is traversible and therefore a legal location for the robot to move to

Definition at line 113 of file trajectory_planner.cpp.

Fill the outline of a polygon, in this case the robot footprint, in a grid.

Parameters:
footprintThe list of cells making up the footprint in the grid, will be modified to include all cells inside the footprint

Used to get the cells that make up the footprint of the robot.

Parameters:
x_iThe x position of the robot
y_iThe y position of the robot
theta_iThe orientation of the robot
fillIf true: returns all cells in the footprint of the robot. If false: returns only the cells that make up the outline of the footprint.
Returns:
The cells that make up either the outline or entire footprint of the robot depending on fill

Definition at line 1148 of file trajectory_planner.cpp.

void iri_ackermann_local_planner::TrajectoryPlanner::getLineCells ( int  x0,
int  x1,
int  y0,
int  y1,
std::vector< iri_ackermann_local_planner::Position2DInt > &  pts 
) [private]

Use Bresenham's algorithm to trace a line between two points in a grid.

Parameters:
x0The x coordinate of the first point
x1The x coordinate of the second point
y0The y coordinate of the first point
y1The y coordinate of the second point
ptsWill be filled with the cells that lie on the line in the grid
void iri_ackermann_local_planner::TrajectoryPlanner::getLocalGoal ( double &  x,
double &  y 
)

Accessor for the goal the robot is currently pursuing in world corrdinates.

Parameters:
xWill be set to the x position of the local goal
yWill be set to the y position of the local goal

Definition at line 1258 of file trajectory_planner.cpp.

double iri_ackermann_local_planner::TrajectoryPlanner::headingDiff ( int  cell_x,
int  cell_y,
double  x,
double  y,
double  heading 
) [private]

Definition at line 549 of file trajectory_planner.cpp.

double iri_ackermann_local_planner::TrajectoryPlanner::lineCost ( int  x0,
int  x1,
int  y0,
int  y1 
) [private]

Definition at line 579 of file trajectory_planner.cpp.

double iri_ackermann_local_planner::TrajectoryPlanner::pointCost ( int  x,
int  y 
) [private]

Definition at line 658 of file trajectory_planner.cpp.

void iri_ackermann_local_planner::TrajectoryPlanner::reconfigure ( AckermannLocalPlannerConfig &  cfg)

Reconfigures the trajectory planner.

Definition at line 43 of file trajectory_planner.cpp.

double iri_ackermann_local_planner::TrajectoryPlanner::scoreTrajectory ( double  x,
double  y,
double  theta,
double  vx,
double  vy,
double  vtheta,
double  vx_samp,
double  vy_samp,
double  vtheta_samp 
)

Generate and score a single trajectory.

Parameters:
xThe x position of the robot
yThe y position of the robot
thetaThe orientation of the robot
vxThe x velocity of the robot
vyThe y velocity of the robot
vthetaThe theta velocity of the robot
vx_sampThe x velocity used to seed the trajectory
vy_sampThe y velocity used to seed the trajectory
vtheta_sampThe theta velocity used to seed the trajectory
Returns:
The score (as double)

Definition at line 698 of file trajectory_planner.cpp.

void iri_ackermann_local_planner::TrajectoryPlanner::updatePlan ( const std::vector< geometry_msgs::PoseStamped > &  new_plan,
bool  compute_dists = false 
)

Update the plan that the controller is following.

Parameters:
new_planA new plan for the controller to follow
compute_distsWheter or not to compute path/goal distances when a plan is updated

Friends And Related Function Documentation

friend class TrajectoryPlannerTest [friend]

Definition at line 77 of file trajectory_planner.h.


Member Data Documentation

Definition at line 300 of file trajectory_planner.h.

Definition at line 308 of file trajectory_planner.h.

Definition at line 303 of file trajectory_planner.h.

Definition at line 306 of file trajectory_planner.h.

Definition at line 307 of file trajectory_planner.h.

Definition at line 304 of file trajectory_planner.h.

Definition at line 305 of file trajectory_planner.h.

Definition at line 302 of file trajectory_planner.h.

Definition at line 301 of file trajectory_planner.h.

The distance between angular simulation points.

Definition at line 287 of file trajectory_planner.h.

Definition at line 314 of file trajectory_planner.h.

Provides access to cost map information.

Definition at line 276 of file trajectory_planner.h.

The footprint specification of the robot.

Definition at line 279 of file trajectory_planner.h.

Definition at line 292 of file trajectory_planner.h.

The global path for the robot to follow.

Definition at line 281 of file trajectory_planner.h.

Definition at line 283 of file trajectory_planner.h.

Storage for the local goal the robot is pursuing.

Definition at line 283 of file trajectory_planner.h.

Scaling factors for the controller's cost function.

Definition at line 292 of file trajectory_planner.h.

Definition at line 311 of file trajectory_planner.h.

The local map grid where we propagate goal and path distance.

Definition at line 275 of file trajectory_planner.h.

Definition at line 292 of file trajectory_planner.h.

Definition at line 292 of file trajectory_planner.h.

The distance between simulation points.

Definition at line 286 of file trajectory_planner.h.

The number of seconds each trajectory is "rolled-out".

Definition at line 285 of file trajectory_planner.h.

Enables simple attraction to a goal point.

Definition at line 310 of file trajectory_planner.h.

Definition at line 298 of file trajectory_planner.h.

Definition at line 294 of file trajectory_planner.h.

Used for scoring trajectories.

Definition at line 294 of file trajectory_planner.h.

The number of samples we'll take in the theta dimension of the control space.

Definition at line 290 of file trajectory_planner.h.

The number of samples we'll take in the x dimenstion of the control space.

Definition at line 289 of file trajectory_planner.h.

The world model that the controller uses for collision detection.

Definition at line 277 of file trajectory_planner.h.

Definition at line 312 of file trajectory_planner.h.


The documentation for this class was generated from the following files:


iri_ackermann_local_planner
Author(s): Sergi Hernandez Juan
autogenerated on Fri Dec 6 2013 23:50:18