support icon indicating copy to clipboard operation
support copied to clipboard

[Feature] 3D-based heading for driving. Feedback wanted!

Open laurensvalk opened this issue 1 year ago • 10 comments

What did we do? Until now, when you did hub.imu.heading() or drivebase.use_gyro(True), it would only register "flat turns", like driving on a table. But if you lifted the hub or steered across a ramp, you would lose the angle.

We updated the algorithms to take full motion into account. In the future, hub.imu.heading() will do this by default.

Gradual introduction To make sure nobody experiences sudden changes in the middle of the FLL season, we're introducing this gradually. For now, hub.imu.heading() will still only register flat turns by default.

How can you try it? But if you install the latest nightly firmware, you can now do:

# Old style heading. 
heading1 = hub.imu.heading()

# New style heading. This will become the default if everyone is happy.
heading3 = hub.imu.heading('3D')

It will work even better if you run the new calibration first. Just once. The results are saved on the hub until you change firmware again.

Copy pastable example

from pybricks.hubs import PrimeHub
from pybricks.tools import wait


# Optional: For more accuracy, calibrate once.
# Here's how: https://github.com/pybricks/support/issues/1907

# You can also use Technic/Essential/Inventor Hub 
hub = PrimeHub() 

while True:

    # Old style heading. 
    heading1 = hub.imu.heading()

    # New style heading. This will become the default if everyone is happy.
    heading3 = hub.imu.heading('3D')

    # It should be approximately the same as long as you stay flat. But the new
    # version should be much better if you lift it up and put it back.

    print(f"Old: {heading1:7.3f}    New: {heading3:7.3f}", )

    wait(100)


Can I use it with drive bases too?

Yes! As above, "flat turns" will remain default for now. But you can now do:

  • Same as before: drivebase.use_gyro(False)
  • Same as before: drivebase.use_gyro(True). But instead you can now do: drivebase.use_gyro('3D') to try out the future method.

Now it should work better on ramps or when it drives over bumps and obstacles.

Can I use it with block coding?

In the future, this will be the default so no action is needed, whether you use Python or blocks. If you want to try it early with blocks, please let me know and we'll put an example together. Thank you!

What are the limitations? It is still just a gyro without a compass for corrections. If you lift it from a table and make lots of motion and put it back, it's going to be off by a few degrees. But still much less than the "flat" case.

What do we want to know from you? Before we make this the default for everyone, we want to make sure that hub.imu.heading('3D') is at least as accurate as hub.imu.heading() for everyday use like on an FLL table with mostly flat turns.

We'd love to know if you want to try this in an FLL or WRO practice session.

If you do the new calibration, please let us know how it went. Just that alone should give you an accuracy bonus.

Thank you for your time!

If you want to do this as a science project with your students, we're happy to help, and answer "interview questions"!

laurensvalk avatar Dec 04 '24 10:12 laurensvalk

Thanks @afarago , @DrTom, @ggramlich, @MonongahelaCryptidCooperative, @TheWendyPower, @BertLindeman and @FLL-Team-24277, @Debenben for providing feedback about using the gyro in the past year. As you can see, it has now gone to the next stage with lots of new things to try. Thank you for your consideration!

laurensvalk avatar Dec 04 '24 10:12 laurensvalk

Impressive Laurens!

Added

hub.imu.reset_heading(0)

and stationary on the print:

    print(f"Old: {heading1:7.3f}    New: {heading3:7.3f} {hub.imu.stationary()}")

Ran on an not calibrated TechnicHub. Put it flat against the chair, turn it up right and rotate 90 degrees and back and flat again.

[EDIT] collapsed:

End of the measurements

