|
|
|
@ -78,89 +78,87 @@ float constrain(float val, float min, float max)
@@ -78,89 +78,87 @@ float constrain(float val, float min, float max)
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
const MultirotorMixer::Rotor _config_quad_x[] = { |
|
|
|
|
{ -0.707107, 0.707107, 1.00 }, |
|
|
|
|
{ 0.707107, -0.707107, 1.00 }, |
|
|
|
|
{ 0.707107, 0.707107, -1.00 }, |
|
|
|
|
{ -0.707107, -0.707107, -1.00 }, |
|
|
|
|
{ -0.707107, 0.707107, 1.000000 }, |
|
|
|
|
{ 0.707107, -0.707107, 1.000000 }, |
|
|
|
|
{ 0.707107, 0.707107, -1.000000 }, |
|
|
|
|
{ -0.707107, -0.707107, -1.000000 }, |
|
|
|
|
}; |
|
|
|
|
const MultirotorMixer::Rotor _config_quad_plus[] = { |
|
|
|
|
{ -1.000000, 0.000000, 1.00 }, |
|
|
|
|
{ 1.000000, 0.000000, 1.00 }, |
|
|
|
|
{ 0.000000, 1.000000, -1.00 }, |
|
|
|
|
{ -0.000000, -1.000000, -1.00 }, |
|
|
|
|
{ -1.000000, 0.000000, 1.000000 }, |
|
|
|
|
{ 1.000000, 0.000000, 1.000000 }, |
|
|
|
|
{ 0.000000, 1.000000, -1.000000 }, |
|
|
|
|
{ -0.000000, -1.000000, -1.000000 }, |
|
|
|
|
}; |
|
|
|
|
//Add table for quad in V configuration, which is not generated by multi_tables!
|
|
|
|
|
const MultirotorMixer::Rotor _config_quad_v[] = { |
|
|
|
|
{ -0.3223, 0.9466, 0.4242 }, |
|
|
|
|
{ 0.3223, -0.9466, 1.0000 }, |
|
|
|
|
{ 0.3223, 0.9466, -0.4242 }, |
|
|
|
|
{ -0.3223, -0.9466, -1.0000 }, |
|
|
|
|
{ -0.322266, 0.946649, 0.424200 }, |
|
|
|
|
{ 0.322266, 0.946649, 1.000000 }, |
|
|
|
|
{ 0.322266, 0.946649, -0.424200 }, |
|
|
|
|
{ -0.322266, 0.946649, -1.000000 }, |
|
|
|
|
}; |
|
|
|
|
const MultirotorMixer::Rotor _config_quad_wide[] = { |
|
|
|
|
{ -0.927184, 0.374607, 1.00 }, |
|
|
|
|
{ 0.777146, -0.629320, 1.00 }, |
|
|
|
|
{ 0.927184, 0.374607, -1.00 }, |
|
|
|
|
{ -0.777146, -0.629320, -1.00 }, |
|
|
|
|
{ -0.927184, 0.374607, 1.000000 }, |
|
|
|
|
{ 0.777146, -0.629320, 1.000000 }, |
|
|
|
|
{ 0.927184, 0.374607, -1.000000 }, |
|
|
|
|
{ -0.777146, -0.629320, -1.000000 }, |
|
|
|
|
}; |
|
|
|
|
const MultirotorMixer::Rotor _config_hex_x[] = { |
|
|
|
|
{ -1.000000, 0.000000, -1.00 }, |
|
|
|
|
{ 1.000000, 0.000000, 1.00 }, |
|
|
|
|
{ 0.500000, 0.866025, -1.00 }, |
|
|
|
|
{ -0.500000, -0.866025, 1.00 }, |
|
|
|
|
{ -0.500000, 0.866025, 1.00 }, |
|
|
|
|
{ 0.500000, -0.866025, -1.00 }, |
|
|
|
|
{ -1.000000, 0.000000, -1.000000 }, |
|
|
|
|
{ 1.000000, 0.000000, 1.000000 }, |
|
|
|
|
{ 0.500000, 0.866025, -1.000000 }, |
|
|
|
|
{ -0.500000, -0.866025, 1.000000 }, |
|
|
|
|
{ -0.500000, 0.866025, 1.000000 }, |
|
|
|
|
{ 0.500000, -0.866025, -1.000000 }, |
|
|
|
|
}; |
|
|
|
|
const MultirotorMixer::Rotor _config_hex_plus[] = { |
|
|
|
|
{ 0.000000, 1.000000, -1.00 }, |
|
|
|
|
{ -0.000000, -1.000000, 1.00 }, |
|
|
|
|
{ 0.866025, -0.500000, -1.00 }, |
|
|
|
|
{ -0.866025, 0.500000, 1.00 }, |
|
|
|
|
{ 0.866025, 0.500000, 1.00 }, |
|
|
|
|
{ -0.866025, -0.500000, -1.00 }, |
|
|
|
|
{ 0.000000, 1.000000, -1.000000 }, |
|
|
|
|
{ -0.000000, -1.000000, 1.000000 }, |
|
|
|
|
{ 0.866025, -0.500000, -1.000000 }, |
|
|
|
|
{ -0.866025, 0.500000, 1.000000 }, |
|
|
|
|
{ 0.866025, 0.500000, 1.000000 }, |
|
|
|
|
{ -0.866025, -0.500000, -1.000000 }, |
|
|
|
|
}; |
|
|
|
|
const MultirotorMixer::Rotor _config_hex_cox[] = { |
|
|
|
|
{ -0.866025, 0.500000, -1.00 }, |
|
|
|
|
{ -0.866025, 0.500000, 1.00 }, |
|
|
|
|
{ -0.000000, -1.000000, -1.00 }, |
|
|
|
|
{ -0.000000, -1.000000, 1.00 }, |
|
|
|
|
{ 0.866025, 0.500000, -1.00 }, |
|
|
|
|
{ 0.866025, 0.500000, 1.00 }, |
|
|
|
|
{ -0.866025, 0.500000, -1.000000 }, |
|
|
|
|
{ -0.866025, 0.500000, 1.000000 }, |
|
|
|
|
{ -0.000000, -1.000000, -1.000000 }, |
|
|
|
|
{ -0.000000, -1.000000, 1.000000 }, |
|
|
|
|
{ 0.866025, 0.500000, -1.000000 }, |
|
|
|
|
{ 0.866025, 0.500000, 1.000000 }, |
|
|
|
|
}; |
|
|
|
|
const MultirotorMixer::Rotor _config_octa_x[] = { |
|
|
|
|
{ -0.382683, 0.923880, -1.00 }, |
|
|
|
|
{ 0.382683, -0.923880, -1.00 }, |
|
|
|
|
{ -0.923880, 0.382683, 1.00 }, |
|
|
|
|
{ -0.382683, -0.923880, 1.00 }, |
|
|
|
|
{ 0.382683, 0.923880, 1.00 }, |
|
|
|
|
{ 0.923880, -0.382683, 1.00 }, |
|
|
|
|
{ 0.923880, 0.382683, -1.00 }, |
|
|
|
|
{ -0.923880, -0.382683, -1.00 }, |
|
|
|
|
{ -0.382683, 0.923880, -1.000000 }, |
|
|
|
|
{ 0.382683, -0.923880, -1.000000 }, |
|
|
|
|
{ -0.923880, 0.382683, 1.000000 }, |
|
|
|
|
{ -0.382683, -0.923880, 1.000000 }, |
|
|
|
|
{ 0.382683, 0.923880, 1.000000 }, |
|
|
|
|
{ 0.923880, -0.382683, 1.000000 }, |
|
|
|
|
{ 0.923880, 0.382683, -1.000000 }, |
|
|
|
|
{ -0.923880, -0.382683, -1.000000 }, |
|
|
|
|
}; |
|
|
|
|
const MultirotorMixer::Rotor _config_octa_plus[] = { |
|
|
|
|
{ 0.000000, 1.000000, -1.00 }, |
|
|
|
|
{ -0.000000, -1.000000, -1.00 }, |
|
|
|
|
{ -0.707107, 0.707107, 1.00 }, |
|
|
|
|
{ -0.707107, -0.707107, 1.00 }, |
|
|
|
|
{ 0.707107, 0.707107, 1.00 }, |
|
|
|
|
{ 0.707107, -0.707107, 1.00 }, |
|
|
|
|
{ 1.000000, 0.000000, -1.00 }, |
|
|
|
|
{ -1.000000, 0.000000, -1.00 }, |
|
|
|
|
{ 0.000000, 1.000000, -1.000000 }, |
|
|
|
|
{ -0.000000, -1.000000, -1.000000 }, |
|
|
|
|
{ -0.707107, 0.707107, 1.000000 }, |
|
|
|
|
{ -0.707107, -0.707107, 1.000000 }, |
|
|
|
|
{ 0.707107, 0.707107, 1.000000 }, |
|
|
|
|
{ 0.707107, -0.707107, 1.000000 }, |
|
|
|
|
{ 1.000000, 0.000000, -1.000000 }, |
|
|
|
|
{ -1.000000, 0.000000, -1.000000 }, |
|
|
|
|
}; |
|
|
|
|
const MultirotorMixer::Rotor _config_octa_cox[] = { |
|
|
|
|
{ -0.707107, 0.707107, 1.00 }, |
|
|
|
|
{ 0.707107, 0.707107, -1.00 }, |
|
|
|
|
{ 0.707107, -0.707107, 1.00 }, |
|
|
|
|
{ -0.707107, -0.707107, -1.00 }, |
|
|
|
|
{ 0.707107, 0.707107, 1.00 }, |
|
|
|
|
{ -0.707107, 0.707107, -1.00 }, |
|
|
|
|
{ -0.707107, -0.707107, 1.00 }, |
|
|
|
|
{ 0.707107, -0.707107, -1.00 }, |
|
|
|
|
{ -0.707107, 0.707107, 1.000000 }, |
|
|
|
|
{ 0.707107, 0.707107, -1.000000 }, |
|
|
|
|
{ 0.707107, -0.707107, 1.000000 }, |
|
|
|
|
{ -0.707107, -0.707107, -1.000000 }, |
|
|
|
|
{ 0.707107, 0.707107, 1.000000 }, |
|
|
|
|
{ -0.707107, 0.707107, -1.000000 }, |
|
|
|
|
{ -0.707107, -0.707107, 1.000000 }, |
|
|
|
|
{ 0.707107, -0.707107, -1.000000 }, |
|
|
|
|
}; |
|
|
|
|
const MultirotorMixer::Rotor _config_duorotor[] = { |
|
|
|
|
{ -1.000000, 0.000000, 0.00 }, |
|
|
|
|
{ 1.000000, 0.000000, 0.00 }, |
|
|
|
|
const MultirotorMixer::Rotor _config_twin_engine[] = { |
|
|
|
|
{ -1.000000, 0.000000, 0.000000 }, |
|
|
|
|
{ 1.000000, 0.000000, 0.000000 }, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const MultirotorMixer::Rotor *_config_index[MultirotorMixer::MAX_GEOMETRY] = { |
|
|
|
|
&_config_quad_x[0], |
|
|
|
|
&_config_quad_plus[0], |
|
|
|
@ -172,7 +170,7 @@ const MultirotorMixer::Rotor *_config_index[MultirotorMixer::MAX_GEOMETRY] = {
@@ -172,7 +170,7 @@ const MultirotorMixer::Rotor *_config_index[MultirotorMixer::MAX_GEOMETRY] = {
|
|
|
|
|
&_config_octa_x[0], |
|
|
|
|
&_config_octa_plus[0], |
|
|
|
|
&_config_octa_cox[0], |
|
|
|
|
&_config_duorotor[0], |
|
|
|
|
&_config_twin_engine[0], |
|
|
|
|
}; |
|
|
|
|
const unsigned _config_rotor_count[MultirotorMixer::MAX_GEOMETRY] = { |
|
|
|
|
4, /* quad_x */ |
|
|
|
|