Ardumower / Sunray

Ardumower Sunray
71 stars 54 forks source link

GPS and IMU: State estimation improvements #145

Open ShadedSelf opened 10 months ago

ShadedSelf commented 10 months ago

State estimation now uses yaw, pitch and roll intead of just yaw. Also:

Implements #59

Offsets are added to the physical antenna position. The virtual height can be set to the ground level to compensate for tilt.

Implements #45

disaster123 commented 9 months ago

this branch works really great for me and driving without gps is now pretty accurate. I still have one big problem. If the mower is near the house it sometimes get GPS jumps while still beeing in fixed mode... which results in jumps on the map while the old position or float mode is far more accurate.

greymfm commented 9 months ago

Nice. You can make the GPS fix solution more robust against errors (jumps etc.) by increasing the minimum GPS signal strength. Typically, near houses the GPS signal is also reflected from the house, and that results in a weaker but incorrect (because longer) signal in the GPS receiver and finally in an invalid position (jump). By increasing the minimum signal strength, you can filter out those reflection signals. The result will be that you get a float solution in difficult areas (near house etc.) instead of a fix solution. https://github.com/Ardumower/Sunray/blob/191fdb6deffe138b5645a60301308d68d1322e3f/alfred/config.h#L330 The parameters (C/N0 Threshold etc.) are described here in detail: https://wiki.ardumower.de/index.php?title=Ardumower_Sunray#RTK_float-to-fix_recovery_and_false-fix_issues

disaster123 commented 9 months ago
alfred/config.h:#define CPG_CONFIG_FILTER_NCNOTHRS 0   // C/N0 Threshold #SVs: 10 (robust), 6 (less robust)
sunray/config_example.h:#define CPG_CONFIG_FILTER_NCNOTHRS 10   // C/N0 Threshold #SVs: 10 (robust), 6 (less robust)

10 seems to be the default except for alfred? Any reason? same for CPG_CONFIG_FILTER_CNOTHRS.

ShadedSelf commented 9 months ago

I have noticed something similar, I have a theory that this happens now because it actually goes into invalid for a split second, then gets a false fix, this would have stoped the mower before and then have time to get a good fix while spinning up the motor.

Ive made some changes, added a variable into the config file to control how much time to wait after invalid to trust fix, maybe 2-3 second would be enough.