$35
Aim
The aim of this coursework is to give you experience of fusing data from a variety of sensors to obtain an optimal position, velocity and heading solution. This builds on Workshops 1, 2 and 3.
Assessment
This coursework is worth 33% of the module, or 4.95 credits.
Background
A robotic lawnmower somewhere in London is equipped with a GNSS receiver, wheel speed sensors, magnetic compass and a low-cost MEMS gyroscope to determine its position, velocity and speed so that it may determine an efficient route. You have been provided with (simulated) data from all of these sensors. You should assume that all sensors exhibit errors. The lawnmower is also equipped with ultrasound sensors for obstacle avoidance, though this is outside the scope of the exercise.
Your Task
You task is to use the sensor data to compute the best possible horizontal position, horizontal velocity and heading solution for the lawnmower at each point in time. There are a number of different approaches which result in navigation solutions of differing accuracy and reliability. More sophisticated approaches will be rewarded with higher marks. You are not expected to use everything you have learnt during the module; it’s up to you to select the most appropriate method.
Each group must write their own software to do this. You are welcome to adapt some of the software you wrote for the workshops. Note that the GNSS satellites received may be different. You will probably find it easiest to use Matlab, but you may use another language if you wish.
It is recommended that you initially generate one solution using GNSS only and another solution using the other sensors. You can then compare these with each other to see if you have made any mistakes. When you are happy with these separate solutions, you should then generate a final solution using all of the data.
There is no need to worry about the details of the lawnmower design, such as the steering mechanism.
Two deliverables must be uploaded to Moodle by 09:00 on Thursday 10 February 2022. The first is a motion profile file containing your position, velocity and heading solution. The second is a report describing your method and results. Your source code must be attached to the report as an appendix. Do not submit .rar files.
Further details follow.
Data Files Supplied
You have been provided on Moodle with three data files, all in comma-separated variable (CSV) format:
In the pseudo-ranges file, the first column contains the time tag in seconds and the first row contains the satellite numbers. The remaining rows and columns contain the corresponding pseudo-range measurements in metres.
In the pseudo-range rates file, the first column contains the time in seconds and the first row contains the satellite numbers. The remaining rows and columns contain the corresponding pseudo-range rate measurements in metres per second.
In the dead-reckoning file, column 1 contains time in seconds, columns 2 to 5 contain the wheel-speed measurements from sensors 1 to 4 in metres per second. Column 6 contains the gyroscope angular rate measurements in radians per second. Column 7 contains the heading measurements in degrees from the magnetic compass.
Sensor Specifications
The following GNSS error specifications should be assumed under typical conditions:
Signal in space error standard deviation: 1m.
Residual ionosphere error standard deviation at zenith: 2m.
Residual troposphere error standard deviation at zenith: 0.2m.
Code tracking and multipath error standard deviation: 2m.
Range rate tracking and multipath error standard deviation: 0.02 m/s.
You can assume that the GNSS measurements have already been corrected for the ionosphere, troposphere and satellite clock errors. The values given above describe the errors remaining after the corrections have been applied as these corrections are not perfect. Note that ionosphere and troposphere errors are larger at lower elevation angles.
Reasonable, though not optimal, performance can be achieved by assuming a noise standard deviation of 10m on all pseudo-range measurements and 0.05 m/s on all pseudo-range rate measurements. GNSS measurements apply to the instant at which they are time tagged.
Please be aware that additional large GNSS measurement errors can occur in the presence of non-line-of-sight reception or satellite faults.
You can assume the following properties for the GNSS receiver clock:
Initial receiver clock offset standard deviation: 100 000 m.
Receiver clock drift standard deviation: 200 m/s.
Clock phase PSD: 0.01 m2s-3.
Clock frequency PSD: 0.04 m2s-1.
Remember that you need to use least-squares to estimate the receiver clock errors before you can initialise an extended Kalman filter.
The locations of the wheel speed sensors with respect to the GNSS antenna (sometimes known as ‘lever arms’) are as follows:
1) 0.3m forwards, -0.2m right;
2) 0.3m forwards, 0.2m right;
3) -0.2m forwards, -0.2m right;
4) -0.2m forwards, 0.2m right.
Note that the rear wheels are the driving wheels.
The following sensor specifications may be assumed for all wheel speed sensors to account for the effects of varying tyre radii and wheel slip:
Scale factor error standard deviation: 3%.
Noise standard deviation: 0.05 m/s.
The wheel speed sensor outputs are also quantised at a level of 0.02 m/s.
The gyroscope can be assumed to have the following error characteristics:
A bias standard deviation of 1 degree per second.
A scale factor error standard deviation of 1%.
A cross-coupling error standard deviation of 0.1%.
A noise standard deviation of 10-4 radians per second.
· A quantisation level of 2´10-4 radians per second.
Note that these gyro errors are much larger than the rotation rate of the Earth. Therefore, if you neglect the Earth’s rotation when you process the gyro measurements, it won’t have much effect on your results.
Both wheel speed and gyroscope measurements are averaged over the interval between the previous and current time tags. Reasonable, though not optimal, results can be achieved by assuming a power spectral density of 0.01 m2/s3 for the wheel speed measurement errors and 3´10-6 rad2/s for the gyro measurement errors apart from the bias. Thus, every second, the velocity error variance grows by 0.01 m2/s2 and the heading error variance by 3´10-6 rad2.
The magnetic heading solution can be assumed subject to a noise-like error with a standard deviation of 4° in the absence of localised magnetic anomalies. You can assume that the magnetic heading has already been calibrated for the effects of the lawnmower’s hard-iron and soft-iron magnetism. Magnetic heading measurements apply to the instant at which they are time tagged.
Software Resources Supplied
A number of Matlab files have been provided for your use on Moodle. You must use Satellite_position_and_velocity.m to obtain the correct satellite positions and velocities in Cartesian Earth-centred Earth-fixed (ECEF) coordinates. Use of the other files is optional. They are:
CTM_to_Euler.m converts attitude from a coordinate transformation matrix to Euler angles.
Define_Constants.m sets up a number of useful constants.
ECEF_to_NED.m computes geodetic, latitude, longitude and height; Earth-referenced velocity in the north, east and down directions; and the body to north-east-down coordinate transformation matrix from the Cartesian ECEF position; Earth-referenced velocity resolved in the ECEF frame; and the body to ECEF coordinate transformation matrix.
Euler_to_CTM.m converts attitude from Euler angles to a coordinate transformation matrix.
Gravity_ECEF computes the acceleration due to gravity resolved in the ECEF frame.
NED_to_ECEF.m computes the Cartesian ECEF position; Earth-referenced velocity resolved in the ECEF frame; and the body to ECEF coordinate transformation matrix from geodetic, latitude, longitude and height; Earth-referenced velocity in the north, east and down directions; and the body to north-east-down coordinate transformation matrix.
pv_ECEF_to_NED.m computes geodetic, latitude, longitude and height and Earth-referenced velocity in the north, east and down directions from the Cartesian ECEF position and Earth-referenced velocity resolved in the ECEF frame.
pv_NED_to_ECEF.m computes the Cartesian ECEF position and Earth-referenced velocity resolved in the ECEF frame from geodetic, latitude, longitude and height and Earth-referenced velocity in the north, east and down directions.
Radii_of_curvature.m computes the meridian and transverse radii of curvature.
Skew_symmetric.m computes the skew-symmetric matrix of the input vector.