Vector Nav 300 Driver

Note: This document is unfinished. This document will cover the initial requirements along with the design that will satisfy these requirements.

 

Initial Questions:

  1. What features of VN will be used (IMU or GPS or both)?

  2. Which IMU measurement set will we be using (2 options)?

  3. Which GPS measurement set will we be using (4 options)?

  4. Is there a minimum incoming data rate that needs to be met? Could this be limited by using both the IMU and GPS at the same time, alternating between the two.

  5. Where will this driver live in the repo?

  6. What should happen in case VN returns an error (of course will depend on the type of error)

 

Initial Requirements:

  • Will provide GPS and IMU data to other subsystems

    • Should this be request based? Where a subsystem requests GPS data or IMU data and the driver then fetches that data and returns it.

    • OR should this be “grab most recent data based”? Where the driver constantly updates some buffer or data member with the most recent IMU or GPS data and outside subsystems just grab that data.

  • Will package the data in a readable and easy to use structure (or class). The naming of each data member will likely be identical to the naming given in the user manual for easy reference.

  • Use error codes from the VN as diagnostic data

 

  • There is also possibility for a serial command prompt, used for advanced device configuration and diagnostics. Intended for human use only with a simple serial terminal.

 

Plan of Implementation:

  1. Configure CubeMX to set up serial communication with VN

  2. Create the driver in <location in repo>, the steps will include:

    1. Create some structures or class holding the information of the VN300 (pin configs, frequently used commands, error codes)

    2. Create driver interface

       

      Main loop:

    3. Establish connection (only done once I assume)

    4. Send command for either GPS or IMU

    5. Check for errors (error codes and CRC check)

      1. Error handling in case of an error

    6. Parse return data into a struct

    7. Present data (return the data to the driver user, update a data member)

    8. Back to step b

  3. Test