Old:   0.003    New:   0.002 False
Old:   0.020    New:   0.020 False
Old:   0.166    New:   0.163 False
Old:   1.150    New:   1.154 False
Old:   2.980    New:   2.977 False
Old:   3.343    New:   3.352 False
Old:   1.234    New:   1.256 False
Old:   0.238    New:   0.229 False
Old:  -0.375    New:  -0.365 False
Old:  -1.437    New:  -1.435 False
Old:  -2.547    New:  -2.551 False
Old:  -3.679    New:  -3.663 False
Old:  -4.705    New:  -4.696 False
Old:  -5.155    New:  -5.243 False
Old:  -4.569    New:  -4.768 False
Old:  -1.747    New:  -1.878 False
Old:  -1.214    New:  -1.356 False
Old:  -0.631    New:  -0.778 False
Old:  -0.643    New:  -0.976 False
Old:  -0.518    New:  -1.070 False
Old:  -0.476    New:  -1.365 False
Old:  -0.457    New:  -1.546 False
Old:  -0.459    New:  -1.711 False
Old:  -0.453    New:  -2.403 False
Old:  -0.520    New: -14.731 False
Old:  -0.501    New: -11.165 False
Old:  -0.483    New:  -7.026 False
Old:  -0.542    New:  -7.612 False
Old:  -0.600    New:  -9.483 False
Old:  -0.855    New: -23.168 False
Old:  -0.981    New: -28.151 False
Old:  -1.120    New: -28.924 False
Old:  -1.160    New: -29.621 False
Old:  -1.178    New: -31.567 False
Old:  -1.170    New: -25.196 False
Old:  -1.218    New:   3.472 False
Old:  -1.373    New:  59.658 False
Old:  -1.262    New:  74.127 False
Old:  -1.124    New:  84.129 False
Old:  -0.935    New:  90.710 False
Old:  -0.738    New:  91.884 False
Old:  -0.660    New:  86.631 False
Old:  -0.561    New:  79.924 False
Old:  -0.614    New:  25.053 False
Old:  -0.654    New:  15.859 False
Old:  -1.101    New:  12.823 False
Old:  -4.446    New:   7.267 False
Old: -11.121    New:  -0.569 False
Old: -11.378    New:  -1.032 False
Old: -11.926    New:  -1.908 False
Old: -11.253    New:  -1.260 False
Old: -14.396    New:  -4.401 False
Old: -17.607    New:  -7.592 False
Old: -16.447    New:  -6.475 False
Old: -16.207    New:  -6.257 False
Old: -15.963    New:  -6.009 False
Old: -14.827    New:  -4.857 False
Old: -14.328    New:  -4.370 False
Old: -14.086    New:  -4.100 False
Old: -16.467    New:  -6.438 False
Old: -16.829    New:  -6.890 False
Old: -16.673    New:  -6.716 False
Old: -15.912    New:  -5.949 False
Old: -15.517    New:  -5.583 False
Old:  -8.704    New:   1.259 False
Old:  -8.700    New:   1.260 False
Old:  -8.668    New:   1.291 False
Old:  -8.689    New:   1.269 False
Old:  -8.706    New:   1.251 False
Old:  -8.725    New:   1.229 False
Old:  -8.621    New:   1.335 False
Old:  -8.400    New:   1.559 False
Old:  -8.438    New:   1.520 False
Old:  -8.433    New:   1.523 False
Old:  -8.431    New:   1.523 False
Old:  -8.430    New:   1.524 False
Old:  -8.429    New:   1.524 False
Old:  -8.429    New:   1.524 False
Old:  -8.428    New:   1.524 False
Old:  -8.427    New:   1.525 False
Old:  -8.432    New:   1.520 False
Old:  -8.432    New:   1.519 False
Old:  -8.429    New:   1.521 True
Old:  -8.425    New:   1.526 True
Old:  -8.420    New:   1.530 True
Old:  -8.412    New:   1.538 True
Old:  -8.410    New:   1.539 True
Old:  -8.410    New:   1.540 True
Old:  -8.408    New:   1.542 True
Old:  -8.404    New:   1.545 True
Old:  -8.404    New:   1.545 True
Old:  -8.401    New:   1.548 True
Old:  -8.399    New:   1.550 True
Old:  -8.398    New:   1.551 True
Old:  -8.396    New:   1.552 True
Old:  -8.395    New:   1.554 True
Old:  -8.394    New:   1.554 True
Old:  -8.393    New:   1.556 True
Old:  -8.392    New:   1.556 True
Old:  -8.390    New:   1.559 True
Old:  -8.389    New:   1.559 True
Old:  -8.387    New:   1.561 True
Old:  -8.387    New:   1.561 True
Old:  -8.386    New:   1.562 True
Old:  -8.385    New:   1.564 True
Old:  -8.383    New:   1.566 True

