My application involves dynamic and precise measurement of heading angle of a boat so as to accurately know the boat's path. I am interested in fusing FreeIMU data with GPS heading data for minimal yaw drift and highest accuracy.
The application involves measuring accuracy of the path of a boat traveling at between 30 and 36mph. Specifically, this is for competitive water skiing in a slalom course where the boat is required to be accurately on a heading and centered in a row of buoys spaced about 9 ft. apart for a distance of about 1000 feet. This translates to about 23 seconds of accurate operation of the system which can be reset on the next pass thru the course.
The slalom course is located very accurately on the water surface because the buoys are all surveyed in to a tolerance of about +/- 1 inch. The first step is to measure the boat heading w.r.t. the accurately known course heading, i.e. assure the boat is parallel and on a straight line to the course. Next we will try to "locate" the boat on the specific line thru the center of the course and measure how close to center the boat is on the specific heading. This location process may be laser and/or video based.
The attached photo shows the application. The driver's requirement is to keep the boat about +/- 4" to the centerline of the course. This application will try to measure how well the driver does. If I can make the measurement work the ultimate goal is add a control loop to "auto-steer" the boat (with the driver still in control).
At this point in the project, I have FreeIMU code running on a ArduIMU. Yaw drift is still large after repeated calibrations and I haven't even begun to look into accuracy. My application requires the best yaw/heading performance I can achieve even at the expense of pitch and roll. I find if I zero out the two gain factors twoKpDef and twoKiDef, I see much improved yaw drift and stability (locking into an angle after a quick movement). Pitch and roll drift are slightly negatively affected but, as I say, I really don't care much about those values. I don't really understand how the PID controller in FreeIMU works so don't know what this is really doing. I have also disabled the gyro's to assess the affect on the IMU performance and still can't get "yaw-lock" (or anything near it).
Here is a request for help on the yaw performance with videos showing the drift:
Assuming acceptable IMU performance can be achieved, I wish to integrate a MediaTek MT3329 to fuse its heading output with the IMU to maximize accuracy and minimize or eliminate drift (at least for the short time the system needs to work between resets).
Any comments, questions, and especially collaboration and/or help on this project is welcome!