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)) |