本文是对之前文章“Reeds-Shepp曲线学习笔记及相关思考【点击可跳转】”的补充,因小伙伴的提问,本文补充介绍上述文章第三部分中基础运动公式的推导过程。
本文以上面的第一个公式为例进行介绍,即Reeds-Shepp曲线基础运动中的向前左转运动,其他五个可根据第一个的过程,以此类推。
现假设机器人位于S点处横纵坐标分别为x、y,与x轴夹角为ψ,因此,机器人在S点的状态可以表示为(x,y,ψ),执行L+基础运动前行左转弧长t后,到达G点。求机器人在G点的状态,根据第一个公式可得G点的状态如下:。
G:(x+sin(ψ+t)−sin(ψ),y−cos(ψ+t)+cos(ψ),ψ+t)G:\left(x+\sin(\psi+t)-\sin(\psi),y-\cos(\psi+t)+\cos(\psi),\psi+t\right)G:(x+sin(ψ+t)−sin(ψ),y−cos(ψ+t)+cos(ψ),ψ+t)
现在我们来推导一下这个结果是怎么来的,为方便理解,我绘制了以下示意图,图中大写字母是为了方便对图中的边和角进行描述,图中的小写字母是角度。
G点的第三个状态是与x轴的夹角,执行L+运动之前为ψ, 由于是向前左转,也就是逆时针运动,逆时针运动为正,又因为L+运动向前左转了弧长t,在之前的文章“Reeds-Shepp曲线学习笔记及相关思考【点击可跳转】”中已介绍过计算时会将最小转弯半径归一化为1,即上图中边FG和边FS的长度为1,弧长=弧长圆心角x半径,所以弧长t也对应转过的弧度制角度,因此G点与x轴的夹角为ψ+t
接下来介绍稍微复杂一点的前两个状态的推导过程,由上图容易知道,G点的横纵坐标xg、ygx_g、y_gxg、yg满足下式:
xg=x+GS∗cos ∠GSAyg=y+GS∗sin ∠GSA;x_g=x+GS*\text{cos ∠GSA} \hspace{1cm} y_g=y+GS*\text{sin ∠GSA} ; xg=x+GS∗cos ∠GSAyg=y+GS∗sin ∠GSA;
所以我们只要求得边GS的长度和∠GSA即可求得xg、ygx_g、y_gxg、yg
我们先来求边GS,现在我们已知∠GFS=t,边GF=边FS=1,由余弦公式c2=a2+b2−2abcosγc^2=a^2+b^2-2ab\cos\gammac2=a2+b2−2abcosγ得,边GS的长度为:
GS2=GF2+FS2−2∗GF∗FS∗cos ∠GFS=1+1−2∗cos t=2(1−cos t)GS^2=GF^2+FS^2-2*GF*FS*\text{cos ∠GFS}=1+1-2*\text{cos t}=2(1-\text{cos t})GS2=GF2+FS2−2∗GF∗FS∗cos ∠GFS=1+1−2∗cos t=2(1−cos t)
由半角公式sinα2=±1−cosα2\sin\dfrac{\alpha}{2}=\pm\sqrt{\dfrac{1-\cos\alpha}{2}}sin2α=±21−cosα得,上式可化为:
GS2=2(1−cos t)=4∗sin2t2GS^2=2(1-\text{cos t})=4*\sin^{2}\frac{t}{2}GS2=2(1−cos t)=4∗sin22t
所以:
GS=4∗sin2t2=2∗sint2GS=\sqrt{4∗\sin^{2}\frac{t}{2}}=2*sin\frac{t}{2}GS=4∗sin22t=2∗sin2t
我们再来求∠GSA,过程如下:
∠GSC=(π–∠GCS)/ 2 = (π–(π–t))/ 2=t2\text{∠GSC=(π--∠GCS)/ 2 = (π--(π--t))/ 2}= \frac{t}{2}∠GSC=(π–∠GCS)/ 2 = (π–(π–t))/ 2=2t
∠GSA=∠GSC+∠CSA=t2+ψ\text{∠GSA=∠GSC+∠CSA}= \frac{t}{2}+ψ∠GSA=∠GSC+∠CSA=2t+ψ
将求得的边GS和∠GSA带入,可得G点的横纵坐标xg、ygx_g、y_gxg、yg的表达式:
xg=x+GS∗cos ∠GSA=x+2∗sint2∗cos(t2+ψ)x_g=x+GS*\text{cos ∠GSA} =x+ 2*sin\frac{t}{2} *\cos \left(\frac{t}{2}+\psi\right) xg=x+GS∗cos ∠GSA=x+2∗sin2t∗cos(2t+ψ)
yg=y+GS∗sin ∠GSA=y+2∗sint2∗sin(t2+ψ)y_g=y+GS*\text{sin ∠GSA}=y+ 2*sin\frac{t}{2} *\sin \left(\frac{t}{2}+\psi\right) yg=y+GS∗sin ∠GSA=y+2∗sin2t∗sin(2t+ψ)
最后再运用一下如下所示的积化和差公式:
利用积化和差公式,我们可以对xg、ygx_g、y_gxg、yg的表达式进一步化简,如下:
xg=x+2∗sint2∗cos(t2+ψ)=x+sin(t2+t2+ψ)+sin(t2−t2−ψ)=x+sin(t+ψ)−sin(ψ)x_g=x+ 2*sin\frac{t}{2} *\cos \left(\frac{t}{2}+\psi\right)=x+sin(\frac{t}{2} +\frac{t}{2}+ψ)+sin(\frac{t}{2} -\frac{t}{2}-ψ)=x+sin(t+ψ)-sin(ψ)xg=x+2∗sin2t∗cos(2t+ψ)=x+sin(2t+2t+ψ)+sin(2t−2t−ψ)=x+sin(t+ψ)−sin(ψ)
yg=y+2∗sint2∗sin(t2+ψ)=y+cos(t2−t2−ψ)−cos(t2+t2+ψ)=y−cos(t+ψ)+cos(ψ)y_g=y+ 2*sin\frac{t}{2} *\sin \left(\frac{t}{2}+\psi\right) =y+cos(\frac{t}{2} -\frac{t}{2}-ψ)-cos(\frac{t}{2} +\frac{t}{2}+ψ)=y-cos(t+ψ)+cos(ψ) yg=y+2∗sin2t∗sin(2t+ψ)=y+cos(2t−2t−ψ)−cos(2t+2t+ψ)=y−cos(t+ψ)+cos(ψ)
到这里,我们已经得到了推导前给出的G点的状态表达式:
G:(x+sin(ψ+t)−sin(ψ),y−cos(ψ+t)+cos(ψ),ψ+t)G:\left(x+\sin(\psi+t)-\sin(\psi),y-\cos(\psi+t)+\cos(\psi),\psi+t\right)G:(x+sin(ψ+t)−sin(ψ),y−cos(ψ+t)+cos(ψ),ψ+t)
也就是,文章开头处给出的第一个Reeds-Shepp曲线的基础运动公式:
Lt+(x,y,ψ)=(x+sin(ψ+t)−sin(ψ),y−cos(ψ+t)+cos(ψ),ψ+t)L_t^+(x,y,\psi)\quad=\big(x+\sin(\psi+t)-\sin(\psi),y-\cos(\psi+t)+\cos(\psi),\psi+t\big)Lt+(x,y,ψ)=(x+sin(ψ+t)−sin(ψ),y−cos(ψ+t)+cos(ψ),ψ+t)
恭喜小伙伴们(✪ω✪),到这里也就证明,或者说推导就完毕了,有兴趣的小伙伴,可以以此为例子,进行其余五个Reeds-Shepp曲线基础运动公式的推导(ง •_•)ง