VectorNav C/C++ Library
|
00001 00031 #ifndef _VN100_H_ 00032 #define _VN100_H_ 00033 00034 #include "vncp_services.h" 00035 #include "vn_kinematics.h" 00036 #include "vn_linearAlgebra.h" 00037 00038 #ifdef __cplusplus 00039 extern "C" { 00040 #endif 00041 00042 #define VNASYNC_OFF 0 00043 #define VNASYNC_VNYPR 1 00044 #define VNASYNC_VNQTN 2 00045 #define VNASYNC_VNQTM 3 00046 #define VNASYNC_VNQTA 4 00047 #define VNASYNC_VNQTR 5 00048 #define VNASYNC_VNQMA 6 00049 #define VNASYNC_VNQAR 7 00050 #define VNASYNC_VNQMR 8 00051 #define VNASYNC_VNDCM 9 00052 #define VNASYNC_VNMAG 10 00053 #define VNASYNC_VNACC 11 00054 #define VNASYNC_VNGYR 12 00055 #define VNASYNC_VNMAR 13 00056 #define VNASYNC_VNYMR 14 00057 #define VNASYNC_VNYCM 15 00058 #define VNASYNC_VNYBA 16 00059 #define VNASYNC_VNYIA 17 00060 #define VNASYNC_VNICM 18 00061 #define VNASYNC_VNRAW 252 00062 #define VNASYNC_VNCMV 253 00063 #define VNASYNC_VNSTV 254 00064 #define VNASYNC_VNCOV 255 00069 typedef struct { 00070 char* portName; 00071 int baudRate; 00072 VN_BOOL isConnected; 00073 void* internalData; 00074 } Vn100; 00075 00080 typedef struct { 00081 VnYpr ypr; 00082 VnQuaternion quaternion; 00083 VnVector3 magnetic; 00084 VnVector3 acceleration; 00085 VnVector3 angularRate; 00086 VnMatrix3x3 dcm; 00087 double temperature; 00088 VnVector3 magneticVoltage; 00089 VnVector3 accelerationVoltage; 00090 VnVector3 angularRateVoltage; 00091 double temperatureVoltage; 00092 VnVector3 angularRateBias; 00093 VnVector3 attitudeVariance; 00094 VnVector3 angularRateBiasVariance; 00095 } Vn100CompositeData; 00096 00104 typedef void (*Vn100NewAsyncDataReceivedListener)(Vn100* sender, Vn100CompositeData* newData); 00105 00114 VN_ERROR_CODE vn100_connect(Vn100* newVn100, const char* portName, int baudrate); 00115 00122 VN_ERROR_CODE vn100_disconnect(Vn100* vn100); 00123 00132 unsigned char vn100_checksum_compute(const char* cmdToCheck); 00133 00144 void vn100_checksum_computeAndReturnAsHex(const char* cmdToCheck, char* checksum); 00145 00155 VN_ERROR_CODE vn100_set_timeout(Vn100* vn100, int timeout); 00156 00165 int vn100_get_timeout(Vn100* vn100); 00166 00177 VN_ERROR_CODE vn100_getCurrentAsyncData(Vn100* vn100, Vn100CompositeData* curData); 00178 00186 VN_ERROR_CODE vn100_writeSettings(Vn100* vn100, VN_BOOL waitForResponse); 00187 00194 VN_ERROR_CODE vn100_restoreFactorySettings(Vn100* vn100, VN_BOOL waitForResponse); 00195 00202 VN_ERROR_CODE vn100_tare(Vn100* vn100, VN_BOOL waitForResponse); 00203 00210 VN_ERROR_CODE vn100_reset(Vn100* vn100); 00211 00219 VN_ERROR_CODE vn100_knownMagneticDisturbance(Vn100* vn100, VN_BOOL isDisturbancePresent, VN_BOOL waitForResponse); 00220 00228 VN_ERROR_CODE vn100_knownAccelerationDisturbance(Vn100* vn100, VN_BOOL isDisturbancePresent, VN_BOOL waitForResponse); 00229 00237 VN_ERROR_CODE vn100_setGyroBias(Vn100* vn100, VN_BOOL waitForResponse); 00238 00247 VN_ERROR_CODE vn100_registerAsyncDataReceivedListener(Vn100* vn100, Vn100NewAsyncDataReceivedListener listener); 00248 00257 VN_ERROR_CODE vn100_unregisterAsyncDataReceivedListener(Vn100* vn100, Vn100NewAsyncDataReceivedListener listener); 00258 00259 /* VN100_CODE_GENERATION_SPOT_0_START */ 00260 00269 VN_ERROR_CODE vn100_getUserTag(Vn100* vn100, char* userTagBuffer, unsigned int userTagBufferLength); 00270 00282 VN_ERROR_CODE vn100_setUserTag(Vn100* vn100, char* userTagData, unsigned int userTagDataLength, VN_BOOL waitForResponse); 00283 00292 VN_ERROR_CODE vn100_getModelNumber(Vn100* vn100, char* modelBuffer, unsigned int modelBufferLength); 00293 00301 VN_ERROR_CODE vn100_getHardwareRevision(Vn100* vn100, int* hardwareRevision); 00302 00311 VN_ERROR_CODE vn100_getSerialNumber(Vn100* vn100, char* serialNumberBuffer, unsigned int serialNumberBufferLength); 00312 00321 VN_ERROR_CODE vn100_getFirmwareVersion(Vn100* vn100, char* firmwareVersionBuffer, unsigned int firmwareVersionBufferLength); 00322 00330 VN_ERROR_CODE vn100_getSerialBaudRate(Vn100* vn100, unsigned int* serialBaudrate); 00331 00342 VN_ERROR_CODE vn100_setSerialBaudRate(Vn100* vn100, unsigned int serialBaudrate, VN_BOOL waitForResponse); 00343 00351 VN_ERROR_CODE vn100_getAsynchronousDataOutputType(Vn100* vn100, unsigned int* asyncDataOutputType); 00352 00363 VN_ERROR_CODE vn100_setAsynchronousDataOutputType(Vn100* vn100, unsigned int asyncDataOutputType, VN_BOOL waitForResponse); 00364 00372 VN_ERROR_CODE vn100_getAsynchronousDataOutputFrequency(Vn100* vn100, unsigned int* asyncDataOutputFrequency); 00373 00384 VN_ERROR_CODE vn100_setAsynchronousDataOutputFrequency(Vn100* vn100, unsigned int asyncDataOutputFrequency, VN_BOOL waitForResponse); 00385 00393 VN_ERROR_CODE vn100_getYawPitchRoll(Vn100* vn100, VnYpr* attitude); 00394 00402 VN_ERROR_CODE vn100_getQuaternion(Vn100* vn100, VnQuaternion* attitude); 00403 00412 VN_ERROR_CODE vn100_getQuaternionMagnetic(Vn100* vn100, VnQuaternion* attitude, VnVector3* magnetic); 00413 00422 VN_ERROR_CODE vn100_getQuaternionAcceleration(Vn100* vn100, VnQuaternion* attitude, VnVector3* acceleration); 00423 00432 VN_ERROR_CODE vn100_getQuaternionAngularRate(Vn100* vn100, VnQuaternion* attitude, VnVector3* angularRate); 00433 00443 VN_ERROR_CODE vn100_getQuaternionMagneticAcceleration(Vn100* vn100, VnQuaternion* attitude, VnVector3* magnetic, VnVector3* acceleration); 00444 00454 VN_ERROR_CODE vn100_getQuaternionAccelerationAngularRate(Vn100* vn100, VnQuaternion* attitude, VnVector3* magnetic, VnVector3* angularRate); 00455 00466 VN_ERROR_CODE vn100_getQuaternionMagneticAcclerationAngularRate(Vn100* vn100, VnQuaternion* attitude, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate); 00467 00475 VN_ERROR_CODE vn100_getDirectionCosineMatrix(Vn100* vn100, VnMatrix3x3* attitude); 00476 00484 VN_ERROR_CODE vn100_getMagnetic(Vn100* vn100, VnVector3* magnetic); 00485 00493 VN_ERROR_CODE vn100_getAcceleration(Vn100* vn100, VnVector3* acceleration); 00494 00502 VN_ERROR_CODE vn100_getAngularRate(Vn100* vn100, VnVector3* angularRate); 00503 00513 VN_ERROR_CODE vn100_getMagneticAccelerationAngularRate(Vn100* vn100, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate); 00514 00523 VN_ERROR_CODE vn100_getMagneticGravityReferenceVectors(Vn100* vn100, VnVector3* magneticReference, VnVector3* gravityReference); 00524 00536 VN_ERROR_CODE vn100_setMagneticGravityReferenceVectors(Vn100* vn100, VnVector3 magneticReference, VnVector3 gravityReference, VN_BOOL waitForResponse); 00537 00548 VN_ERROR_CODE vn100_getFilterMeasurementVarianceParameters(Vn100* vn100, double* angularWalkVariance, VnVector3* angularRateVariance, VnVector3* magneticVariance, VnVector3* accelerationVariance); 00549 00563 VN_ERROR_CODE vn100_setFilterMeasurementVarianceParameters(Vn100* vn100, double angularWalkVariance, VnVector3 angularRateVariance, VnVector3 magneticVariance, VnVector3 accelerationVariance, VN_BOOL waitForResponse); 00564 00573 VN_ERROR_CODE vn100_getMagneticHardSoftIronCompensationParameters(Vn100* vn100, VnMatrix3x3* c, VnVector3* b); 00574 00586 VN_ERROR_CODE vn100_setMagneticHardSoftIronCompensationParameters(Vn100* vn100, VnMatrix3x3 c, VnVector3 b, VN_BOOL waitForResponse); 00587 00598 VN_ERROR_CODE vn100_getFilterActiveTuningParameters(Vn100* vn100, double* magneticGain, double* accelerationGain, double* magneticMemory, double* accelerationMemory); 00599 00613 VN_ERROR_CODE vn100_setFilterActiveTuningParameters(Vn100* vn100, double magneticGain, double accelerationGain, double magneticMemory, double accelerationMemory, VN_BOOL waitForResponse); 00614 00623 VN_ERROR_CODE vn100_getAccelerometerCompensation(Vn100* vn100, VnMatrix3x3* c, VnVector3* b); 00624 00636 VN_ERROR_CODE vn100_setAccelerometerCompensation(Vn100* vn100, VnMatrix3x3 c, VnVector3 b, VN_BOOL waitForResponse); 00637 00645 VN_ERROR_CODE vn100_getReferenceFrameRotation(Vn100* vn100, VnMatrix3x3* c); 00646 00657 VN_ERROR_CODE vn100_setReferenceFrameRotation(Vn100* vn100, VnMatrix3x3 c, VN_BOOL waitForResponse); 00658 00669 VN_ERROR_CODE vn100_getYawPitchRollMagneticAccelerationAngularRate(Vn100* vn100, VnYpr* attitude, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate); 00670 00678 VN_ERROR_CODE vn100_getAccelerometerGain(Vn100* vn100, unsigned int* accelerometerGain); 00679 00690 VN_ERROR_CODE vn100_setAccelerometerGain(Vn100* vn100, unsigned int accelerometerGain, VN_BOOL waitForResponse); 00691 00703 VN_ERROR_CODE vn100_getYawPitchRollAndCalibratedMeasurements(Vn100* vn100, VnYpr* attitude, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate, double* temperature); 00704 00718 VN_ERROR_CODE vn100_getCommunicationProtocolControl(Vn100* vn100, unsigned char* serialCount, unsigned char* serialStatus, unsigned char* spiCount, unsigned char* spiStatus, unsigned char* serialChecksum, unsigned char* spiChecksum, unsigned char* errorMode); 00719 00736 VN_ERROR_CODE vn100_setCommunicationProtocolControl(Vn100* vn100, unsigned char serialCount, unsigned char serialStatus, unsigned char spiCount, unsigned char spiStatus, unsigned char serialChecksum, unsigned char spiChecksum, unsigned char errorMode, VN_BOOL waitForResponse); 00737 00766 VN_ERROR_CODE vn100_getCommunicationProtocolStatus(Vn100* vn100, unsigned int* numOfParsedSerialMessages, unsigned int* numOfParsedSpiMessages, unsigned char* maxUsageSerialRxBuffer, unsigned char* maxUsageSerialTxBuffer, unsigned char* maxUsageSpiRxBuffer, unsigned char* maxUsageSpiTxBuffer, unsigned short* reserved0, unsigned short* reserved1, unsigned short* reserved2, unsigned short* reserved3, unsigned short* reserved4, unsigned short* reserved5, unsigned short* reserved6, unsigned short* reserved7, unsigned short* reserved8, unsigned short* reserved9, unsigned short* reserved10, unsigned short* reserved11, unsigned short* reserved12, unsigned short* reserved13, unsigned short* reserved14, unsigned short* reserved15); 00767 00799 VN_ERROR_CODE vn100_setCommunicationProtocolStatus(Vn100* vn100, unsigned int numOfParsedSerialMessages, unsigned int numOfParsedSpiMessages, unsigned char maxUsageSerialRxBuffer, unsigned char maxUsageSerialTxBuffer, unsigned char maxUsageSpiRxBuffer, unsigned char maxUsageSpiTxBuffer, unsigned short reserved0, unsigned short reserved1, unsigned short reserved2, unsigned short reserved3, unsigned short reserved4, unsigned short reserved5, unsigned short reserved6, unsigned short reserved7, unsigned short reserved8, unsigned short reserved9, unsigned short reserved10, unsigned short reserved11, unsigned short reserved12, unsigned short reserved13, unsigned short reserved14, unsigned short reserved15, VN_BOOL waitForResponse); 00800 00816 VN_ERROR_CODE vn100_getSynchronizationControl(Vn100* vn100, unsigned char* syncInMode, unsigned char* syncInEdge, unsigned short* syncInSkipFactor, unsigned int* reserved0, unsigned char* syncOutMode, unsigned char* syncOutPolarity, unsigned short* syncOutSkipFactor, unsigned int* syncOutPulseWidth, unsigned int* reserved1); 00817 00836 VN_ERROR_CODE vn100_setSynchronizationControl(Vn100* vn100, unsigned char syncInMode, unsigned char syncInEdge, unsigned short syncInSkipFactor, unsigned int reserved0, unsigned char syncOutMode, unsigned char syncOutPolarity, unsigned short syncOutSkipFactor, unsigned int syncOutPulseWidth, unsigned int reserved1, VN_BOOL waitForResponse); 00837 00847 VN_ERROR_CODE vn100_getSynchronizationStatus(Vn100* vn100, unsigned int* syncInCount, unsigned int* syncInTime, unsigned int* syncOutCount); 00848 00861 VN_ERROR_CODE vn100_setSynchronizationStatus(Vn100* vn100, unsigned int syncInCount, unsigned int syncInTime, unsigned int syncOutCount, VN_BOOL waitForResponse); 00862 00874 VN_ERROR_CODE vn100_getAttitudeFilterControl(Vn100* vn100, unsigned char* magneticMode, unsigned char* externalMagnetometerMode, unsigned char* externalAccelerometerMode, unsigned char* externalGyroscopeMode, VnVector3* angularRateLimit); 00875 00890 VN_ERROR_CODE vn100_setAttitudeFilterControl(Vn100* vn100, unsigned char magneticMode, unsigned char externalMagnetometerMode, unsigned char externalAccelerometerMode, unsigned char externalGyroscopeMode, VnVector3 angularRateLimit, VN_BOOL waitForResponse); 00891 00902 VN_ERROR_CODE vn100_getVpeControl(Vn100* vn100, unsigned char* enable, unsigned char* headingMode, unsigned char* filteringMode, unsigned char* tuningMode); 00903 00917 VN_ERROR_CODE vn100_setVpeControl(Vn100* vn100, unsigned char enable, unsigned char headingMode, unsigned char filteringMode, unsigned char tuningMode, VN_BOOL waitForResponse); 00918 00928 VN_ERROR_CODE vn100_getVpeMagnetometerBasicTuning(Vn100* vn100, VnVector3* baseTuning, VnVector3* adaptiveTuning, VnVector3* adaptiveFiltering); 00929 00942 VN_ERROR_CODE vn100_setVpeMagnetometerBasicTuning(Vn100* vn100, VnVector3 baseTuning, VnVector3 adaptiveTuning, VnVector3 adaptiveFiltering, VN_BOOL waitForResponse); 00943 00955 VN_ERROR_CODE vn100_getVpeMagnetometerAdvancedTuning(Vn100* vn100, VnVector3* minimumFiltering, VnVector3* maximumFiltering, double* maximumAdaptRate, double* disturbanceWindow, double* maximumTuning); 00956 00971 VN_ERROR_CODE vn100_setVpeMagnetometerAdvancedTuning(Vn100* vn100, VnVector3 minimumFiltering, VnVector3 maximumFiltering, double maximumAdaptRate, double disturbanceWindow, double maximumTuning, VN_BOOL waitForResponse); 00972 00982 VN_ERROR_CODE vn100_getVpeAccelerometerBasicTuning(Vn100* vn100, VnVector3* baseTuning, VnVector3* adaptiveTuning, VnVector3* adaptiveFiltering); 00983 00996 VN_ERROR_CODE vn100_setVpeAccelerometerBasicTuning(Vn100* vn100, VnVector3 baseTuning, VnVector3 adaptiveTuning, VnVector3 adaptiveFiltering, VN_BOOL waitForResponse); 00997 01009 VN_ERROR_CODE vn100_getVpeAccelerometerAdvancedTuning(Vn100* vn100, VnVector3* minimumFiltering, VnVector3* maximumFiltering, double* maximumAdaptRate, double* disturbanceWindow, double* maximumTuning); 01010 01025 VN_ERROR_CODE vn100_setVpeAccelerometerAdvancedTuning(Vn100* vn100, VnVector3 minimumFiltering, VnVector3 maximumFiltering, double maximumAdaptRate, double disturbanceWindow, double maximumTuning, VN_BOOL waitForResponse); 01026 01036 VN_ERROR_CODE vn100_getVpeGyroBasicTuning(Vn100* vn100, VnVector3* baseTuning, VnVector3* adaptiveTuning, VnVector3* adaptiveFiltering); 01037 01050 VN_ERROR_CODE vn100_setVpeGyroBasicTuning(Vn100* vn100, VnVector3 baseTuning, VnVector3 adaptiveTuning, VnVector3 adaptiveFiltering, VN_BOOL waitForResponse); 01051 01065 VN_ERROR_CODE vn100_getFilterStatus(Vn100* vn100, unsigned short* solutionStatus, double* yawUncertainty, double* pitchUncertainty, double* rollUncertainty, double* gyroBiasUncertainty, double* magUncertainty, double* accelUncertainty); 01066 01074 VN_ERROR_CODE vn100_getFilterStartupGyroBias(Vn100* vn100, VnVector3* gyroBias); 01075 01086 VN_ERROR_CODE vn100_setFilterStartupGyroBias(Vn100* vn100, VnVector3 gyroBias, VN_BOOL waitForResponse); 01087 01097 VN_ERROR_CODE vn100_getMagnetometerBasicCalibrationControl(Vn100* vn100, unsigned char* hsiMode, unsigned char* hsiOutput, unsigned char* convergeRate); 01098 01111 VN_ERROR_CODE vn100_setMagnetometerBasicCalibrationControl(Vn100* vn100, unsigned char hsiMode, unsigned char hsiOutput, unsigned char convergeRate, VN_BOOL waitForResponse); 01112 01131 VN_ERROR_CODE vn100_getMagnetometerCalibrationStatus(Vn100* vn100, unsigned char* lastBin, unsigned short* numOfMeasurements, double* avgResidual, VnVector3* lastMeasurement, unsigned char* bin0, unsigned char* bin1, unsigned char* bin2, unsigned char* bin3, unsigned char* bin4, unsigned char* bin5, unsigned char* bin6, unsigned char* bin7); 01132 01141 VN_ERROR_CODE vn100_getCalculatedMagnetometerCalibration(Vn100* vn100, VnMatrix3x3* c, VnVector3* b); 01142 01151 VN_ERROR_CODE vn100_getIndoorHeadingModeControl(Vn100* vn100, double* maxRateError, double* reserved); 01152 01164 VN_ERROR_CODE vn100_setIndoorHeadingModeControl(Vn100* vn100, double maxRateError, double reserved, VN_BOOL waitForResponse); 01165 01175 VN_ERROR_CODE vn100_getYawPitchRollTrueBodyAccelerationAngularRate(Vn100* vn100, VnYpr* attitude, VnVector3* bodyAcceleration, VnVector3* angularRate); 01176 01186 VN_ERROR_CODE vn100_getYawPitchRollTrueInertialAcclerationAngularRate(Vn100* vn100, VnYpr* attitude, VnVector3* inertialAcceleration, VnVector3* angularRate); 01187 01198 VN_ERROR_CODE vn100_getYawPitchRollInertialCalibratedMeasurements(Vn100* vn100, VnYpr* attitude, VnVector3* inertialMagnetic, VnVector3* inertialAcceleration, VnVector3* angularRate); 01199 01210 VN_ERROR_CODE vn100_getRawVoltageMeasurements(Vn100* vn100, VnVector3* magnetometer, VnVector3* accelerometer, VnVector3* gyroscope, double* temperature); 01211 01222 VN_ERROR_CODE vn100_getCalibratedImuMeasurements(Vn100* vn100, VnVector3* magnetic, VnVector3* acceleration, VnVector3* angularRate, double* temperature); 01223 01232 VN_ERROR_CODE vn100_getKalmanFilterStateVector(Vn100* vn100, VnQuaternion* attitude, VnVector3* gyroscopeBias); 01233 01234 01235 /* VN100_CODE_GENERATION_SPOT_0_END */ 01236 01237 #ifdef __cplusplus 01238 } 01239 #endif 01240 01241 #endif /* _VN100_H_ */