本文主要是介绍方向盘应该转多少度?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
初学车的人都希望能找到方向盘转的角度和汽车本身转过的角度之间的关系。是啊,如果能有一个明确的对应关系,学车就容易不少了,但是很遗憾,事情并不是这么简单的。自己尝试着初步研究了一下这个问题,发现方向盘转动和汽车本身运动之间存在非常复杂的非线性关系。所以,基本上是没有人通过求解这个线性系统来学车的,而是通过RL或者Q-Learning来进行神经网络学习的,这就是为什么你们要上驾校学习很久的原因。。。
但是,如果我们要设计一个自动驾驶的机车,那么这个问题非解决不可,我们需要掌握机车的运动学方程才能进一步编写控制算法。简单的观察后发现,一辆汽车的运动无非是两种运动的组合——圆周运动和直线运动(轮子不打滑)。一条连续的行车轨迹可以被分解为若干个圆周运动和直线运动的片段,注意到直线可以看作是一个半径无穷大的圆周,所以所有的运动都可以被拆借为不同半径的圆周运动。
换句话说,对于轨迹上的任意足够小的一个曲线片段,我们都可以找到一个对应的圆刚好覆盖这个片段。而这个圆的半径是由什么决定的?没错!就是由前轮转过的角度还有汽车的中心轴距(这是常量)决定的,而前轮转过的角度和方向盘转过的角度是线性关系,所以完全可以把汽车圆周运动的半径看作是方向盘转角的函数。为了简便分析,我们先考虑半径作为时间的函数时候的情形。
进行如下思想试验,假设汽车在某个很小的时间段内方向盘的转角是恒定的,所以转动的半径和速度也是恒定的,现在假设汽车在这个时间段dt内转过了一个很小的角度theta,假设汽车在这个时间段起始时的速度矢量是V=(x'(t),y'(t)),那么在经过了dt的时间后速度方向也变化了theta角度,这时我们来开速度增量的模|dV|=2|V|sin(theta/2)(因为dV刚好是等腰矢量三角形的底边,对因的角刚好是theta)。由于这个角度非常小,所以sin(x)=x,也就是说|dV|=|V|theta,另外,回忆弧长公式S=R theta我们马上可以得出对应的半径就是ds/theta,考虑到R可能会取无穷大,我们取倒数方便计算:1/R=theta/ds=|dV/ds|/|V|。如果一开始,我们就把速度矢量正则化,以T表示,结果就是1/R=|dT/ds|。
回忆曲线的弧长公式:
ds^2=dx^2+dy^2 => ds = sqrt(x'^2+y'^2)dt
接下来是求dT/dt, 已知T=1/sqrt(x(t)^2+y(t)^2) (x(t),y(t)), 这个计算略微复杂,最后的结果是:
注意到这个结果有个很有趣的特性,最开始的正则化使得T与dT互相垂直,如果不正则化就不会有这种正交性存在。
接下来计算K(t)=1/R(t)=|dT/ds|=|dT/dt/(ds/dt)|=
至此我们可以求解汽车的运动方程:
汽车在t时刻的方向T(t) = +T0,进一步对速度进行积分就可以获得轨迹方程。
转载请注明本文地址: 方向盘应该转多少度?
这篇关于方向盘应该转多少度?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!