View Single Post
  #1   Spotlight this post!  
Unread 18-08-2014, 14:43
Jared's Avatar
Jared Jared is offline
Registered User
no team
Team Role: Programmer
 
Join Date: Aug 2013
Rookie Year: 2012
Location: Connecticut
Posts: 602
Jared has a reputation beyond reputeJared has a reputation beyond reputeJared has a reputation beyond reputeJared has a reputation beyond reputeJared has a reputation beyond reputeJared has a reputation beyond reputeJared has a reputation beyond reputeJared has a reputation beyond reputeJared has a reputation beyond reputeJared has a reputation beyond reputeJared has a reputation beyond repute
Re: paper: Driving a Robot — Fastest Path from A to B

Quote:
Originally Posted by Jared Russell View Post
If you want to make sure that your path is both velocity and acceleration limited, here is a simple and widely used method:

1. For each point along the path, compute the maximum allowable velocity. For straight segments, this is simply the maximum motor velocity. For points along curves, you can compute the radius of curvature and from that derive the maximum linear speed that would let you follow the curve (based on setting the outside wheel's speed to the maximum).

You now have a discontinuous velocity profile that might look something like this:
Code:
Initial maximum velocities
Plot of waypoint # (x) vs. maximum velocity (y)

----      -----       ---------  (fast)
    ------             
               -------           (slow)
2. Now iterate through the path (beginning to end) and for each point, set max_velocity[i] = min(max_velocity[i], max_velocity[i - 1] + max_accel_over_distance_between_points). You will now have a profile that looks something like:

Code:
Intermediate maximum velocities
Plot of waypoint # (x) vs. maximum velocity (y)

----       ----         -------  (fast)
    ------/            /
               -------/          (slow)
3. Iterate through the path from end to beginning, and for each point, set max_velocity[i] = min(max_velocity[i], max_velocity[i + 1] + max_decel_over_distance_between_points). Your final profile will look like:

Code:
Final maximum velocities respecting acceleration limits
Plot of waypoint # (x) vs. maximum velocity (y)

---        --           -------  (fast)
   \------/  \         /
              \-------/          (slow)
Thanks! This works perfectly for acceleration and velocity limits, even with fast full speed straight segments followed by extremely sharp turns. My issue was that I wasn't looking at the minimum- I was always looking at values that followed acceleration rules. Adding jerk will be more tricky, but I have an idea.
Reply With Quote