Posts: 19
Threads: 7
Joined: Jan 2021
Reputation:
0
Is it possible to get heave data out of the IMU from pypilot into signalk? If it matters I have the inertial sensor bought from pypilot.org.
So far I've managed to convert navigation.attitude using Node-Red into Furuno's proprietary nmea0183 sentence to get pitch and roll data into my TimeZero based chart-plotter, if I could get heave data I could use Node-Red to generate the proprietary Furuno heave sentence, it would allow me to feed heave data into my network attached sounder (Furuno DFF1), allowing me to use the heave compensation feature of the sounder.
Posts: 2,324
Threads: 21
Joined: Jun 2016
Reputation:
72
pypilot currently converts as seen in signalk.py:
'imu': {('navigation.headingMagnetic', radians): 'heading_lowpass',
('navigation.attitude', radians): {'pitch': 'pitch', 'roll': 'roll', 'yaw': 'heading_lowpass'},
('navigation.rateOfTurn', radians): 'headingrate_lowpass'},
There is no computation of heave and no translation of it. Internally pypilot computes heel, but not heave surge or sway, though the imu.accel_residuals term has these it may have to be rotated by the fusion pose, otherwise the terms will change if the pilot is remounted and realigned. I am not sure in what units the heave is needed, these are in "G" or gravity.
Posts: 19
Threads: 7
Joined: Jan 2021
Reputation:
0
I'm making a somewhat educated guess here, but from what I have gathered from my research it is measured in distance up or down from boats normal (resting) height, my guess is in Meters. As the boat rides up a wave, the distance to bottom increases, so the heave value goes up, and is applied as a negative to the depth reading to provide a heave compensated reading.
Posts: 2,324
Threads: 21
Joined: Jun 2016
Reputation:
72
This is not always a good thing though. Sometimes I prefer the depth sounder to give actual readings of depth which is the distance to the bottom.
In any case, heave is the acceleration upward or downward. You would have to integrate it twice to provide an offset in meters, and be sure to re-zero the integration over each cycle so integration errors do not accumulate.