...
The GPS receiver is integrated with the LPMS-IG1P sensor. Connect the antenna cable and place the GPS antenna on top of the vehicle. Alternatively, If RTK-GPS is reqquired a standalone RTK gps GPS module can be used as a gps GPS input source as well.
CAN Bus Connection
...
LPVR-POS Sensor Fusion Filter
Filter Inputs
Both the LD and the HD filter need the following sources as input. One option is to operate the filter with our LPMS-IG1P sensor that contains IMU and a GPS receiver. This allows for standard GPS absolute position accuracy. Relative accuracy and update rate are higher, based on odometry and IMU data. The other option is to use a separate RTK-GPS unit to get high accuracy RTK-GPS readings. We will look at how to set up an RTK-GPS system for LPVR-POS in a following chapter.
...
As the filter relies heavily on GPS measurements it doesn’t deliver good results indoors. The better GPS reception, the better the resulting output of the filter. In it’s current state it therefore only works outdoors. In a future version that combines LD and HD filters, this issue will be resolved.
Notes on Filter Output
This Filter outputsThe HD filter outputs the following data:
fusedVehiclePose
(2D pose): Output equivalent to the LD filter output. Includes position in meters relative to starting point, global position (lon, lat) and heading.fusedPose
(3D pose): relative to starting point, x, y (in meters) + z (height) + 3D orientation quaternionglobalFusedPose:
globally referenced 3D position (longitude, latitude, height) + 3D orientation quaternion in ENU frame
Which filter output works best depends on your application. For augmented reality applications we reommend using globalFusedPose
.
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 |
Setting up the ImuToCarRotation parameter
This filter needs as input:
LPMS-IG1P data source for IMU and GPS data
...
Output data format
FusedVehiclePose
JSON
Code Block |
---|
{ "typefusedVehiclePose": "DualRtk", { "settingsacceleration": { "sensor1x": {0.0, // If specification needed, insert first IG1 sensor name here"y": 0.0, "z": 0.0 }, //"nameglobalPosition": { "ig1p232800650050" "x": 0.0, "autodetectTypey": "ig1p"0.0 }, "rtcmlastDataTime": true,{ "imuEndpointtimestamp": "tcp://*:8802" 0 } } |
Alternatively for case with separate IMU and RTK GPS sources (with NTRIP Caster for RTK correction)
Code Block |
---|
"imu": {, "type": "OpenZen", "settingsposition": { "autodetectType": "ig1" } }, "RTCMx": {0.0, "type": "NTRIP", "settingsy": {0.0 "host": "some-host-name"}, "porttimestamp": "2101", { "mountpointtimestamp": "some-mount-point",0 "user": "some-user"}, "passwordutmZone": "some-password31T", "userAgentyaw": "LPVR",0.0 } } |
Protobuf
Code Block |
---|
syntax = "initialLatitudeproto3":; 35.65736, package Fusion.proto; message Vector2 { "initialLongitude": 139.73239, double x = 2; double y = "forwardGnss":3; } truemessage Vector { }double },x "gnss": {= 2; double y "type": "NMEA", "settings":= 3; double z = 4; } message FusedVehiclePose { int64 timestamp = 1; "port": "/dev/ttyUSB0",Vector2 position = 2; Vector2 global_position = 3; "baudrate": 115200, double yaw = 4; string utm_zone = 5; "rtcm": true int64 timecode = 6; } }, |
RTCM Source
...
// Optional: if 0 not set.
Vector acceleration = 7;
}
message StreamData {
int32 sequence_number = 1;
FusedVehiclePose fused_vehicle_pose = 9;
} |
Parameter name | Description |
---|
Unit |
---|
type
Type of RTCM correction data source. Currently only NTRIP
is allowed.
NTRIP
host
NTrip caster host.
192.168.1.1
port
NTrip caster port.
2101
mountpoint
NTrip mountpoint or stream to receive rtcm correction data.
user
NTrip caster username.
password
NTrip caster password.
userAgent
Name of user agent when connecting to NTrip caster.
LPVR-POS
initialLatitude
Latitude to forward to Ntrip caster on first connect.
0.0
initialLongitude
Longitude to forward to Ntrip caster on first connect.
0.0
forwardGnss
Set true if gnss data from gnss source is to be forwarded to NTRIP caster. This is useful if Ntrip caster offers dynamic switching of RTCM correction data based on forwarded location.
false
GNSS Source
...
Parameter name
...
Description
...
Default
...
type
...
Data output format for gnss data source. Currently only NMEA
is allowed.
...
NMEA
...
port
...
Serial port number for gnss source.
...
baudrate
...
Serial port baudrate to connect to gnss source.
...
rtcm
...
Set true to enable RTCM correction data forwarding from RTCM source to gnss module.
...
false
CAN bus and vehicle decoder source
Code Block |
---|
"vehicle": {
"type": "Automotive",
"vehicleStateEndpoint": "tcp://*:8999",
"settings": {
"canInterface": "PeakCAN",
"vehicleType": "R56"
}
} |
Output data format
FusedVehiclePose
...
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 |
FusedPose
JSON
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 "y }, "timestamp": { "timestamp": 0.0 } } }, |
Protobuf
Code Block |
---|
syntax = "proto3"; package Fusion.proto; message Quaternion "timestamp": { double w = 1; double x = 2; "timestamp": 0 double y = 3; double z },= 4; } message Vector { "utmZone": "31T", double x = 2; double y "yaw": 0.0= 3; double z = } } |
...
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
FusedPose
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 } }4; } message FusedPose { int64 timestamp = 1; Vector position = 2; Quaternion orientation = 3; Vector angular_velocity = 4; int64 timecode = 5; // Optional: if 0 not set. } message StreamData { int32 sequence_number = 1; FusedPose fused_pose = 4; } |
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 |
...