[EDIT] Next test: the same hub now calibrated. Changed the wait to 1000 msec (too many lines). I see (old) gyro drift and much less (new). In this measurements I see the (new) drift get almost back to zero. The hub is placed on a stone windowsill so more stable than on a table on soft carpet.

stable hub measurements (1 second wait)
Old:   0.000    New:   0.000 True
Old:  -0.001    New:  -0.002 True
Old:  -0.006    New:  -0.006 True
Old:  -0.009    New:  -0.009 True
Old:  -0.008    New:  -0.008 True
Old:  -0.013    New:  -0.011 True
Old:  -0.009    New:  -0.008 True
Old:  -0.007    New:  -0.007 True
Old:  -0.005    New:  -0.004 True
Old:  -0.008    New:  -0.007 True
Old:   0.001    New:   0.000 True
Old:   0.001    New:  -0.000 True
Old:   0.004    New:   0.003 True
Old:   0.001    New:  -0.000 True
Old:  -0.001    New:  -0.004 True
Old:  -0.000    New:  -0.004 True
Old:   0.001    New:  -0.004 True
Old:   0.002    New:  -0.004 True
Old:   0.000    New:  -0.005 True
Old:   0.008    New:   0.001 True
Old:   0.008    New:   0.000 True
Old:   0.008    New:   0.001 True
Old:   0.010    New:   0.002 True
Old:   0.011    New:   0.001 True
Old:   0.012    New:   0.004 True
Old:   0.016    New:   0.007 True
Old:   0.019    New:   0.009 True
Old:   0.014    New:   0.003 True
Old:   0.016    New:   0.006 True
Old:   0.017    New:   0.007 True
Old:   0.022    New:   0.010 True
Old:   0.023    New:   0.009 True
Old:   0.024    New:   0.010 True
Old:   0.026    New:   0.011 True
Old:   0.025    New:   0.010 True
Old:   0.032    New:   0.017 True
Old:   0.039    New:   0.021 True
Old:   0.046    New:   0.026 True
Old:   0.050    New:   0.026 True
Old:   0.051    New:   0.026 True
Old:   0.054    New:   0.029 True
Old:   0.056    New:   0.028 True
Old:   0.050    New:   0.024 True
Old:   0.055    New:   0.025 True
Old:   0.058    New:   0.026 True
Old:   0.062    New:   0.030 True
Old:   0.061    New:   0.028 True
Old:   0.064    New:   0.030 True
Old:   0.067    New:   0.032 True
Old:   0.069    New:   0.031 True
Old:   0.070    New:   0.029 True
Old:   0.070    New:   0.027 True
Old:   0.073    New:   0.028 True
Old:   0.070    New:   0.023 True
Old:   0.072    New:   0.024 True
Old:   0.072    New:   0.023 True
Old:   0.074    New:   0.025 True
Old:   0.077    New:   0.024 True
Old:   0.079    New:   0.025 True
Old:   0.074    New:   0.020 True
Old:   0.063    New:   0.009 True
Old:   0.051    New:  -0.002 True
Old:   0.047    New:  -0.006 True
Old:   0.038    New:  -0.015 True
Old:   0.031    New:  -0.020 True
Old:   0.021    New:  -0.030 True
Old:   0.015    New:  -0.033 True
Old:   0.011    New:  -0.035 True
Old:   0.008    New:  -0.037 True
Old:  -0.002    New:  -0.044 True
Old:  -0.014    New:  -0.054 True
Old:  -0.021    New:  -0.059 True
Old:  -0.027    New:  -0.063 True
Old:  -0.031    New:  -0.064 True
Old:  -0.034    New:  -0.064 True
Old:  -0.036    New:  -0.063 True
Old:  -0.034    New:  -0.060 True
Old:  -0.035    New:  -0.058 True
Old:  -0.034    New:  -0.055 True
Old:  -0.028    New:  -0.048 True
Old:  -0.026    New:  -0.044 True
Old:  -0.027    New:  -0.043 True
Old:  -0.025    New:  -0.039 True
Old:  -0.022    New:  -0.036 True
Old:  -0.020    New:  -0.034 True
Old:  -0.024    New:  -0.035 True
Old:  -0.029    New:  -0.038 True
Old:  -0.033    New:  -0.041 True
Old:  -0.041    New:  -0.046 True
Old:  -0.045    New:  -0.048 True
Old:  -0.047    New:  -0.048 True
Old:  -0.048    New:  -0.048 True
Old:  -0.054    New:  -0.052 True
Old:  -0.057    New:  -0.052 True
Old:  -0.061    New:  -0.054 True
Old:  -0.066    New:  -0.058 True
Old:  -0.066    New:  -0.055 True
Old:  -0.071    New:  -0.057 True
Old:  -0.081    New:  -0.065 True
Old:  -0.081    New:  -0.061 True
Old:  -0.083    New:  -0.061 True
Old:  -0.086    New:  -0.061 True
Old:  -0.088    New:  -0.060 True
Old:  -0.091    New:  -0.060 True
Old:  -0.088    New:  -0.056 True
Old:  -0.095    New:  -0.060 True
Old:  -0.097    New:  -0.060 True
Old:  -0.098    New:  -0.059 True
Old:  -0.096    New:  -0.056 True
Old:  -0.090    New:  -0.048 True
Old:  -0.097    New:  -0.052 True
Old:  -0.093    New:  -0.047 True
Old:  -0.099    New:  -0.051 True
Old:  -0.108    New:  -0.056 True
Old:  -0.117    New:  -0.062 True
Old:  -0.120    New:  -0.063 True
Old:  -0.129    New:  -0.068 True
Old:  -0.132    New:  -0.069 True
Old:  -0.143    New:  -0.076 True
Old:  -0.151    New:  -0.081 True
Old:  -0.155    New:  -0.080 True
Old:  -0.157    New:  -0.077 True
Old:  -0.155    New:  -0.072 True
Old:  -0.154    New:  -0.068 True
Old:  -0.157    New:  -0.068 True
Old:  -0.160    New:  -0.068 True
Old:  -0.157    New:  -0.063 True
Old:  -0.153    New:  -0.058 True
Old:  -0.155    New:  -0.058 True
Old:  -0.156    New:  -0.057 True
Old:  -0.158    New:  -0.055 True
Old:  -0.160    New:  -0.056 True
Old:  -0.164    New:  -0.056 True
Old:  -0.171    New:  -0.061 True
Old:  -0.175    New:  -0.063 True
Old:  -0.182    New:  -0.067 True
Old:  -0.186    New:  -0.068 True
Old:  -0.186    New:  -0.065 True
Old:  -0.191    New:  -0.067 True
Old:  -0.194    New:  -0.066 True
Old:  -0.198    New:  -0.067 True
Old:  -0.199    New:  -0.066 True
Old:  -0.200    New:  -0.065 True
Old:  -0.209    New:  -0.069 True
Old:  -0.213    New:  -0.070 True
Old:  -0.217    New:  -0.071 True
Old:  -0.218    New:  -0.069 True
Old:  -0.217    New:  -0.067 True
Old:  -0.218    New:  -0.064 True
Old:  -0.225    New:  -0.068 True
Old:  -0.225    New:  -0.066 True
Old:  -0.235    New:  -0.072 True
Old:  -0.234    New:  -0.067 True
Old:  -0.233    New:  -0.063 True
Old:  -0.242    New:  -0.068 True
Old:  -0.248    New:  -0.069 True
Old:  -0.251    New:  -0.069 True
Old:  -0.247    New:  -0.063 True
Old:  -0.254    New:  -0.065 True
Old:  -0.257    New:  -0.066 True
Old:  -0.262    New:  -0.067 True
Old:  -0.266    New:  -0.067 True
Old:  -0.270    New:  -0.066 True
Old:  -0.270    New:  -0.063 True
Old:  -0.274    New:  -0.065 True
Old:  -0.273    New:  -0.061 True
Old:  -0.276    New:  -0.062 True
Old:  -0.283    New:  -0.065 True
Old:  -0.287    New:  -0.066 True
Old:  -0.287    New:  -0.064 True
Old:  -0.293    New:  -0.065 True
Old:  -0.294    New:  -0.063 True
Old:  -0.305    New:  -0.071 True
Old:  -0.307    New:  -0.070 True
Old:  -0.308    New:  -0.068 True
Old:  -0.311    New:  -0.068 True
Old:  -0.314    New:  -0.068 True
Old:  -0.320    New:  -0.070 True
Old:  -0.326    New:  -0.073 True
Old:  -0.329    New:  -0.072 True
Old:  -0.333    New:  -0.071 True
Old:  -0.336    New:  -0.071 True
Old:  -0.342    New:  -0.072 True
Old:  -0.348    New:  -0.074 True
Old:  -0.353    New:  -0.075 True
Old:  -0.352    New:  -0.071 True
Old:  -0.355    New:  -0.071 True
Old:  -0.362    New:  -0.074 True
Old:  -0.366    New:  -0.075 True
Old:  -0.368    New:  -0.073 True
Old:  -0.377    New:  -0.078 True
Old:  -0.383    New:  -0.079 True
Old:  -0.391    New:  -0.082 True
Old:  -0.393    New:  -0.080 True
Old:  -0.401    New:  -0.085 True
Old:  -0.400    New:  -0.080 True
Old:  -0.400    New:  -0.079 True
Old:  -0.403    New:  -0.076 True
Old:  -0.408    New:  -0.076 True
Old:  -0.412    New:  -0.077 True
Old:  -0.410    New:  -0.073 True
Old:  -0.406    New:  -0.066 True
Old:  -0.402    New:  -0.061 True
Old:  -0.407    New:  -0.064 True
Old:  -0.403    New:  -0.056 True
Old:  -0.401    New:  -0.052 True
Old:  -0.402    New:  -0.051 True
Old:  -0.402    New:  -0.049 True
Old:  -0.391    New:  -0.037 True
Old:  -0.392    New:  -0.036 True
Old:  -0.387    New:  -0.030 True
Old:  -0.389    New:  -0.031 True
Old:  -0.387    New:  -0.028 True
Old:  -0.392    New:  -0.032 True
Old:  -0.397    New:  -0.035 True
Old:  -0.401    New:  -0.036 True
Old:  -0.409    New:  -0.041 True
Old:  -0.416    New:  -0.047 True
Old:  -0.423    New:  -0.052 True
Old:  -0.432    New:  -0.057 True
Old:  -0.431    New:  -0.053 True
Old:  -0.429    New:  -0.050 True
Old:  -0.435    New:  -0.055 True
Old:  -0.433    New:  -0.051 True
Old:  -0.443    New:  -0.056 True
Old:  -0.450    New:  -0.062 True
Old:  -0.459    New:  -0.067 True
Old:  -0.468    New:  -0.071 True
Old:  -0.473    New:  -0.073 True
The program was stopped (SystemExit).

