[chronojump] encoder diameter almost done
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] encoder diameter almost done
- Date: Fri, 17 Jan 2014 12:50:20 +0000 (UTC)
commit f1f98e5d55b0df5572951cb01708c99ea8272ae2
Author: Xavier de Blas <xaviblas gmail com>
Date: Fri Jan 17 13:49:59 2014 +0100
encoder diameter almost done
encoder/graph.R | 10 ++++++----
src/gui/encoder.cs | 26 ++++++++++++++------------
src/sqlite/encoder.cs | 2 +-
src/utilEncoder.cs | 14 +++++++++++---
4 files changed, 32 insertions(+), 20 deletions(-)
---
diff --git a/encoder/graph.R b/encoder/graph.R
index 300a17a..935879f 100644
--- a/encoder/graph.R
+++ b/encoder/graph.R
@@ -1602,13 +1602,15 @@ find.yrange <- function(singleFile, rawdata, curves) {
#encoderMode conversions
#in signals and curves, need to do conversions (invert, inertiaMomentum, diameter)
encoderModeConversions <- function(rawdata, encoderMode, diameter) {
- if(encoderMode == "LINEARINVERTED")
+ #write(rawdata, "debug-file.txt")
+ if(encoderMode == "LINEARINVERTED") {
rawdata = -rawdata
- if(encoderMode == "ROTARYAXIS") {
+ } else if(encoderMode == "ROTARYAXIS") {
ticksRotaryEncoder = 200 #our rotary axis encoder send 200 ticks by turn
- rawdata = ( rawdata / ticksRotaryEncoder ) * 2 * pi * ( diameter / 2 )
+ #diameter m -> mm
+ rawdata = ( rawdata / ticksRotaryEncoder ) * 2 * pi * ( diameter * 1000 / 2 )
}
- #write(rawdata, "debug-file.txt")
+ #write(rawdata, "debug-file2.txt")
return(rawdata)
}
diff --git a/src/gui/encoder.cs b/src/gui/encoder.cs
index 35932da..73d001f 100644
--- a/src/gui/encoder.cs
+++ b/src/gui/encoder.cs
@@ -51,7 +51,7 @@ public partial class ChronoJumpWindow
//at graph.R is converted to Kg*m^2 ( /10000 )
[Widget] Gtk.SpinButton spin_encoder_capture_inertial;
- [Widget] Gtk.SpinButton spin_encoder_capture_diameter;
+ [Widget] Gtk.SpinButton spin_encoder_capture_diameter; //diameter is always in m except in gui:
there is in cm
[Widget] Gtk.Button button_encoder_capture_inertial;
[Widget] Gtk.Box hbox_encoder_capture_diameter;
@@ -154,7 +154,7 @@ public partial class ChronoJumpWindow
private ArrayList encoderCompareInterperson; //personID:personName
private ArrayList encoderCompareIntersession; //sessionID:sessionDate
- private static int [] encoderReaded; //data coming from encoder
+ private static double [] encoderReaded; //data coming from encoder and converted (can be
double)
private static int encoderCaptureCountdown;
private static Gdk.Point [] encoderCapturePoints; //stored to be realtime displayed
private static int encoderCapturePointsCaptured; //stored to be realtime displayed
@@ -608,7 +608,8 @@ public partial class ChronoJumpWindow
else
data.Add(0);
- data.Add((double) spin_encoder_capture_diameter.Value);
+ //diameter is always in m except in gui: there is in cm
+ data.Add((double) spin_encoder_capture_diameter.Value / 100);
return data;
}
@@ -649,7 +650,8 @@ public partial class ChronoJumpWindow
checkbutton_encoder_capture_inverted.Active = false;
}
- spin_encoder_capture_diameter.Value = Convert.ToDouble(eSQL.diameter);
+ //diameter is always in m except in gui: there is in cm
+ spin_encoder_capture_diameter.Value = Convert.ToDouble(eSQL.diameter) * 100;
}
@@ -662,7 +664,7 @@ public partial class ChronoJumpWindow
* 2: "l", "li", "rf" or "ra". Linear, linear inverted, rotatory friction, rotatory axes
* 3: "i" or "-". Inertial or not
* 4: inertial moment in Kgxcm^2 or "-".
- * 5: diameter in cm
+ * 5: diameter in cm (in GUI. the rest is in meters)
*
* eg:
* p;ra;i;100;4
@@ -1854,11 +1856,11 @@ public partial class ChronoJumpWindow
//it's stored in file like this
int byteReadedRaw;
//this it's converted applying encoderModeConversions: inverted, inertial, diameter, demult,
...
- int byteReaded;
+ double byteReaded;
//initialize
int [] encoderReadedRaw = new int[recordingTime]; //stored to file in this method
- encoderReaded = new int[recordingTime]; //readed from drawing process:
updateEncoderCaptureGraphRCalc()
+ encoderReaded = new double[recordingTime]; //readed from drawing process:
updateEncoderCaptureGraphRCalc()
ArrayList encoderTypeArray = getEncoderTypeByCombos();
string encoderMode = encoderTypeArray[0].ToString();
@@ -1866,7 +1868,7 @@ public partial class ChronoJumpWindow
double diameter = Convert.ToDouble(encoderTypeArray[2]);
- int sum = 0;
+ double sum = 0;
string dataString = "";
string sep = "";
@@ -1945,7 +1947,7 @@ public partial class ChronoJumpWindow
//if string goes up or down
if(byteReaded != 0)
//store the direction
- directionNow = byteReaded / Math.Abs(byteReaded); //1 (up) or -1
(down)
+ directionNow = (int) byteReaded / (int) Math.Abs(byteReaded); //1
(up) or -1 (down)
//if we don't have changed the direction, store the last non-zero that we can
find
if(directionChangeCount == 0 && directionNow == directionLastMSecond) {
@@ -3894,7 +3896,7 @@ Log.WriteLine(str);
double height = 0;
- int [] curve = new int[ecc.endFrame - ecc.startFrame];
+ double [] curve = new double[ecc.endFrame - ecc.startFrame];
for(int k=0, j=ecc.startFrame; j < ecc.endFrame ; j ++) {
height += encoderReaded[j];
curve[k]=encoderReaded[j];
@@ -3912,7 +3914,7 @@ Log.WriteLine(str);
Log.Write(" uECGRC2 calling rdotnet ");
- IntegerVector curveToR = rengine.CreateIntegerVector(curve);
+ NumericVector curveToR = rengine.CreateNumericVector(curve);
rengine.SetSymbol("curveToR", curveToR);
//cannot do smooth.spline with less than 4 values
@@ -4003,7 +4005,7 @@ Log.WriteLine(str);
Log.Write(curveToR[i] + ","); //TODO: provar aixo!!
//create a curveToR with only reduced curve
- IntegerVector curveToRreduced = rengine.CreateIntegerVector(new int[x_end - x_ini]);
+ NumericVector curveToRreduced = rengine.CreateNumericVector(new double[x_end -
x_ini]);
for(int k=0, i=x_ini; i < x_end; i ++)
curveToRreduced[k++] = curveToR[i];
rengine.SetSymbol("curveToRreduced", curveToRreduced);
diff --git a/src/sqlite/encoder.cs b/src/sqlite/encoder.cs
index aec4edf..4e058ac 100644
--- a/src/sqlite/encoder.cs
+++ b/src/sqlite/encoder.cs
@@ -155,7 +155,7 @@ class SqliteEncoder : Sqlite
"', videoURL = '" + es.videoURL +
"', mode = '" + es.encoderMode +
"', inertiaMomentum = " + es.inertiaMomentum +
- ", diameter = " + es.diameter +
+ ", diameter = " + Util.ConvertToPoint(es.diameter) +
", future1 = '" + es.future1 +
"', future2 = '" + es.future2 +
"', future3 = '" + es.future3 +
diff --git a/src/utilEncoder.cs b/src/utilEncoder.cs
index 6acc321..5985348 100644
--- a/src/utilEncoder.cs
+++ b/src/utilEncoder.cs
@@ -441,12 +441,20 @@ public class UtilEncoder
return fileCurve;
}
- public static int EncoderModeConversions(int byteReaded, string encoderMode, int inertiaMomentum,
double diameter) {
+ public static double EncoderModeConversions(int byteReaded, string encoderMode, int inertiaMomentum,
double diameter) {
+ double byteConverted = byteReaded;
+
//invert sign if inverted is selected
if(encoderMode == Constants.EncoderSignalMode.LINEARINVERTED.ToString())
- byteReaded *= -1;
+ byteConverted *= -1;
+ else if(encoderMode == "ROTARYAXIS") {
+ int ticksRotaryEncoder = 200; //our rotary axis encoder send 200 ticks by turn
+ //diameter m -> mm
+ byteConverted = ( byteConverted / ticksRotaryEncoder ) * 2 * Math.PI * ( diameter *
1000 / 2 );
+ }
+ //Log.Write(" " + byteReaded + ":" + byteConverted);
- return byteReaded;
+ return byteConverted;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]