
10-07-2013, 09:22 PM
|
|
AKA Ryan Van Why
 FRC #0957 (SWARM)
Team Role: Alumni
|
|
Join Date: Sep 2009
Rookie Year: 2009
Location: Oregon
Posts: 168
|
|
|
Re: calculating position using follower wheels
Question 6 solution:
Code (slightly modified from my last script):
Spoiler for code:
Code:
% Set up various useful functions that don't require integration to calculate
rotate_CW = @(t) (exp(t) - 1)^(1/17);
forward = @(t) 5*sin(t/2);
strafe_right = @(t) 4*sin(t/2.2);
xvel = @(t,angle) cos(angle) * forward(t) + cos(angle - pi/2) * strafe_right(t);
yvel = @(t,angle) sin(angle) * forward(t) + sin(angle - pi/2) * strafe_right(t);
spd = @(t) sqrt(forward(t)^2 + strafe_right(t)^2);
% Set up for the ODE solution
tspan = [0 15];
x0 = [0; 0; 0; 5*pi/12]; % xpos, ypos, distance, angle
% The ODE function
dynamics = @(t,x) [xvel(t, x(4)); yvel(t, x(4)); spd(t); -rotate_CW(t)];
% Call ode45
diffsoln = ode45(dynamics, tspan, x0);
% Function for obtaining the state at a given time (for plotting)
statefun = @(t) deval(diffsoln, t);
% Time values for plot (using a lot of points so it looks good).
times = linspace(tspan(1), tspan(2), 10000);
% X and Y positions
xpos = [1 0 0 0] * statefun(times);
ypos = [0 1 0 0] * statefun(times);
% Do the plotting
plot(xpos, ypos, 'LineWidth', 5)
% Ending positions and distance
end_x = xpos(end)
end_y = ypos(end)
distance = [0 0 1 0] * statefun(tspan(2))
Perhaps I should stop and give someone else a chance to answer first -- this is way too easy when all I need to do is change a script I already wrote.
|