BertLindeman avatar Dec 04 '24 11:12 BertLindeman

I asked a question in: https://github.com/pybricks/support/issues/1907#issuecomment-3154279338

The same question is applicable to this feature also. I'm curious about the reaction

neptunus0001 avatar Aug 05 '25 15:08 neptunus0001

I asked a question in: #1907 (comment)

The same question is applicable to this feature also. I'm curious about the reaction

My question was answered in: https://github.com/pybricks/support/issues/1907#issuecomment-3156109994

neptunus0001 avatar Aug 06 '25 08:08 neptunus0001

I asked a question in: https://github.com/pybricks/support/issues/1907#issuecomment-3154279338

The same question is applicable to this feature also. I'm curious about the reaction

Another question: I've noticed that features in the repo keep their status open. I'm used to them being closed. Is there a house rule for this in the Pybrick repos?

This issue is a request for comments. So far, one person has tried it and given feedback.

We usually aim for a bit more feedback before making a big change to an existing feature. It should be an improvement, but that is what the feedback phase is for. Once it is merged (or in this case, made default), the issue can be closed.

If you've tried it, what do you think?

laurensvalk avatar Aug 06 '25 10:08 laurensvalk

I asked a question in: #1907 (comment) The same question is applicable to this feature also. I'm curious about the reaction Another question: I've noticed that features in the repo keep their status open. I'm used to them being closed. Is there a house rule for this in the Pybrick repos?

