Project

General

Profile

Statistics
| Revision:

root / trunk / code / behaviors / formation_control / push_pull / vectorSizeSpecs.m @ 1512

History | View | Annotate | Download (1.63 KB)

1 1510 jsexton
% vectorSizeSpecs - Script used to help calculate the max scalar value by
2
% 		which to multiply the BOM unit vectors (thus increasing the
3
%		precision of the scaled vectors) such that in the worst case, the
4
%		total net sum will not overflow the data type used to represent
5
%		the net vector components.
6
%
7
%	Author: John Sexton, Colony Project, CMU Robotics Club
8
9
10
% Parameters
11
maxIntensity = 255;
12
dataBits = 16;
13
scalar = 25;
14
15
n = 0:8;
16
angle = n * 2 * pi / 16;
17
18
vector_components = sin(angle);
19
max_net_component = sum(vector_components);
20
21
% Formula for max_net_component (mnc), obtained by summing
22
% values from the unit circle at angles of 0 : pi/8 : pi
23
% in quadrants I and II
24
mnc = 1;									%sin(pi/2)
25
mnc = mnc + (2*  (1/2)*sqrt(2+sqrt(2)));	%sin(3pi/8) and sin(5pi/8)
26
mnc = mnc + (2*  sqrt(2)/2);				%sin(pi/4) and sin(3pi/4)
27
mnc = mnc + (2*  (1/2)*sqrt(2-sqrt(2)));	%sin(pi/8) and sin(7pi/8)
28
29
30
calc_scalar = (2^(dataBits-1)-1) / (max_net_component * maxIntensity);
31 1512 jsexton
% calc_scalar = 25.560 for 16 bits => use 25 as scalar for int data type
32 1510 jsexton
33
fprintf('With %d data bits, calculated scalar value: %.3f\n\n', dataBits, calc_scalar);
34
35
36
% Check worst case
37
scaled_vector_components = scalar * vector_components;
38
39 1512 jsexton
worst_case = floor(scaled_vector_components) * maxIntensity;
40 1510 jsexton
worst_sum = sum(worst_case);
41 1512 jsexton
fprintf('With scalar %d, max worst case sum: %d\n', scalar, round(worst_sum));
42 1510 jsexton
fprintf('Max number: 2^(%d-1) - 1 = %d\n', dataBits, (2^(dataBits-1)-1));
43 1512 jsexton
44
45
% Calculate the x and y component arrays which should be used in the
46
% BOM Vector Component Tables in push_pull.c
47
N = 0:15;
48
x_comp = floor(scalar * cos(2 * pi / 16 * N))
49
y_comp = floor(scalar * sin(2 * pi / 16 * N))