Bang-bang acceleration control of angular position
Version 1.0.0 (3.46 KB) by
Aaron T. Becker's Robot Swarm Lab
Compares a bang-bang 1 dimensional controller with a controller based on the SmootherStep function.
function angs = bangBangAngles(ang0, angGoal, accMax, dt)
Computes angular positions for a bang-bang acceleration control that moves the robot from zero velocity at ang0 (rad) to zero velocity at angGoal (rad) as fast as possible with maximum acccleration accMax (rad/s). The output is a vector of positions every dt seconds. This is suitable to compute set of angular position commands for a robot joint. Bang-bang controller uses max acceleration until the halfway position, then does -1*max acceleration until the goal is reached.
inputs:
- ang0: initial angle (rad)
- angGoal: goal angle (rad)
- accMax: maximum acceleration (rad)
- dt: time resolution of angular positions to return (s)
outputs:
- angs: a set of angular positions, every dt s for the object as it moves from ang0 to angGoal
The control picks the fastest (clockwise or counterclockwise) to go from the angle atan2( sin(ang0), cos(ang0) ) to atan2( sin(angGoal), cos(angGoal) ).
The control input is a bang-bang controller with acceleration
sign(angDelta)*accMax for tHalf seconds and
-sign(angDelta)*accMax for tHalf seconds.
The velocity of the robot is then
sign(angDelta)*accMax*t for t from 0 to tHalf and
sign(angDelta)*accMax*tHalf - sign(angDelta)*accMax*(t-tHalf) until 2*tHalf.
The position of the robot is then
ang0 + sign(angDelta)*1/2*accMax*t^2 for t from 0 to tHalf and
ang0 + sign(angDelta)*(1/2*accMax*tHalf^2 + accMax*tHalf*(t-tHalf)
- 1/2*accMax*(t-tHalf)^2) until 2*tHalf.
At tHalf the position of the robot is halfway to the goal, so we can solve for tHalf:
sign(angDelta)*1/2*accMax*tHalf^2 = angDelta/2
sign(angDelta)*accMax*tHalf^2 = angDelta
tHalf^2 = abs(angDelta/accMax)
tHalf = sqrt(abs(angDelta/accMax))
Aaron Becker, April 26, 2023.
function angs = smootherStepAngles(ang0, angGoal, T, dt)
computes angular positions for a smooth control input that moves the robot from ang0 to angGoal in total time T. The output is a vector of positions every dt seconds. This is suitable to compute set of angular position commands for a robot joint. Code is explained at https://en.wikipedia.org/wiki/Smoothstep, Ken Perlin suggested [Texturing and Modeling, Third Edition: A Procedural Approach] an improved version of the commonly used first-order smoothstep function, equivalent to the second order of its general form. It has zero 1st- and 2nd-order derivatives at x = 0 and x = 1.
inputs:
- ang0: initial angle (rad)
- angGoal: goal angle (rad)
- T: time to reach goal (s)
- dt: time resolution of angular positions to return (s)
outputs:
- angs: a set of angular positions, every dt s for the object as it moves from ang0 to angGoal
function testbangBangAngles
compares the two functions bangBangAngles() and smootherStepAngles()
Cite As
Aaron T. Becker's Robot Swarm Lab (2024). Bang-bang acceleration control of angular position (https://www.mathworks.com/matlabcentral/fileexchange/128539-bang-bang-acceleration-control-of-angular-position), MATLAB Central File Exchange. Retrieved .
MATLAB Release Compatibility
Created with
R2023a
Compatible with any release
Platform Compatibility
Windows macOS LinuxTags
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Discover Live Editor
Create scripts with code, output, and formatted text in a single executable document.
Version | Published | Release Notes | |
---|---|---|---|
1.0.0 |