This issue is a request for comments. So far, one person has tried it and given feedback.

We usually aim for a bit more feedback before making a big change to an existing feature. It should be an improvement, but that is what the feedback phase is for. Once it is merged (or in this case, made default), the issue can be closed.

If you've tried it, what do you think?

@Debenben wrote: "Yes, 3D heading and calibration were implemented in https://github.com/pybricks/pybricks-micropython/releases/tag/v3.6.0b3 and therfore part of subsequent versions such as the current stable release 3.6.1." Link: https://github.com/pybricks/support/issues/1907#issuecomment-3156109994

I did not try yet, see my feedback/question in the link above.

1: I'm a bit surprised that @Debenben reaction contradicts yours @laurensvalk. It's not a big deal, but I thought it was already in an official release. 2: I will try this when am back from my vacation and share feedback.

neptunus0001 avatar Aug 06 '25 19:08 neptunus0001

@roykrikke It is in the official 3.6.1 release, but with hub.imu.heading() or by using the block you get the 1D based heading like before. You need to use hub.imu.heading('3D') to get the new 3D based one. The reason why this is classified as "big" change is that there might be people wanting to use existing programs that expect 1D heading calculation (e.g. they use their own compensation logic for tilt). If you suddenly change the behavior of the existing function, their programs will stop working. Therefore you announce such a breaking change like in the documentation to give people the chance to protest ("I cannot work with 3D based heading or raw gyro data functions, I need the 1D based one...") or change their programs accordingly.

