我最近为LSM303D 6轴加速计/罗盘买了一块Grove传感器板。不幸的是,该设备还没有Python库(只有C++ library和Arduino .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
错误图表:
是我在库中犯了什么错误,还是我在处理一个有故障的设备?在
(虚线趋势线是一个6阶多项式,我怀疑它与之有任何实际关系。毕竟,我希望这个函数是循环的。)
目前没有回答
相关问题 更多 >
编程相关推荐