aboutsummaryrefslogtreecommitdiff
path: root/src/modules/systemlib/mixer/multi_tables
blob: 683c630409a62af5cebedeee5f8406d13aaa0c8f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/tclsh
#
# Generate multirotor mixer scale tables compatible with the ArduCopter layout
#

proc rad {a} { expr ($a / 360.0) * 2 * acos(-1) }
proc rcos {a} { expr cos([rad $a])}

set quad_x {
	  45 CCW
	-135 CCW
	 -45 CW
	 135 CW
}

set quad_plus {
	  90 CCW
	 -90 CCW
	   0 CW
	 180 CW
}

set quad_v {
	  68 CCW
	-136 CCW
	 -68 CW
	 136 CW
}

set quad_wide {
	  68 CCW
	-129 CCW
	 -68 CW
	 129 CW
}

set hex_x {
	  90 CW
	 -90 CCW
	 -30 CW
	 150 CCW
	  30 CCW
	-150 CW
}

set hex_plus {
	   0 CW
	 180 CCW
	-120 CW
	  60 CCW
	 -60 CCW
	 120 CW
}

set octa_x {
	  22.5 CW
	-157.5 CW
	  67.5 CCW
	 157.5 CCW
	 -22.5 CCW
	-112.5 CCW
	 -67.5 CW
	 112.5 CW
}

set octa_plus {
	   0 CW
	 180 CW
	  45 CCW
	 135 CCW
	 -45 CCW
	-135 CCW
	 -90 CW
	  90 CW
}

set tables {quad_x quad_plus quad_v quad_wide hex_x hex_plus octa_x octa_plus}

proc factors {a d} { puts [format "\t{ %9.6f, %9.6f, %5.2f }," [rcos [expr $a + 90]] [rcos $a] [expr -$d]]}

foreach table $tables {
	puts [format "const MultirotorMixer::Rotor _config_%s\[\] = {" $table]

	upvar #0 $table angles
	foreach {angle dir} $angles {
		if {$dir == "CW"} {
			set dd 1.0
		} else {
			set dd -1.0
		}
		factors $angle $dd
	}
	puts "};"
}

puts "const MultirotorMixer::Rotor *_config_index\[MultirotorMixer::Geometry::MAX_GEOMETRY\] = {"
foreach table $tables {
	puts [format "\t&_config_%s\[0\]," $table]
}
puts "};"

puts "const unsigned _config_rotor_count\[MultirotorMixer::Geometry::MAX_GEOMETRY\] = {"
foreach table $tables {
	upvar #0 $table angles
	puts [format "\t%u, /* %s */" [expr [llength $angles] / 2] $table]
}
puts "};"