Debenben avatar Aug 06 '25 21:08 Debenben

Ha, now it's all clear to me. Thanks @laurensvalk & @laurensvalk for the explanation.

I'll think about how I can contribute with testing on the request on top of this thread.

neptunus0001 avatar Aug 07 '25 06:08 neptunus0001

I did some testing after the idea of the orginal post from @laurensvalk and the adoptations shared @BertLindeman

Ran on an calibrated PrimeHub.

>>> version
('primehub', '3.6.1', 'ci-release-86-v3.6.1 on 2025-03-11')

Put it flat against a thick piece of glass on a table. I'm 100% sure it's straight, rotated to 450 degrees and back again. Let me know if there is anything else I can test that might yield better results for the feedback request.

Image

Image

Code for testing:

Click me
   from pybricks.hubs import PrimeHub
   from pybricks.tools import wait
   
   # Optional: For more accuracy, calibrate once.
   # Here's how: https://github.com/pybricks/support/issues/1907
   
   # You can also use Technic/Essential/Inventor Hub 
   hub = PrimeHub() 
   
   hub.imu.reset_heading(0)
   
   while True:
   
       # Old style heading. 
       heading1 = hub.imu.heading()
   
       # New style heading. This will become the default if everyone is happy.
       heading3 = hub.imu.heading('3D')
   
       # It should be approximately the same as long as you stay flat. But the new
       # version should be much better if you lift it up and put it back.
   
       print(f"Old: {heading1:7.3f}    New: {heading3:7.3f} {hub.imu.stationary()}")
       wait(2000)

Measurements details (collapsed):

