Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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 is supported.

SimpleCarModel

accelError

Model to use to calculate car trajectory from CAN bus data. At the moment only Differential is supported.

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

n/a

without unit

position

Unused

m

timestamp

Time of data acqusition

ns

Example Configuration

Playback and fusion of prerecorded data: gpsImuFusionPlayback.json

...