...
BASE Filter Configuration
FusionHub BASE combines data from an outside-in tracking system with inertial measurements via an IMU.
Source Options
Optical Tracking Source Options
Advanced Realtime Tracking (ART)
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" } |
Optitrack
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 DataStream protocol. Communication has been tested with their Shogun software.
Code Block |
---|
"type": "Vicon",
"settings": {
"host": "localhost",
"subject": "VCam"
} |
Antilatency
FusionHub connects directly to Antilatency’s USB or wireless trackers.
Code Block |
---|
"type": "Antilatency", "settings": { // Use this for access from an external process eg. ALVR //"endpoint": "tcp://*:8899", // Use this for internal access eg. sensor fusion "endpoint": "inproc://optical_data_source_1", "environmentLink": "AntilatencyAltEnvironmentHorizontalGrid~AgAEBLhTiT_cRqA-r45jvZqZmT4AAAAAAAAAAACamRk_AQQCAwICAgICAQICAAI", "placementLink": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" } |
IMU Source
FusionHub supports all LP-RESEARCH IMUs. We also offer support for VICON Bluetooth IMUs.
LPMS-IG1
Code Block |
---|
"imu": { "type": "OpenZen", "settings": { "autodetectType": "ig1" } } |
...
Code Block |
---|
"imu": { "type": "OpenZen", "settings": { "autodetectType": "lpms" } } |
VICON IMU
FLOW Filter Configuration
The FLOW filter has two operation modes with different configuration blocks in config.json
and FusionHub FLOW combines odometry, GPS and IMU data from a vehicle to calculate high-accuracy and low-latency global localization information. The FLOW filter has two operation modes with different configuration blocks in config.json
and different output formats. The two modes are:
...
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 | Ignore | s |
position | Position within UTM zonerelative to starting point with X pointing North and Y pointing East in the current UTM frame | m |
timestamp | Timestamp of data acquisition | ns |
utmZone | UTM zone | UTM string |
yaw | Globally referenced yaw angle | rad |
Example Configuration
Playback and fusion of prerecorded data: gpsImuFusionPlayback.json
Real-time fusion: gpsOdometryFusion.json
High-Dynamics Filter (IMU + GPS)
Node name: gnssImuFusion
Configuration block example (in sinks
section)
...
Note: The FusedVehiclePose contains a 3D acceleration vector. The acceleration is defined in the following manner: There's a configuration flag imuToCarRotation which takes a quaternion used to rotate vectors in the IMU frame to the car frame. By default it is the identity quaternion. For the LD model, the measured IMU acceleration is simply rotated by the imuToCarRotation and written to the output.
In the LD filter, pitch and roll has to be derived from the acceleration data based on a model of the stiffness of the chassis. That assumes a flat surface. The HD model offers the full 6-DOF, and we are planning to unify them to have all data available at all times.
Example Configuration
Playback and fusion of prerecorded data: gpsImuFusionPlayback.json
Real-time fusion: gpsOdometryFusion.json
High-Dynamics Filter (IMU + GPS)
Node name: gnssImuFusion
Configuration block example (in sinks
section)
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": -1,
"z": 0
}
}
} |
...
As low level protocol to emit the output data we use ZeroMQ (publisher / subscriber). The data itself is in JSON format and is encoded as Protocol Buffers. Protocol Buffers are documented here. Message are defined in the Protobuf (.protoc) format as defined in the file stream_data.proto
. This file is contained in the installation folder of FusionHub.
Python Resources
Download a Python example that shows how to decode messaged from FusionHub from this repository.
Prerequisites can be installed in your Python 3 environment with this:
Code Block |
---|
pip install zmq
pip install protobuf |
Make sure to set the input port in FusionHubPythonExample.py correctly. For example for the Antilatency source definition like below, the port needs to be set to 8899
.
Code Block |
---|
"optical": {
"type": "Antilatency",
"settings": {
// Use this for access from an external process eg. ALVR
"endpoint": "tcp://*:8899",
"environmentLink": "AntilatencyAltEnvironmentHorizontalGrid~AgAEBLhTiT_cRqA-r45jvZqZmT4AAAAAAAAAAACamRk_AQQCAwICAgICAQICAAI",
"placementLink": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
}
} |
C# Resources
On parsing Protobuf files: https://github.com/5argon/protobuf-unity
How to subscribe to ZeroMQ messages: https://github.com/gench23/unity-zeromq-client and https://tech.uqido.com/2020/09/29/zeromq-in-unity/
VRPN Output
VRPN output is set in the following part in the sinks
section of config.json
. The device name will be referenced by the plugin for Unreal engine.
Code Block |
---|
"VRPN": {
"settings": {
"deviceName": "Fusion Hub"
}
} |
Please see below how we achieve data input via VRPN in the Unreal engine. First, install the VRPN LiveLink plugin:
...
Configure the VRPN source with the correct device and subject name:
...
Apply the output from the fusion hub to an Unreal object eg. a cine camera actor.
...
here. Message are defined in the Protobuf (.protoc) format as defined in the file stream_data.proto
. This file is contained in the installation folder of FusionHub.
Python Resources
Download a Python example that shows how to decode messaged from FusionHub from this repository.
Prerequisites can be installed in your Python 3 environment with this:
Code Block |
---|
pip install zmq
pip install protobuf |
Make sure to set the input port in FusionHubPythonExample.py correctly. For example for the Antilatency source definition like below, the port needs to be set to 8899
.
Code Block |
---|
"optical": {
"type": "Antilatency",
"settings": {
// Use this for access from an external process eg. ALVR
"endpoint": "tcp://*:8899",
"environmentLink": "AntilatencyAltEnvironmentHorizontalGrid~AgAEBLhTiT_cRqA-r45jvZqZmT4AAAAAAAAAAACamRk_AQQCAwICAgICAQICAAI",
"placementLink": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
}
} |
C# Resources
On parsing Protobuf files: https://github.com/5argon/protobuf-unity
How to subscribe to ZeroMQ messages: https://github.com/gench23/unity-zeromq-client and https://tech.uqido.com/2020/09/29/zeromq-in-unity/
VRPN Output
VRPN output is set in the following part in the sinks
section of config.json
. The device name will be referenced by the plugin for Unreal engine.
Code Block |
---|
"VRPN": {
"settings": {
"deviceName": "Fusion Hub"
}
} |
Please see below how we achieve data input via VRPN in the Unreal engine. First, install the VRPN LiveLink plugin:
...
Configure the VRPN source with the correct device and subject name:
...
Apply the output from the fusion hub to an Unreal object eg. a cine camera actor.
...
Hardware Preparation
LPMS-IG1(P)
Note: These instructions work for LPMS-IG1 (IMU only) and LPMS-IG1P (IMU + GPS).
First, download LpmsControl 2 from here and install it.
Connect LPMS-IG1(P) to your computer and start LpmsControl 2.
In LpmsControl 2 select one of the LPMS-IG1(P) sensors and connect to it.
...
In case the sensor is in VCP (virtual COM port) mode as shown below, click on Convert
to switch the sensor to USBxpress mode. This is required for communication with FusionHub.
...
After converting the sensor to USBxpress mode it should be displayed as such.
...
The image below shows typical output from LPMS-IG1(P) after connecting.
...
Close LpmsControl 2 to disconnect from the sensor. You are now ready to use LPMS-IG1(P) in FusionHub.
Release Notes
Version 1.2
Release date: 2023/1/5
...