Click me
    Old:   0.000    New:   0.000 True
    Old:  -0.011    New:   0.001 False
    Old:  -0.038    New:  -0.016 True
    Old:  -0.042    New:  -0.013 True
    Old:  -0.038    New:  -0.000 True
    Old: -90.055    New: -90.009 False
    Old: -90.055    New: -89.994 True
    Old: -90.052    New: -89.978 True
    Old: -90.069    New: -89.984 False
    Old: -90.087    New: -89.989 False
    Old: -180.150    New: -180.034 False
    Old: -180.151    New: -180.024 True
    Old: -180.161    New: -180.023 True
    Old: -187.295    New: -187.035 False
    Old: -270.229    New: -270.088 False
    Old: -270.254    New: -270.101 True
    Old: -270.272    New: -270.106 True
    Old: -319.440    New: -319.211 False
    Old: -360.444    New: -360.266 False
    Old: -360.445    New: -360.254 True
    Old: -360.456    New: -360.252 True
    Old: -360.458    New: -360.243 True
    Old: -450.430    New: -450.205 False
    Old: -450.420    New: -450.182 True
    Old: -450.419    New: -450.173 True
    Old: -424.933    New: -424.818 False
    Old: -360.412    New: -360.162 False
    Old: -360.410    New: -360.152 True
    Old: -360.420    New: -360.155 True
    Old: -270.319    New: -270.047 False
    Old: -270.316    New: -270.033 True
    Old: -270.329    New: -270.038 True
    Old: -212.631    New: -212.379 False
    Old: -180.284    New: -179.975 False
    Old: -180.270    New: -179.953 True
    Old: -180.250    New: -179.927 True
    Old: -180.239    New: -179.911 False
    Old: -90.165    New: -89.853 False
    Old: -90.138    New: -89.826 True
    Old: -90.129    New: -89.820 True
    Old: -89.543    New: -89.289 False
    Old:  -0.071    New:   0.230 False
    Old:  -0.074    New:   0.218 False
    Old:  -0.068    New:   0.218 False
    Old:  -0.069    New:   0.212 False
    Old:  -0.066    New:   0.210 False
    Old:  -0.060    New:   0.211 False
    Old:  67.803    New:  67.991 False
    Old:  90.031    New:  90.298 False
    Old:  90.049    New:  90.316 True
    Old:  90.055    New:  90.327 True
    Old: 167.444    New: 167.689 False
    Old: 180.148    New: 180.435 True
    Old: 180.137    New: 180.427 True
    Old: 180.142    New: 180.435 True
    Old: 270.138    New: 270.425 False
    Old: 270.142    New: 270.415 True
    Old: 270.141    New: 270.413 True
    Old: 295.608    New: 295.664 False
    Old: 360.168    New: 360.434 False
    Old: 360.159    New: 360.424 True
    Old: 360.152    New: 360.417 True
    Old: 446.449    New: 446.676 False
    Old: 450.218    New: 450.493 True
    Old: 450.210    New: 450.487 True
    Old: 450.201    New: 450.479 False
    Old: 424.701    New: 424.979 False
    Old: 360.102    New: 360.372 False
    Old: 360.104    New: 360.375 True
    Old: 361.375    New: 361.647 True
    Old: 270.049    New: 270.325 False
    Old: 270.043    New: 270.317 False
    Old: 222.056    New: 222.439 False
    Old: 180.002    New: 180.288 False
    Old: 180.002    New: 180.284 True
    Old:  92.062    New:  92.398 False
    Old:  89.975    New:  90.248 True
    Old:  89.957    New:  90.231 False
    Old:  -0.173    New:   0.096 False
    Old:  -0.184    New:   0.086 True
    Old:  -0.213    New:   0.059 True
    Old:  -0.202    New:   0.074 True

neptunus0001 avatar Aug 12 '25 13:08 neptunus0001

Thank you. What about when you lift it from the table, move it around, and put it back down? With the 3D option it should stay a lot closer to 0.

laurensvalk avatar Aug 12 '25 13:08 laurensvalk