LSM303D 6Axis Accelerator/Compass V2.0的Python库:意外结果

2024-05-20 17:58:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近为LSM303D 6轴加速计/罗盘买了一块Grove传感器板。不幸的是,该设备还没有Python库(只有C++ libraryArduino .ino文件)。在

我试图将它与GrovePi +板一起使用Raspberry Pi,并希望用Python代码使用它,所以我尝试将C++代码转录成Python。但是,我得到了奇怪的输出。在

有关设备的其他信息可在Pololu Datasheet上找到

sudo i2cdetect -y 1显示可以在地址0x1E找到设备

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

下面是Python代码:

^{pr2}$

一些示例输出:

    Accelerometer     ||        Compass        ||              Heading
  x   |   y   |   z   ||   x   |   y   |   z   ||       calc      | tilt corrected  |
0.022 |-0.012 |1.056 ||   876 | -1119 |  5788 ||  141.94 deg     |  305.58 deg     |
0.027 |-0.011 |1.052 ||   919 | -1128 |  5826 ||  140.83 deg     |  305.62 deg     |
0.026 |-0.010 |1.053 ||   903 | -1108 |  5777 ||  140.82 deg     |  305.61 deg     |
0.024 |-0.009 |1.054 ||   914 | -1140 |  5790 ||  141.28 deg     |  305.57 deg     |
0.024 |-0.010 |1.056 ||   895 | -1122 |  5801 ||  141.42 deg     |  305.42 deg     |
0.024 |-0.010 |1.055 ||   905 | -1088 |  5747 ||  140.25 deg     |  306.69 deg     |
0.022 |-0.008 |1.057 ||   900 | -1106 |  5748 ||  140.86 deg     |  306.15 deg     |

从显示的输出中可以明显看出的一点是,Z方向的加速度大于1g。它非常接近,可以认为是正常的,但是当倾斜时,X和Y都超过1g,这会使gettilHeading()中的asin函数产生数学错误,因此会截断。在

然而,真正的问题是罗盘在整个旋转过程中的误差。我把设备对准了我手机上的指南针,它给出了一个接近360/0度的数值。然而,顺时针旋转它会产生误差,误差会从255度左右的预期值(接近磁西)攀升到30度左右。在

列表实验:

Angle   Trial 1 Trial 2 Trial 3 Trial 4 AVERAGE  ERROR
0       356.53  355.18  355.74  357.13  356.145  356.145
0       -3.47   -4.82   -4.26   -2.87   -3.855   -3.855
15      11.26   10.65   11.57   11.02   11.125   -3.875
30      30.29   30.82   30.74   30.29   30.535   0.535
45      40.24   40.32   39.95   39.93   40.11    -4.89
60      55.84   55.51   55.53   54.89   55.4425  -4.5575
75      67.23   67.42   68.46   68.23   67.835   -7.165
90      83.65   83.8    83.96   83.55   83.74    -6.26
105     101.11  100.91  100.13  100.66  100.7025 -4.2975
120     117.15  117.13  116.59  115.79  116.665  -3.335
135     125.92  125.56  125.19  126.14  125.702  -9.2975
150     142.74  142.44  142.94  142.56  142.67   -7.33
165     157.22  156.77  157.53  157.07  157.1475 -7.8525
180     171.97  171.61  172.17  172.26  172.0025 -7.9975
195     183.81  183.47  182.99  183.39  183.415  -11.585
210     195.59  196.6   197.2   197.58  196.7425 -13.2575
225     210.07  210.59  209.47  210.21  210.085  -14.915
240     218.97  219.3   219.53  219.48  219.32   -20.68
255     226.13  226.27  226.61  226.18  226.2975 -28.7025
270     242.63  241.64  242.33  242.32  242.23   -27.77
285     259.89  258.83  258.92  259     259.16   -25.84
300     283.8   284.51  283.51  282.87  283.6725 -16.3275
315     294.05  295.47  295.23  295.57  295.08   -19.92
330     320.09  319.28  318.64  318.16  319.0425 -10.9575
345     342.39  342.87  342.34  343.13  342.6825 -2.3175
360     8.85    8.48    8.93    9.1     8.84     8.84

错误图表:

Error over Angle: deviation from expected angle

是我在库中犯了什么错误,还是我在处理一个有故障的设备?在

(虚线趋势线是一个6阶多项式,我怀疑它与之有任何实际关系。毕竟,我希望这个函数是循环的。)


Tags: 文件函数代码错误library传感器raspberryarduino