Browse Source

added OSC method to change smoothing factor

eLandon_Miix 3 years ago
parent
commit
2aa2936be3
6 changed files with 38 additions and 8 deletions
  1. 6 1
      README.md
  2. 3 0
      include/imu.h
  3. 2 2
      include/oscmgr.h
  4. 7 4
      src/imu.cpp
  5. 14 0
      src/main.cpp
  6. 6 1
      src/oscmgr.cpp

+ 6 - 1
README.md

@@ -9,10 +9,15 @@ Default **target IP** can be changed through webserver
 - **/calibration** :  
 triggers a gyro calibration process, useful if the sensor drifts. Turn the sensor all the way around during 15 seconds
 
+- **/smoothing gyro ahrs**  
+changes smoothing factors (0 to 1, 1 no smoothing, 0 static)  
+
 ## from ESP-IMU
 
+-**connected**  
+message is sent once ESP-IMU as established connection to UDP port
+
 - **/button/[A, B, C]** :  
 message is sent on A/B/C button state change  
 1 when pressed, 0 when released
 
-- **/**

+ 3 - 0
include/imu.h

@@ -29,6 +29,9 @@ extern float pitch_ahrs ;
 extern float roll_ahrs ;
 extern float yaw_ahrs ;
 
+extern float gyro_smoothing;
+extern float ahrs_smoothing;
+
 extern Smoothed<float> yaw_smooth;
 extern Smoothed<float> pitch_smooth;
 extern Smoothed<float> roll_smooth;

+ 2 - 2
include/oscmgr.h

@@ -11,8 +11,8 @@ template <typename TYPE> void sendOSC(const char * adress, TYPE parameter);
 void sendOSC_3f(const char * adress, float parameter, float parameter2, float parameter3);
 
 extern bool calib_flag;
-
-
+extern float OSC_gyro_smoothing;
+extern float OSC_ahrs_smoothing;
 
 void printTest(OSCMessage &msg) ;
 void OSCcb_calibGyro(OSCMessage &msg) ;

+ 7 - 4
src/imu.cpp

@@ -18,6 +18,9 @@ Calib calib;
 
 BMM150class bmm150;
 
+float gyro_smoothing = 0.00001;
+float ahrs_smoothing = 0.001;
+
 float accX = 0.0F;
 float accY = 0.0F;
 float accZ = 0.0F;
@@ -67,11 +70,11 @@ Smoothed<float> yaw_smooth;
 Smoothed<float> pitch_smooth;
 Smoothed<float> roll_smooth;
 
-ResponsiveAnalogRead gyro_rar(-1, false, 0.000001);
+ResponsiveAnalogRead gyro_rar(-1, false, gyro_smoothing);
 
-ResponsiveAnalogRead yaw_rar(-1, true, 0.001);
-ResponsiveAnalogRead pitch_rar(-1, true);
-ResponsiveAnalogRead roll_rar(-1, true);
+ResponsiveAnalogRead yaw_rar(-1, true, ahrs_smoothing);
+ResponsiveAnalogRead pitch_rar(-1, true, ahrs_smoothing);
+ResponsiveAnalogRead roll_rar(-1, true, ahrs_smoothing);
 
 void loadCalibration(const char *calibFile, Calib &calib) {
   // Open file for reading

+ 14 - 0
src/main.cpp

@@ -222,6 +222,20 @@ void loop() {
       calib_flag = false;
       calibGyro();
     }
+  bool saveConfig = false;
+  if(OSC_gyro_smoothing != gyro_smoothing){
+    gyro_smoothing = OSC_gyro_smoothing;
+    gyro_rar.setSnapMultiplier(OSC_gyro_smoothing);
+    saveConfig = true;
+  }
+  if(OSC_ahrs_smoothing != ahrs_smoothing){
+    ahrs_smoothing = OSC_ahrs_smoothing;
+    yaw_rar.setSnapMultiplier(ahrs_smoothing);
+    pitch_rar.setSnapMultiplier(ahrs_smoothing);
+    roll_rar.setSnapMultiplier(ahrs_smoothing);
+    saveConfig = true;
+  }
+  if(saveConfig){}
   handle_imu();
 //send sensor data 
   if(current_time-portal_last_sent>portal_rate){

+ 6 - 1
src/oscmgr.cpp

@@ -15,7 +15,8 @@ IPAddress UDP_Out_IP(192, 168, 0, 27) ;
 int UDP_Out_Port = 12000 ;
 // IPAddress ipMulti(239, 0, 0, 56);
 // unsigned int portMulti = 12345;      // local port to listen on
-
+float OSC_gyro_smoothing = 0.00001;
+float OSC_ahrs_smoothing = 0.001;
 
 template <typename TYPE> void sendOSC(const char * adress, TYPE parameter) {
   OSCMessage OSCmsg(adress);
@@ -88,6 +89,10 @@ void handle_OSC() {
     if (!OSCin.hasError()) {
       OSCin.dispatch("/test", printTest);
       OSCin.dispatch("/calibration",OSCcb_calibGyro);
+      OSCin.dispatch("/smoothing",[](OSCMessage &msg){
+                                     OSC_gyro_smoothing = msg.getFloat(0);
+                                     OSC_ahrs_smoothing = msg.getFloat(1); 
+                                      });
       // if (OSCin.match(ESP_NAME)){
       //   Serial.println("matched");
       //   OSCin.dispatch("/test", printTest);