在 我在写代码,它接受马达转动的程度,并使用这些数据来计算车轮所行驶的距离(使用距离=旋转次数*每次旋转所覆盖的距离)。在
然后进行误差调整(考虑摩擦等环境因素)。在
最后,利用三角法计算沿x轴和y轴移动的距离。在
以上所有操作都是由类CoordinateManager
中包含的函数straight
完成的。此函数由另一个类的实例调用。在
class CoordinateManager:
goalcord = [20, 0]
def __init__(self):
self.curcord = [0, 0]
self.theta = 0
def get_compass_angle(self):
compass = Sensor(address='in2')
return compass.value(0)
def turn(self, iangle, fangle):
self.theta = self.theta + (fangle-iangle)
def straight(self, turnangle):
d = turnangle*2*3.14*2/360
d = 1.8120132*(d**0.8938054)
thetarad = radians(self.theta)
dx = d*sin(thetarad)
dy = d*cos(thetarad)
self.curcord[0] += dx
self.curcord[1] += dy
打印d
和{
这一定意味着数组self.curcord
也有有效值。然而,事实并非如此。打印self.curcord
的两个元素将输出复数(一些大浮点+另一个大浮点j)。在
除了三角函数必须返回复数之外,我想不出任何逻辑解释。但是,我认为python内置lib函数返回错误值的可能性非常小。在
有什么逻辑上的错误我可以忽略吗?在
编辑:我刚试着把最后两行改成:
^{pr2}$我刚尝试在显示值时使用.real
。即使现在的价值观是真实的,它们仍然是错误的。我将进一步调查这是否是由某些计算错误引起的。在
因为您在上面的评论中说
turnangle
可以是任何整数,所以问题可以直接追溯到这一行:由于
turnangle
可以是负数,因此在执行这行之前d
的值也可以是负数;通常情况下,增加到任意小数次幂的负值是复杂的。在因此问题根本不在于trig函数。以上也让我相信当你说
。。。你只是在这句话之后才这么做的:
^{pr2}$这就解释了为什么你错误地认为问题一定在别处。在
更新:
像你那样把变量设置为某个函数本身是一个很坏的习惯。试着使用一个不同的变量名来避免混淆-正如你在上面看到的,我不得不引用“this line”而不是他们的变量名。
假设马达的行为是相同的,不管
turnangle
的符号是什么,这样的方法也许会起作用?在相关问题 更多 >
编程相关推荐