...
FusionHub BASE combines data from an outside-in tracking system with inertial measurements via an IMU.
IMU-Optical Fusion Filter
Configuration Block
Node name: fusion
Code Block |
---|
"fusion": {
"type": "ImuOpticalFusion",
"settings": {
"echoFusedPose": false,
"echoOpticalPose": true,
"runIntercalibration": true,
"Autocalibration": {
"minAgeS": 60.0,
"nSamplesForAutocalibration": 1500,
"nSamplesForSteady": 256,
"noiseRmsLimit": 0.02,
"steadyThresholdAverage": 0.2,
"steadyThresholdRms": 1.0
},
"MotionDetection": {
"omegaLimit": 2.0,
"positionSampleInterval": 1000,
"rotationFilterAlpha": 0.9,
"timeToUnknown": 500
},
"SensorFusion": {
"alignment": {
"w": 1.0,
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"orientationWeight": 0.005,
"tiltCorrection": null,
"yawWeight": 0.01
}
}
} |
Parameter name | Description | Default |
---|---|---|
type | ImuOpticalFusion | |
echoFusedPose | false | |
echoOpticalPose | false | |
runIntercalibration | true | |
minAgeS | 60.0 | |
nSamplesForAutocalibration | 1500 | |
nSamplesForSteady | 256 | |
noiseRmsLimit | 0.02 | |
steadyThresholdAverage | 0.2 | |
steadyThresholdRms | 1.0 | |
omegaLimit | 2.0 | |
positionSampleInterval | 1000 | |
rotationFilterAlpha | 0.9 | |
timeToUnknown | 500 | |
alignment | 1, 0, 0, 0 | |
orientationWeight | 0.005 | |
tiltCorrection | false | |
yawWeight | 0.01 |
This filter needs as input:
Optical tracking source
IMU source
This Filter outputs:
fusedPose
Output Data Format
Code Block |
---|
{
"fusedPose": {
"lastDataTime": {
"timestamp": 0
},
"orientation": {
"w": 1.0,
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"position": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"timestamp": {
"timestamp": 0
}
}
} |
Parameter name | Description | Unit |
---|---|---|
lastDataTime | Unused | s |
orientation | Orientation quaternion | without unit |
position | Unused | m |
timestamp | Time of data acqusition | ns |
Source Options
Optical Tracking Source Options
...
FusionHub works with all ART tracking systems, based on their DTrack tracking software.
Code Block |
---|
"type": "DTrack", "settings": { "port": 5005, "bodyID": 3, "endpoint": "inproc://optical_data_source_1" } |
...
FusionHub works with all Optitrack tracking systems based on their Motive tracking software.
Code Block |
---|
"type": "Optitrack", "settings": { "host": "localhost", "connectionType": "Multicast", "bodyID": 444 } |
VICON
FusionHub consumes VICON’s VICON’s DataStream protocol. Communication has been tested with their Shogun software.
...
FusionHub connects directly to Antilatency’s Antilatency’s USB or wireless trackers.
...
IMU Source
FusionHub supports all LP-RESEARCH IMUs. We also offer support for VICON Bluetooth IMUs
See a description on how to prepare LPMS-IG1 for operation with FusionHub further below.
LPMS-IG1
Code Block |
---|
"imu": { "type": "OpenZen", "settings": { "autodetectType": "ig1" } } |
LPMS-CURS3
Code Block |
---|
"imu": { "type": "OpenZen", "settings": { "autodetectType": "lpms" } } |
...
MOVE Filter Configuration
FusionHub MOVE adds an additional platform IMU to the BASE configuration. It combines data from both IMUs to calculate poses relative to a moving platform.
FLOW Filter Configuration
...
Low-dynamics Filter (Odometry + GPS + (some) IMU)
Configuration Block
Node name: vehicularFusion
...
This Filter outputs:
fusedVehiclePose
Output Data Format
Code Block |
---|
{ "fusedVehiclePose": { "acceleration": { "x": -0.42634024938940840, "y": -0.148726317100226880, "z": 90.7906323471069320 }, "globalPosition": { "x": 10.89853609997719790, "y": 410.505858301110330 }, "lastDataTime": { "timestamp": 0 }, "position": { "x": 0, "y": 0 }, "timestamp": { "timestamp": 483474244402000 }, "utmZone": "31T", "yaw": 0 } } |
...
Code Block |
---|
"gnssImuFusion": { "echoFusedPose": false, "endpoint": "tcp://*:8803", "fuser": { "fitModel": "ModelGnssImu", "accelError": 0.01, "omegaError": 0.02, "measurementError": 0.05, "imuToCarRotation": { "w": 1, "x": 0, "y": -10, "z": 0 } } } |
Parameter name | Description | Default |
---|---|---|
echoFusedPose | fusedVehiclePose output is printed to command line | false |
endpoint | Output port for the fusion result | 8801 |
fitModel | Model to use for fusion. At the moment only | SimpleCarModel |
accelError | Model to use to calculate car trajectory from CAN bus data. At the moment only | Differential |
omegaError | Omega error for Kalman filter. Keep default value. | 0.5 |
measurementError | Measurement error for Kalman filter. Keep default value. | 0.1 |
imuToCarRotation | Orientation quaternion of IMU relative to car frame | 1, 0, -10, 0 |
This filter needs as input:
...
Code Block |
---|
{ "fusedVehiclePose": { "acceleration": { "x": 0.0, "y": 0.0, "z": 0.0 }, "globalPosition": { "x": 10.89823566015449250, "y": 410.505444344182040 }, "lastDataTime": { "timestamp": 0 }, "position": { "x": -250.383320836418260, "y": -360.4037335011976350 }, "timestamp": { "timestamp": 489102267234000 }, "utmZone": "31T", "yaw": 0.15557546844577670 } } |
Parameter name | Description | Unit |
---|---|---|
acceleration | 3D acceleration vector as measured by IMU. Describes the orientation of the vehicle. | m/s^2 |
globalPosition | Longitude and latitude in degrees | degrees |
lastDataTime | Unused | s |
position | Position within UTM zone | m |
timestamp | Timestamp of data acquisition | ns |
utmZone | UTM zone | UTM string |
yaw | Globally referenced yaw angle | rad |
Code Block |
---|
{ "fusedPose": { "lastDataTime": { "timestamp": 0 }, "orientation": { "w": 1.0.4437907292666558, "x": 0.56596875022060260, "y": -0.47496524169047330, "z": 0.50708695662244110 }, "position": { "x": -250.3833208364183060, "y": -360.4037335011971660, "z": 1630.982723207564050 }, "timestamp": { "timestamp": 489102267234000 } } } |
Parameter name | Description | Unit |
---|---|---|
lastDataTime | Unused | s |
orientation | Orientation quaternion |
without unit | ||
position | Unused | m |
timestamp | Time of data acqusition | ns |
Example Configuration
Playback and fusion of prerecorded data: gpsImuFusionPlayback.json
...