...
Which filter output works best depends on your application. For augmented reality applications we reommend using globalFusedPose
.
You can find more information regarding the ENU coordinate system here.
Notes on IMU Arrangement
The used car frame is the Volkswagen (VW) coordinate frame convention:
...
Parameter name | Description | Default |
---|---|---|
echoFusedPose |
| false |
endpoint | Output port for the fusion result | 8801 |
fitModel | Model to use for fusion. | ModelGnssImu |
accelError | Acceleration error for Kalman filter. Keep default value. | 0.01 |
omegaError | Omega error for Kalman filter. Keep default value. | 0.02 |
measurementError | Measurement error for Kalman filter. Keep default value. | 0.05 |
imuToCarRotation | Orientation quaternion of IMU relative to car frame | 1, 0, 0, 0 |
smoothFit | Enable this option to prevent filter output from jumping between IMU data and GPS measurement. Keep enabled. | true |
Output
...
Data Format
FusedVehiclePose
JSON
Code Block |
---|
{ "fusedVehiclePose": { "acceleration": { "x": 0.0, "y": 0.0, "z": 0.0 }, "globalPosition": { "x": 0.0, "y": 0.0 }, "lastDataTime": { "timestamp": 0 }, "position": { "x": 0.0, "y": 0.0 }, "timestamp": { "timestamp": 0 }, "utmZone": "31T", "yaw": 0.0 } } |
...
Parameter name | Description | Unit |
---|---|---|
lastDataTime | Unused | s |
orientation | Orientation quaternion in ENU coordinate frame | without unit |
position | X, y position + height | m |
timestamp | Time of data acqusition | ns |
GlobalFusedPose
JSON
Code Block |
---|
{
"globalFusedPose" {
"orientation": {
"w": 1.0,
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"timestamp": {
"timestamp": 0
},
"position": {
"longitude": 0.0,
"latitude": 0.0,
"height": 0.0
}
}
} |
...
Protobuf
...
Description
...
Unit
...
orientation
...
Orientation quaternion
...
without unit
...
position
...
Longitude, latitude, height
...
deg, deg, m
...
timestamp
...
Time of data acqusition
...
ns
Information regarding the ENU coordinate system is here: https://en.wikipedia.org/wiki/Local_tangent_plane_coordinates
Data Playback [DEPRECATED, switch over to ReplayExecutable]
Data from a log file can played back and forwarded to a fusion filter using the fileReader
block. An example of how to use this node we are showing below:
Code Block |
---|
Code Block |
syntax = "proto3"; package Fusion.proto; message Quaternion { double w "filereader": {= 1; double x = 2; "filename": "sampleDriveData.json", double y = 3; double z = "playbackInterval": 0.001 4; } message GpsPoint { } }, |
...
Parameter name
...
Description
...
Unit
...
filename
...
Name of the file to be played back
...
n/a
...
playbackInterval
...
Time interval between each line of the playback file
...
s
Replay Node [DEPRECATED, switch over to ReplayExecutable]
Replay data from disk file.
Code Block |
---|
"sources": {
"replay": {
"filename": "./MiniRide10.json",
"replaySpeed": 1, // replay speed is adjustable
"readMultipleLines": 10 // disk reader would read in multiple lines every time.
}
}
|
...
Key
...
Description
...
Type
...
Example value
...
filepath
...
Path to read in file
...
String
...
“log.json”
...
replaySpeed
...
Speed to the actual recording
...
Double
...
1
...
readMultipleLines
...
Number of lines to read each time
...
Integer
...
10
Replay Executable
This is a separate executable that can be built from FusionHub project. In Visual Studio build target dropdown there will be an option to build ReplayExecutable.exe
.
The replay executable will read in from file, push data to replay queue and send them to the network (tcp://localhost:9921
by default). To run the ReplayExecutable,
Code Block |
---|
ReplayExecutable.exe -r <path/to/file.json> [--replay-speed 1] [--queue-size 100] [--echo-data] [--verbose] |
...
Key
...
Description
...
Type
...
Example value
...
-r
...
Path to read in file
...
String
...
“log.json”
...
--replay-speed
...
Speed to the actual recording
...
Double
...
1
...
--queue-size
...
The size of queue that file reader would stop pushing new data to the replay queue.
Increase this value when you see lots of data is published at the same time when running with --verbose
...
Integer
...
100
...
--echo-data
...
Listen to the publishing endpoint and display the replayed data
...
N/A
...
N/A
...
--verbose
...
double longitude = 2;
double latitude = 3;
double height = 4;
}
message GlobalFusedPose {
int64 timecode = 5; // Optional: if 0 not set.
int64 timestamp = 1;
GpsPoint position = 2;
Quaternion orientation = 3;
}
message StreamData {
int32 sequence_number = 1;
GlobalFusedPose global_fused_pose = 10;
} |
Parameter name | Description | Unit |
---|---|---|
orientation | Orientation quaternion | without unit |
position | Longitude, latitude, height | deg, deg, m |
timestamp | Time of data acqusition | ns |
Recording and Replaying Data
Data Recording
You can record the output from FusionHub to a file by adding the following lines to the sink
section of config.json
. All JSON output that's printed to the screen during the operation of FusionHub will be written into the log file.
Code Block |
---|
"record": {
"filename": "driveData.json",
"format": "json"
} |
Parameter name | Description | Default |
---|---|---|
filename | Filename of the file to be recorded. | driveData.json |
format | The file format. At the moment only JSON is possible. | json |
Data Replay
In order to replay data from a JSON file a separate application ReplayExecutable.exe
that we deliver with LPVR-POS is used. The replay executable reads the JSON data from a defined file, pushes the data to a replay queue and sends them to the network (tcp://localhost:9921
by default). To run the ReplayExecutable use the following command:
Code Block |
---|
ReplayExecutable.exe -r <path/to/file.json> [--replay-speed 1] [--queue-size 100] [--echo-data] [--verbose] |
Key | Description | Type | Example value |
---|---|---|---|
-r | Path to read in file | String | “log.json” |
--replay-speed | Speed to the actual recording | Double | 1 |
--queue-size | The size of queue that file reader would stop pushing new data to the replay queue. Increase this value when you see lots of data is published at the same time when running with | Integer | 100 |
--echo-data | Listen to the publishing endpoint and display the replayed data | N/A | N/A |
...
--verbose | Print the debugging information, i.e., the timestamp a packet is added to the replay queue, replayed from the replay queue, and discarded from the replay queue. | N/A | N/A |
FusionHub can receive data from the replay application by adding the replay application’s endpoint source to the configuration file:
Code Block | ||
---|---|---|
| ||
{
...,
"sources": {
"endpoints": ["tcp://localhost:9921"]
}
} |
Graphical User Interface
Map View
...
Data Playback and Recording
Data playback and recording works in the same way for all FusionHub versions. It has been described in the previous chapters, but I’ll add a recap here to give it its dedicated chapter, as it’s a very important feature for data analysis and serialization.
Data Recording
Record node
You can record the output from FusionHub to a file by adding
Code Block |
---|
"record": {
"filename": "driveData.json",
"format": "json"
} |
to the sink
section of config.json
.
File Logger
Code Block |
---|
"logger": {
// "endpoints": ["inproc://file_reader_1"], // from file reader
"endpoints": ["tcp://localhost:9921"], // from Replay executable
"format": "json",
"filename": "recTest" // this will become the postfix of the filename
} |
Data Playback
Data from a log file can played back and forwarded to a fusion filter using the fileReader
block. An example of how to use this node we are showing below:
"sources": { "filereader": { ..., "filenamesources": "driveData.json",{ "playbackIntervalendpoints": 0.001["tcp://localhost:9921"] } }, |
...
Parameter name
...
Description
...
Unit
...
filename
...
Name of the file to be played back
...
n/a
...
playbackInterval
...
Time interval between each line of the playback file
...
Graphical User Interface
Connection Address
...
Dashboard Elements
...
Sensor Fusion Configuration and Calibration Status
...
General Settings
...
Map View
...
Communication with External Applications
...