Versions Compared

Key

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

...

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 quaternion

  • globalFusedPose: 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

fusedVehiclePose output is printed to command line

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

Default

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

...