方向盘应该转多少度?

来源:互联网 发布:招商网络推广费用 编辑:程序博客网 时间:2024/06/10 07:34

初学车的人都希望能找到方向盘转的角度和汽车本身转过的角度之间的关系。是啊,如果能有一个明确的对应关系,学车就容易不少了,但是很遗憾,事情并不是这么简单的。自己尝试着初步研究了一下这个问题,发现方向盘转动和汽车本身运动之间存在非常复杂的非线性关系。所以,基本上是没有人通过求解这个线性系统来学车的,而是通过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,进一步对速度进行积分就可以获得轨迹方程。

0 0
原创粉丝点击