Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
b7ea2e9
some update on simulator unit test
harithjamadi Jan 14, 2025
485d56b
updating sensor class and calibration dump method
harithjamadi Jan 16, 2025
513f0ce
more update on the calib dump parsing for sensor class
harithjamadi Jan 21, 2025
61092d2
minor refactoring
JongChern Jan 21, 2025
824557c
some more updates on calib dump parsing and sensor classes map
harithjamadi Jan 22, 2025
f930a2d
update the gyro sensitivity matrix for shimmer3r sensor
harithjamadi Jan 22, 2025
5fe670d
updates the calibbyte dump that being parsed
harithjamadi Jan 23, 2025
6c212b6
updating sensor class to include respective readonly sensor id
harithjamadi Jan 23, 2025
2094936
Merge branch 'CA-130_AH' into DEV-63
harithjamadi Jan 23, 2025
9ef3180
Merge pull request #156 from ShimmerEngineering/DEV-63
harithjamadi Jan 23, 2025
763783f
updates on s3r sensor unit test
harithjamadi Jan 24, 2025
9ee3f98
Merge branch 'master' into CA-130_AH
JongChern Jan 28, 2025
c17365c
update on mag alignment matrix for unit test
harithjamadi Jan 28, 2025
728329b
fixing shimmer3 unit test failing due to null class for high g, wr mag
harithjamadi Jan 28, 2025
83af10c
Merge branch 'master' into CA-130_AH
JongChern Jan 31, 2025
2d5771c
Update LiteProtocolInstructionSet.cs
JongChern Feb 3, 2025
3ff485f
Update LiteProtocolInstructionSet.cs
JongChern Feb 3, 2025
38fdc43
minor refactoring
JongChern Feb 3, 2025
5dfd38f
Update ShimmerLogAndStream.cs
JongChern Feb 3, 2025
bc8c8b5
refactoring on sensor classes
harithjamadi Feb 4, 2025
0a96135
fix on shimmer3 unit test
harithjamadi Feb 4, 2025
5ee2c9e
update to print the calib dump, and calibration byte
harithjamadi Feb 10, 2025
f9ce646
fix the failed build unit test
harithjamadi Feb 10, 2025
28b120c
Merge branch 'master' into CA-130_AH
JongChern Apr 23, 2025
89e8b14
Update ShimmerLogAndStream.cs
JongChern Apr 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions ShimmerAPI/ShimmerAPI/Sensors/AbstractSensor.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace ShimmerAPI.Sensors
{
public interface AbstractSensor
{
int SENSOR_ID { get; }
int ShimmerHardwareVersion { get; }
Dictionary<int, List<double[,]>> CalibDetails { get; }

}
}
145 changes: 132 additions & 13 deletions ShimmerAPI/ShimmerAPI/Sensors/GyroSensor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,148 @@
using System;
using System.Collections.Generic;
using System.Text;
using static ShimmerAPI.ShimmerBluetooth;

