aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--ROMFS/px4fmu_common/init.d/rc.IO_QUAD (renamed from ROMFS/scripts/rc.IO_QUAD)0
-rw-r--r--ROMFS/px4fmu_common/mixers/FMU_quad_w.mix6
-rw-r--r--src/modules/systemlib/mixer/mixer.h1
-rw-r--r--src/modules/systemlib/mixer/mixer_multirotor.cpp11
-rwxr-xr-xsrc/modules/systemlib/mixer/multi_tables9
6 files changed, 27 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 8f566a002..224910e0f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (C) 2012 PX4 Development Team. All rights reserved.
+# Copyright (c) 2012, 2013 PX4 Development Team. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
diff --git a/ROMFS/scripts/rc.IO_QUAD b/ROMFS/px4fmu_common/init.d/rc.IO_QUAD
index 287cb0483..287cb0483 100644
--- a/ROMFS/scripts/rc.IO_QUAD
+++ b/ROMFS/px4fmu_common/init.d/rc.IO_QUAD
diff --git a/ROMFS/px4fmu_common/mixers/FMU_quad_w.mix b/ROMFS/px4fmu_common/mixers/FMU_quad_w.mix
new file mode 100644
index 000000000..81b4af30b
--- /dev/null
+++ b/ROMFS/px4fmu_common/mixers/FMU_quad_w.mix
@@ -0,0 +1,6 @@
+Multirotor mixer for PX4FMU
+===========================
+
+This file defines a single mixer for a quadrotor with a wide configuration. All controls are mixed 100%.
+
+R: 4w 10000 10000 10000 0
diff --git a/src/modules/systemlib/mixer/mixer.h b/src/modules/systemlib/mixer/mixer.h
index 40d37fce2..bbfa130a9 100644
--- a/src/modules/systemlib/mixer/mixer.h
+++ b/src/modules/systemlib/mixer/mixer.h
@@ -419,6 +419,7 @@ public:
QUAD_X = 0, /**< quad in X configuration */
QUAD_PLUS, /**< quad in + configuration */
QUAD_V, /**< quad in V configuration */
+ QUAD_WIDE, /**< quad in wide configuration */
HEX_X, /**< hex in X configuration */
HEX_PLUS, /**< hex in + configuration */
OCTA_X,
diff --git a/src/modules/systemlib/mixer/mixer_multirotor.cpp b/src/modules/systemlib/mixer/mixer_multirotor.cpp
index d79811c0f..8ded0b05c 100644
--- a/src/modules/systemlib/mixer/mixer_multirotor.cpp
+++ b/src/modules/systemlib/mixer/mixer_multirotor.cpp
@@ -88,6 +88,12 @@ const MultirotorMixer::Rotor _config_quad_v[] = {
{ 0.927184, 0.374607, -1.00 },
{ -0.694658, -0.719340, -1.00 },
};
+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 },
+};
const MultirotorMixer::Rotor _config_hex_x[] = {
{ -1.000000, 0.000000, -1.00 },
{ 1.000000, 0.000000, 1.00 },
@@ -128,6 +134,7 @@ const MultirotorMixer::Rotor *_config_index[MultirotorMixer::Geometry::MAX_GEOME
&_config_quad_x[0],
&_config_quad_plus[0],
&_config_quad_v[0],
+ &_config_quad_wide[0],
&_config_hex_x[0],
&_config_hex_plus[0],
&_config_octa_x[0],
@@ -137,6 +144,7 @@ const unsigned _config_rotor_count[MultirotorMixer::Geometry::MAX_GEOMETRY] = {
4, /* quad_x */
4, /* quad_plus */
4, /* quad_v */
+ 4, /* quad_wide */
6, /* hex_x */
6, /* hex_plus */
8, /* octa_x */
@@ -195,6 +203,9 @@ MultirotorMixer::from_text(Mixer::ControlCallback control_cb, uintptr_t cb_handl
} else if (!strcmp(geomname, "4v")) {
geometry = MultirotorMixer::QUAD_V;
+ } else if (!strcmp(geomname, "4w")) {
+ geometry = MultirotorMixer::QUAD_WIDE;
+
} else if (!strcmp(geomname, "6+")) {
geometry = MultirotorMixer::HEX_PLUS;
diff --git a/src/modules/systemlib/mixer/multi_tables b/src/modules/systemlib/mixer/multi_tables
index 19a8239a6..683c63040 100755
--- a/src/modules/systemlib/mixer/multi_tables
+++ b/src/modules/systemlib/mixer/multi_tables
@@ -27,6 +27,13 @@ set quad_v {
136 CW
}
+set quad_wide {
+ 68 CCW
+ -129 CCW
+ -68 CW
+ 129 CW
+}
+
set hex_x {
90 CW
-90 CCW
@@ -67,7 +74,7 @@ set octa_plus {
90 CW
}
-set tables {quad_x quad_plus quad_v hex_x hex_plus octa_x octa_plus}
+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]]}