how to integrate angle in matlab
4 次查看(过去 30 天)
显示 更早的评论
Hi! I have these three state equations:
x_dot = v*cos(alpha);
y_dot = v*sin(alpha);
alpha_dot = lateralAcceleration/v;
I have to integrate these states to get x,y and alpha. I am implementing this on simulink. But I am facing a problem that while integrating the angle alpha goes to a very large number. I need it to be in a certain range such as range of atan2. Is there a way to do it?
I have attached the image which shows my current implementation.
0 个评论
采纳的回答
JMP Phillips
2015-8-19
If alpha_dot is going very large, you could consider filtering or smoothing out the large jumps.
You can put a saturation block in to limit your alpha_dot between lower and upper values: http://au.mathworks.com/help/simulink/slref/saturation.html
Alternatively or additionally you can insert a gain block: alpha_dot = k*lateralAcceleration/v where k is a proportional gain that you can tune such that alpha_dot is within an acceptable range.
After you integrate alpha_dot to get alpha you need to wrap it between -pi and pi or 0 and 2 pi, whatever convention you are using, using mod, e.g.
angle_wrapped = ( mod( (angle-angle_min),(angle_max-angle_min)) +angle_min);
I don't remember if Simulink already has a wrap block, but there is already a wrapToPi function in the mapping toolbox if you have that.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!