namespace ShimmerAPI.Sensors
{
public class GyroSensor
public class GyroSensor : AbstractSensor
{
public readonly int CALIBRATION_ID = 2;
public double[,] AlignmentMatrixAccel = new double[3, 3];
public double[,] SensitivityMatrixAccel = new double[3, 3];
public double[,] OffsetVectorAccel = new double[3, 1];
public void RetrieveKinematicCalibrationParametersFromCalibrationDump(byte[] sensorcalibrationdump)
public readonly int SHIMMER_MPU9X50_GYRO = 30;
public readonly int SHIMMER_LSM6DSV_GYRO = 38;
public int SENSOR_ID { get; private set; }
public int ShimmerHardwareVersion { get; private set; }
public Dictionary<int, List<double[,]>> CalibDetails { get; private set; }

public double[,] AlignmentMatrixGyro = new double[3, 3];
public double[,] SensitivityMatrixGyro = new double[3, 3];
public double[,] OffsetVectorGyro = new double[3, 1];

public GyroSensor(int hardwareVersion)
{
ShimmerHardwareVersion = hardwareVersion;
CreateDefaultCalibParams();
}

var packetType = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 2);
var sensorID = ((int)packetType[0]) + ((int)packetType[1] << 8);
if (sensorID == CALIBRATION_ID)
public void CreateDefaultCalibParams()
{
if (ShimmerHardwareVersion == (int)ShimmerBluetooth.ShimmerVersion.SHIMMER3R)
{
SENSOR_ID = SHIMMER_LSM6DSV_GYRO;
CalibDetails = new Dictionary<int, List<double[,]>>()
{
{
0,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3R_LSM6DSV,
SENSITIVITIY_MATRIX_GYRO_125DPS_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_GYRO_SHIMMER3R_LSM6DSV
}
},
{
1,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3R_LSM6DSV,
SENSITIVITIY_MATRIX_GYRO_250DPS_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_GYRO_SHIMMER3R_LSM6DSV
}
},
{
2,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3R_LSM6DSV,
SENSITIVITIY_MATRIX_GYRO_500DPS_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_GYRO_SHIMMER3R_LSM6DSV
}
},
{
3,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3R_LSM6DSV,
SENSITIVITIY_MATRIX_GYRO_1000DPS_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_GYRO_SHIMMER3R_LSM6DSV
}
},
{
4,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3R_LSM6DSV,
SENSITIVITIY_MATRIX_GYRO_2000DPS_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_GYRO_SHIMMER3R_LSM6DSV
}
},
{
5,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3R_LSM6DSV,
SENSITIVITIY_MATRIX_GYRO_4000DPS_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_GYRO_SHIMMER3R_LSM6DSV
}
}
};
}
else
{
var rangebytes = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 1);
var lengthsensorcal = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 1);
var ts = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 8);
(AlignmentMatrixAccel, SensitivityMatrixAccel, OffsetVectorAccel) = UtilCalibration.RetrieveKinematicCalibrationParametersFromCalibrationDump(sensorcalibrationdump);
System.Console.WriteLine("Gyro calibration parameters");
SENSOR_ID = SHIMMER_MPU9X50_GYRO;
CalibDetails = new Dictionary<int, List<double[,]>>()
{
{
0,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3,
SENSITIVITIY_MATRIX_GYRO_250DPS_SHIMMER3,
OFFSET_VECTOR_GYRO_SHIMMER3
}
},
{
1,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3,
SENSITIVITIY_MATRIX_GYRO_500DPS_SHIMMER3,
OFFSET_VECTOR_GYRO_SHIMMER3
}
},
{
2,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3,
SENSITIVITIY_MATRIX_GYRO_1000DPS_SHIMMER3,
OFFSET_VECTOR_GYRO_SHIMMER3
}
},
{
3,
new List<double[,]>
{
ALIGNMENT_MATRIX_GYRO_SHIMMER3,
SENSITIVITIY_MATRIX_GYRO_2000DPS_SHIMMER3,
OFFSET_VECTOR_GYRO_SHIMMER3
}
}
};
}

if (CalibDetails.TryGetValue(0, out var defaultCalib))
{
AlignmentMatrixGyro = defaultCalib[0];
SensitivityMatrixGyro = defaultCalib[1];
OffsetVectorGyro = defaultCalib[2];
}
}

public void RetrieveKinematicCalibrationParametersFromCalibrationDump(byte[] sensorcalibrationdump)
{
(AlignmentMatrixGyro, SensitivityMatrixGyro, OffsetVectorGyro) = UtilCalibration.RetrieveKinematicCalibrationParametersFromCalibrationDump(sensorcalibrationdump);
System.Console.WriteLine("Gyro calibration parameters");
}
}
}
64 changes: 51 additions & 13 deletions ShimmerAPI/ShimmerAPI/Sensors/HighGAccel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,67 @@
using System;
using System.Collections.Generic;
using System.Text;
using static ShimmerAPI.ShimmerBluetooth;

