This project was done as a lab assignment for the EECE 5554 (Robotics Sensing and Navigation) course at Northeastern University.
- Aim
- Data Collection
- Custom ROS 2 Messages and Drivers
- Launching the ROS 2 Drivers
- The list of plots included in the analysis of the data
- Results
- Acknowledgements
The main goal of the project was to collect GPS and IMU data using the NUANCE autonomous car provided by Northeastern University. For collecting the data, we had to create custom ROS 2 messages and drivers for the GPS and IMU sensors and combine those drivers to get a single custom message with a single timestamp. After collecting the data, we had to analyzed the IMU's noise characteristics through Allan Variance and calibrate magnetometer by correcting hard and soft iron distortions along with error compensation in IMU and GPS data. After that, we had to compensate for accelerometer bias to estimate vehicle’s forward velocity, and fuse the yaw angle computed from gyroscope and magnetometer data using a complementary filter to estimate heading for Dead Reckoning with IMU.
We used a USB-based GNSS GPS puck and the VN-100 VectorNav IMU for data collection. We attached these sensors to the NUANCE autonomous car.
We collected two different datasets namely: data_going_in_circles
and data_driving
. Each contains both, GPS and IMU data. Both the datasets are described below:
- We travelled 3 circular laps, with increasing speeds in each lap, around the Ruggles Circle near Northeastern University.
- The purpose of this dataset is solely to remove the hard and soft iron distortions from the data and calibrate the magnetometer.
- For this dataset, we drove around the streets of Boston for several minutes and ensured that our path had a lot of turns.
- We returned to the point from where we started.
- Using the calibration parameters obtained by working on the
data_going_in_circles
, the magnetometer data is calibrated for this dataset too, and the entire sensor fusion and dead reckoning part of this project is performed on this dataset.
- The
gps_msgs
package contains a custom ROS 2 message calledGPSmsg.msg
that hasheader
,latitude
,longitude
,altitude
,utm_easting
,utm_northing
,zone
, andletter
as fields. - The
imu_custom_message
package contains a custom ROS 2 message calledIMUmsg.msg
that hasheader
,imu
,mag_field
, andraw_data (A string with any name containing the raw IMU string)
as fields. - The
gps_driver
reads in serial data from the puck, parses it for the latitude, longitude and altitude. It converts the latitude and longitude to UTM. It then publishes this custom ROS 2 message over a topic called/gps
. - The
imu_driver
parses the $VNYMR string, to get accel, gyro, orientation (roll, pitch, yaw) and magnetometer data. It converts the Yaw, Pitch, Roll data into quaternions and publishes it as orientation in the sameimu_custom_msg
. - Since the GNSS puck and the VectorNav IMU run at different frequencies, with the IMU having a much higher frequency, the timestamps obtained from the IMU are utilized while performing the analysis.
To run the launch file that will launch both the GPS and IMU drivers together, please use the following command:
ros2 launch imu_driver master_launch.py gps_port:=<Insert the GPS port's path> imu_port:=<Insert the IMU port's path>
For example,
ros2 launch imu_driver master_launch.py gps_port:=/dev/pts/3 imu_port:=/dev/pts/4
- The magnetometer X-Y plot before and after hard and soft iron calibration.
- The time series magnetometer data before and after the correction.
- Magnetometer Yaw and Yaw Integrated from Gyro together.
- Low Pass Filter, High Pass Filter, and Complementary Filter plots together.
- Yaw from the Complementary filter and Yaw angle computed by the IMU together.
- Velocity estimate from the GPS with Velocity estimate from accelerometer before adjustment.
- Velocity estimate from the GPS with Velocity estimate from accelerometer after adjustment.
- 𝜔𝑋̇ and 𝑦̈𝑜𝑏𝑠 plotted together.
- A single plot showing the path followed shown by GPS & path followed estimated by IMU.
The analysis, all the plots, and the final results are included in the Project_Report.pdf
file in detail.
I would like to specially thank our course instructor Prof. Hanumant Singh as well as our course teaching assistants Vishnu Rohit Annadanam and Jasen Levoy who helped me immensely not only while doing this project but throught the course. They were great at teaching, managing the course, and were always available and enthusiastic to solve everyone's doubts. I would also like to thank Northeastern University for providing the students with the NUANCE autonomous car so that we could collect our data.