namespace ShimmerAPI.Sensors
{
public class HighGAccel
public class HighGAccel : AbstractSensor
{
public readonly int CALIBRATION_ID = 2;
public double[,] AlignmentMatrixAccel = new double[3, 3];
public double[,] SensitivityMatrixAccel = new double[3, 3];
public double[,] OffsetVectorAccel = new double[3, 1];
public void RetrieveKinematicCalibrationParametersFromCalibrationDump(byte[] sensorcalibrationdump)
public readonly int ALT_ACCEL = 33;
public readonly int SHIMMER_ADXL371_ACCEL_HIGHG = 40;
public int SENSOR_ID { get; private set; }
public int ShimmerHardwareVersion { get; private set; }
public Dictionary<int, List<double[,]>> CalibDetails { get; private set; }
public double[,] AlignmentMatrixAltAccel = new double[3, 3];
public double[,] SensitivityMatrixAltAccel = new double[3, 3];
public double[,] OffsetVectorAltAccel = new double[3, 1];

public HighGAccel(int hardwareVersion)
{
ShimmerHardwareVersion = hardwareVersion;
CreateDefaultCalibParams();
}

var packetType = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 2);
var sensorID = ((int)packetType[0]) + ((int)packetType[1] << 8);
if (sensorID == CALIBRATION_ID)
public void CreateDefaultCalibParams()
{
if (ShimmerHardwareVersion == (int)ShimmerBluetooth.ShimmerVersion.SHIMMER3R)
{
var rangebytes = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 1);
var lengthsensorcal = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 1);
var ts = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 8);
(AlignmentMatrixAccel, SensitivityMatrixAccel, OffsetVectorAccel) = UtilCalibration.RetrieveKinematicCalibrationParametersFromCalibrationDump(sensorcalibrationdump);
System.Console.WriteLine("High-G Accel calibration parameters");
SENSOR_ID = SHIMMER_ADXL371_ACCEL_HIGHG;
CalibDetails = new Dictionary<int, List<double[,]>>()
{
{
0,
new List<double[,]>
{
ALIGNMENT_MATRIX_HIGH_G_ACCEL_SHIMMER3R_ADXL371,
SENSITIVITY_MATRIX_HIGH_G_ACCEL_200G_SHIMMER3R_ADXL371,
OFFSET_VECTOR_ACCEL_HIGH_G_SHIMMER3R_ADXL371
}
}
};
}
else
{
SENSOR_ID = ALT_ACCEL;
}

if(CalibDetails != null)
{
if (CalibDetails.TryGetValue(0, out var defaultCalib))
{
AlignmentMatrixAltAccel = defaultCalib[0];
SensitivityMatrixAltAccel = defaultCalib[1];
OffsetVectorAltAccel = defaultCalib[2];
}
}

}

public void RetrieveKinematicCalibrationParametersFromCalibrationDump(byte[] sensorcalibrationdump)
{
(AlignmentMatrixAltAccel, SensitivityMatrixAltAccel, OffsetVectorAltAccel) = UtilCalibration.RetrieveKinematicCalibrationParametersFromCalibrationDump(sensorcalibrationdump);
System.Console.WriteLine("High-G Accel calibration parameters");
}
}
}
94 changes: 84 additions & 10 deletions ShimmerAPI/ShimmerAPI/Sensors/LNAccel.cs
Original file line number Diff line number Diff line change
@@ -1,31 +1,105 @@
using ShimmerAPI.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using static ShimmerAPI.ShimmerBluetooth;

namespace ShimmerAPI.Sensors
{
public class LNAccel
public class LNAccel : AbstractSensor
{
public readonly int CALIBRATION_ID = 2;
public readonly int SHIMMER_ANALOG_ACCEL = 2;
public readonly int SHIMMER_LSM6DSV_ACCEL_LN = 37;
public int SENSOR_ID { get; private set; }
public int ShimmerHardwareVersion { get; private set; }
public Dictionary<int, List<double[,]>> CalibDetails { get; private set; }

public double[,] AlignmentMatrixAccel = new double[3, 3];
public double[,] SensitivityMatrixAccel = new double[3, 3];
public double[,] OffsetVectorAccel = new double[3, 1];
public void RetrieveKinematicCalibrationParametersFromCalibrationDump(byte[] sensorcalibrationdump)

public LNAccel(int hardwareVersion)
{
ShimmerHardwareVersion = hardwareVersion;
CreateDefaultCalibParams();
}

var packetType = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 2);
var sensorID = ((int)packetType[0]) + ((int)packetType[1] << 8);
if (sensorID == CALIBRATION_ID)
private void CreateDefaultCalibParams()
{
if(ShimmerHardwareVersion == (int)ShimmerBluetooth.ShimmerVersion.SHIMMER3R)
{
SENSOR_ID = SHIMMER_LSM6DSV_ACCEL_LN;
CalibDetails = new Dictionary<int, List<double[,]>>()
{
{
0,
new List<double[,]>
{
ALIGNMENT_MATRIX_LOW_NOISE_ACCEL_SHIMMER3R_LSM6DSV,
SENSITIVITY_MATRIX_LOW_NOISE_ACCEL_2G_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_ACCEL_LOW_NOISE_SHIMMER3R_LSM6DSV
}
},
{
1,
new List<double[,]>
{
ALIGNMENT_MATRIX_LOW_NOISE_ACCEL_SHIMMER3R_LSM6DSV,
SENSITIVITY_MATRIX_LOW_NOISE_ACCEL_4G_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_ACCEL_LOW_NOISE_SHIMMER3R_LSM6DSV
}
},
{
2,
new List<double[,]>
{
ALIGNMENT_MATRIX_LOW_NOISE_ACCEL_SHIMMER3R_LSM6DSV,
SENSITIVITY_MATRIX_LOW_NOISE_ACCEL_8G_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_ACCEL_LOW_NOISE_SHIMMER3R_LSM6DSV
}
},
{
3,
new List<double[,]>
{
ALIGNMENT_MATRIX_LOW_NOISE_ACCEL_SHIMMER3R_LSM6DSV,
SENSITIVITY_MATRIX_LOW_NOISE_ACCEL_16G_SHIMMER3R_LSM6DSV,
OFFSET_VECTOR_ACCEL_LOW_NOISE_SHIMMER3R_LSM6DSV
}
}
};
}
else
{
var rangebytes = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 1);
var lengthsensorcal = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 1);
var ts = ProgrammerUtilities.CopyAndRemoveBytes(ref sensorcalibrationdump, 8);
(AlignmentMatrixAccel, SensitivityMatrixAccel, OffsetVectorAccel) = UtilCalibration.RetrieveKinematicCalibrationParametersFromCalibrationDump(sensorcalibrationdump);
System.Console.WriteLine("LN Accel calibration parameters");
SENSOR_ID = SHIMMER_ANALOG_ACCEL;
CalibDetails = new Dictionary<int, List<double[,]>>()
{
{
0,
new List<double[,]>
{
ALIGNMENT_MATRIX_LOW_NOISE_ACCEL_SHIMMER3_KXTC9_2050,
SENSITIVITY_MATRIX_LOW_NOISE_ACCEL_SHIMMER3_KXTC9_2050,
OFFSET_VECTOR_ACCEL_LOW_NOISE_SHIMMER3_KXTC9_2050
}
}
};
}

if (CalibDetails.TryGetValue(0, out var defaultCalib))
{
AlignmentMatrixAccel = defaultCalib[0];
SensitivityMatrixAccel = defaultCalib[1];
OffsetVectorAccel = defaultCalib[2];
}
}

public void RetrieveKinematicCalibrationParametersFromCalibrationDump(byte[] sensorcalibrationdump)
{
(AlignmentMatrixAccel, SensitivityMatrixAccel, OffsetVectorAccel) = UtilCalibration.RetrieveKinematicCalibrationParametersFromCalibrationDump(sensorcalibrationdump);
Console.WriteLine("LN Accel calibration parameters retrieved successfully.");
}
}
}
Loading
Loading