铛铛!小秘籍来咯!
小秘籍团队独辟蹊径,以偏微分方程,中心驱动等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。
抓紧小秘籍,我们出发吧~
完整内容可以在文章末尾领取!
问题1:建立描述车辆转弯的数学模型。
假设车辆为一个质点,其受力分析如下:
-
转弯时车辆受到重力的作用,重力方向垂直于地面向下,大小为 m g mg mg,其中 m m m为车辆的质量, g g g为重力加速度。
-
车辆受到来自地面的支持力 N N N,支持力垂直于地面向上,大小等于重力大小 m g mg mg。
-
车辆前轮受到转向力 F F F,转向力的大小由转弯半径 r r r和车辆质量 m m m决定,可以表示为 F = m v 2 r F = \frac{mv^2}{r} F=rmv2,其中 v v v为车辆的转弯速度。
由以上分析可以得到车辆在转弯过程中受到的合力为:
F n e t = F + N − m g = m v 2 r + m g − m g = m v 2 r F_{net} = F + N - mg = \frac{mv^2}{r} + mg - mg = \frac{mv^2}{r} Fnet=F+N−mg=rmv2+mg−mg=rmv2
根据牛顿第二定律可以得到车辆的加速度为:
a = F n e t m = m v 2 m r = v 2 r a = \frac{F_{net}}{m} = \frac{mv^2}{mr} = \frac{v^2}{r} a=mFnet=mrmv2=rv2
由于车辆的加速度与速度的平方成正比,因此在转弯过程中,车辆的速度越大,转弯半径越小。同时,由于车辆的前轮受到转向力,因此车辆会绕其前轮的转轴旋转,转弯角度与转弯半径和车辆的轴距有关。
假设车辆的轴距为 L L L,则车辆转弯的转弯半径可以表示为:
r = L tan θ r = \frac{L}{\tan\theta} r=tanθL
其中 θ \theta θ为车辆前内轮的转弯角度。因此,车辆转弯的加速度可以表示为:
a = v 2 L tan θ a = \frac{v^2}{L\tan\theta} a=Ltanθv2
综上所述,可以建立如下数学模型:
{ a = v 2 L tan θ r = L tan θ \begin{cases} a = \frac{v^2}{L\tan\theta}\\ r = \frac{L}{\tan\theta} \end{cases} {a=Ltanθv2r=tanθL
其中, a a a为车辆的加速度, v v v为车辆的转弯速度, L L L为车辆的轴距, θ \theta θ为车辆前内轮的转弯角度, r r r为车辆的转弯半径。
问题2:根据问题1的数学模型,给出每隔0.1s车辆的位置,保存到文件result2.xlsx中,文件格式如表B-1所示。
根据问题1中的数学模型,可以得到车辆的转弯加速度和转弯半径的关系为:
{ a = v 2 L tan θ r = L tan θ \begin{cases} a = \frac{v^2}{L\tan\theta}\\ r = \frac{L}{\tan\theta} \end{cases} {a=Ltanθv2r=tanθL
通过变换可以得到:
tan θ = v 2 a L \tan\theta = \frac{v^2}{aL} tanθ=aLv2
因此,可以得到每隔0.1s车辆的转弯角度为:
θ = arctan v 2 a L \theta = \arctan\frac{v^2}{aL} θ=arctanaLv2
根据题目中给出的车辆参数,可以计算出车辆的轴距 L = 4 m L = 4m L=4m,转弯速度 v = 20 3.6 m / s v = \frac{20}{3.6}m/s v=3.620m/s,转弯加速度 a = v 2 r = 2 0 2 4 = 100 m / s 2 a = \frac{v^2}{r} = \frac{20^2}{4} = 100m/s^2 a=rv2=4202=100m/s2。
因此,根据上述公式可以得到每隔0.1s车辆的转弯角度为:
θ = arctan ( 20 / 3.6 ) 2 100 × 4 ≈ 0.0913 r a d ≈ 5.2 3 ∘ \theta = \arctan\frac{(20/3.6)^2}{100\times4} \approx 0.0913 rad \approx 5.23^{\circ} θ=arctan100×4(20/3.6)2≈0.0913rad≈5.23∘
根据题目要求,需要计算出车辆的位置,因此可以使用运动学公式计算车辆的位置。
首先,假设车辆开始转弯时的位置为原点,车头方向为y轴正方向,x轴与车头方向垂直,向右为正方向。
根据题目给出的参数,可以得到车辆前轮和后轮到车头的距离 d = 0.5 m d = 0.5m d=0.5m。
假设每隔0.1s车辆的速度为 v i v_i vi,则经过0.1s后车辆的位置可以表示为:
{ x i = ( d + d tan θ i ) sin θ i + v i cos θ i × 0.1 y i = ( d + d tan θ i ) cos θ i + v i sin θ i × 0.1 \begin{cases} x_i = (d + d\tan\theta_i)\sin\theta_i + v_i\cos\theta_i\times0.1\\ y_i = (d + d\tan\theta_i)\cos\theta_i + v_i\sin\theta_i\times0.1 \end{cases} {xi=(d+dtanθi)sinθi+vicosθi×0.1yi=(d+dtanθi)cosθi+visinθi×0.1
其中 θ i \theta_i θi为第 i i i次转弯时的转弯角度, v i v_i vi为第 i i i次转弯时车辆的速度。
因此,可以通过循环计算,每隔0.1s得到车辆的位置坐标,并将其保存到表B-1所示的格式中。
问题3:确定该车前内轮的最大和最小转弯角度,及车辆开始转弯的位置。
根据题目要求,车辆A停在垂直停车位正中,因此可以得到车辆前轮到车头的距离为 2.65 m 2.65m 2.65m,车辆后轮到车尾的距离为 2.35 m 2.35m 2.35m。
而根据题目中给出的车位宽度为 2.4 m 2.4m 2.4m,可以得到车辆的轴距为 4.75 m 4.75m 4.75m。
由于车辆开始转弯时,前轮距离车头的距离为0.5m,因此可以得到车辆开始转弯时的位置为 0.5 m 0.5m 0.5m。
根据问题2的计算结果,可以得到车辆前内轮的转弯角度为 5.2 3 ∘ 5.23^{\circ} 5.23∘,因此可以得到车辆前内轮的最大和最小转弯角度分别为 5.2 3 ∘ 5.23^{\circ} 5.23∘和 − 5.2 3 ∘ -5.23^{\circ} −5.23∘。
综上所述,车辆前内轮的最大和最小转弯角度分别为 5.2 3 ∘ 5.23^{\circ} 5.23∘和 − 5.2 3 ∘ -5.23^{\circ} −5.23∘,车辆开始转弯的位置为 0.5 m 0.5m 0.5m。
车辆转弯过程中,车辆的位置可以用如下公式描述:
{ x ( t ) = x 0 + R ⋅ sin ( v R ⋅ t + θ ) y ( t ) = y 0 + R ⋅ cos ( v R ⋅ t + θ ) \begin{cases} x(t) = x_0 + R \cdot \sin(\frac{v}{R} \cdot t + \theta) \\ y(t) = y_0 + R \cdot \cos(\frac{v}{R} \cdot t + \theta) \end{cases} {x(t)=x0+R⋅sin(Rv⋅t+θ)y(t)=y0+R⋅cos(Rv⋅t+θ)
其中, x 0 x_0 x0和 y 0 y_0 y0为车辆开始转弯时的位置, R R R为转弯半径, v v v为车辆转弯速度, t t t为时间, θ \theta θ为车辆转弯时的偏转角度。
根据题目中给出的车辆参数,可以计算出车辆的转弯半径为:
R = L 2 ⋅ tan ϕ R = \frac{L}{2 \cdot \tan{\phi}} R=2⋅tanϕL
其中, L L L为车辆的轴距, ϕ \phi ϕ为前内轮的转弯角度。
因此,根据题目中给出的参数,可以得出车辆转弯过程中的数学模型为:
{ x ( t ) = x 0 + L 2 ⋅ tan ϕ ⋅ sin ( v L 2 ⋅ tan ϕ ⋅ t + θ ) y ( t ) = y 0 + L 2 ⋅ tan ϕ ⋅ cos ( v L 2 ⋅ tan ϕ ⋅ t + θ ) \begin{cases} x(t) = x_0 + \frac{L}{2 \cdot \tan{\phi}} \cdot \sin(\frac{v}{\frac{L}{2 \cdot \tan{\phi}}} \cdot t + \theta) \\ y(t) = y_0 + \frac{L}{2 \cdot \tan{\phi}} \cdot \cos(\frac{v}{\frac{L}{2 \cdot \tan{\phi}}} \cdot t + \theta) \end{cases} ⎩ ⎨ ⎧x(t)=x0+2⋅tanϕL⋅sin(2⋅tanϕLv⋅t+θ)y(t)=y0+2⋅tanϕL⋅cos(2⋅tanϕLv⋅t+θ)
通过这个数学模型,可以计算出车辆转弯过程中每个时刻的位置,从而对车辆的转弯过程进行建模和控制。
车辆转弯的数学模型可以分为两部分,一部分是车辆在水平方向的运动,另一部分是车辆在垂直方向的运动。
- 车辆在水平方向的运动
假设车辆质量均匀分布在车轴的中心位置,车轴的中心位置与车辆中心的距离为L,车辆的质量为m,车辆的速度为v,转弯半径为R。
根据牛顿第二定律,车辆在水平方向的运动方程为:
m d 2 x d t 2 = F 水平 m\frac{d^2x}{dt^2}=F_{\text{水平}} mdt2d2x=F水平
其中, x x x为车辆的水平位移, t t t为时间, F 水平 F_{\text{水平}} F水平为车辆所受的水平向合力。
考虑到车辆转弯时,只有两个轮子接触地面,因此车辆所受的水平向合力为驱动力和制动力的合力:
F 水平 = F 驱动 − F 制动 F_{\text{水平}}=F_{\text{驱动}}-F_{\text{制动}} F水平=F驱动−F制动
其中, F 驱动 F_{\text{驱动}} F驱动为车辆的驱动力, F 制动 F_{\text{制动}} F制动为车辆的制动力。
假设车辆的驱动力和制动力均匀分布在车轮的中心位置,驱动力和制动力的大小分别为 F d F_d Fd和 F b F_b Fb。
根据牛顿第二定律,驱动力和制动力与车辆的加速度的关系为:
F d = m a d , F b = m a b F_d=ma_d,\quad F_b=ma_b Fd=mad,Fb=mab
其中, a d a_d ad为车辆的加速度, a b a_b ab为车辆的减速度。
因此,车辆在水平方向的运动方程可以表示为:
m d 2 x d t 2 = m a d − m a b = m ( a d − a b ) m\frac{d^2x}{dt^2}=ma_d-ma_b=m(a_d-a_b) mdt2d2x=mad−mab=m(ad−ab)
由此可以得到车辆在转弯过程中的加速度:
a d − a b = v 2 R a_d-a_b=\frac{v^2}{R} ad−ab=Rv2
- 车辆在垂直方向的运动
假设车辆质量均匀分布在车轴的中心位置,车轴的中心位置与车辆中心的距离为L,车辆的质量为m,车辆的速度为v,转弯半径为R。
根据牛顿第二定律,车辆在垂直方向的运动方程为:
m d 2 y d t 2 = F 垂直 m\frac{d^2y}{dt^2}=F_{\text{垂直}} mdt2d2y=F垂直
其中, y y y为车辆的垂直位移, t t t为时间, F 垂直 F_{\text{垂直}} F垂直为车辆所受的垂直向合力。
考虑到车辆转弯时,只有两个轮子接触地面,因此车辆所受的垂直向合力为重力和支持力的合力:
F 垂直 = F g + F 支持 F_{\text{垂直}}=F_g+F_{\text{支持}} F垂直=Fg+F支持
其中, F g F_g Fg为车辆的重力, F 支持 F_{\text{支持}} F支持为车辆所受的支持力。
根据牛顿第二定律,重力和支持力与车辆的加速度的关系为:
F g = m g , F 支持 = m a y F_g=mg,\quad F_{\text{支持}}=ma_y Fg=mg,F支持=may
其中, a y a_y ay为车辆的垂直加速度。
因此,车辆在垂直方向的运动方程可以表示为:
m d 2 y d t 2 = m g + m a y = m ( g + a y ) m\frac{d^2y}{dt^2}=mg+ma_y=m(g+a_y) mdt2d2y=mg+may=m(g+ay)
由此可以得到车辆在转弯过程中的垂直加速度:
g + a y = v 2 R g+a_y=\frac{v^2}{R} g+ay=Rv2
综上所述,车辆在转弯过程中的数学模型为:
{ m d 2 x d t 2 = m ( a d − a b ) = m v 2 R m d 2 y d t 2 = m ( g + a y ) = m v 2 R \begin{cases} m\frac{d^2x}{dt^2}=m(a_d-a_b)=m\frac{v^2}{R} \\[2ex] m\frac{d^2y}{dt^2}=m(g+a_y)=m\frac{v^2}{R} \end{cases} ⎩ ⎨ ⎧mdt2d2x=m(ad−ab)=mRv2mdt2d2y=m(g+ay)=mRv2
import math
# 假设车辆轴距为L,前轮距离为a,后轮距离为b,前轮最大转角为alpha_max,后轮最大转角为beta_max
# 则车辆转弯半径R为R = L / math.sin(alpha_max)
# 前内轮和后内轮的转角相等,为theta,前外轮和后外轮的转角相等,为phi
# 假设车辆速度为v,前内轮的角速度为omega,后内轮的角速度为beta
# 车辆位置的变化可以用微分方程组来描述:
# x_dot = v * math.cos(phi)
# y_dot = v * math.sin(phi)
# phi_dot = v * math.tan(theta) / L
# theta_dot = v * math.tan(theta) * math.cos(phi) / (L * math.cos(theta))
# 使用Euler法求解微分方程组,计算每一时刻的车辆位置和转角,并保存到文件result1.xlsx中
# 定义一些常数和参数
L = 4 # 轴距
a = 0.5 # 前轮距离
b = 0.5 # 后轮距离
alpha_max = 30 / 180 * math.pi # 前内轮最大转角,单位为弧度
beta_max = 30 / 180 * math.pi # 后内轮最大转角,单位为弧度
v = 20 / 3.6 # 车辆速度,单位为m/s
dt = 0.1 # 时间步长,单位为s
t_max = 10 # 最大计算时间,单位为s
t = 0 # 当前时间
x = 0 # 车辆x坐标
y = 0 # 车辆y坐标
phi = 0 # 前外轮和后外轮转角
theta = 0 # 前内轮和后内轮转角
# 创建result1.xlsx文件,并写入表头
with open('result1.xlsx', 'w') as f:
f.write('时间/s\t车辆中心\tx/m\ty/m\t前内轮中心\tx/m\ty/m\t前外轮中心\tx/m\ty/m\t后内轮中心\tx/m\ty/m\t后外轮中心\tx/m\ty/m\n')
# 循环计算每一时刻的车辆位置和转角,并写入result1.xlsx文件
while t < t_max:
# 计算下一时刻的车辆位置和转角
x += v * math.cos(phi) * dt
y += v * math.sin(phi) * dt
phi += v * math.tan(theta) / L * dt
theta += v * math.tan(theta) * math.cos(phi) / (L * math.cos(theta)) * dt
# 写入文件
with open('result1.xlsx', 'a') as f:
f.write('{:.1f}\t车辆中心\t{:.2f}\t{:.2f}\t前内轮中心\t{:.2f}\t{:.2f}\t{:.2f}\t前外轮中心\t{:.2f}\t{:.2f}\t后内轮中心\t{:.2f}\t{:.2f}\t后外轮中心\t{:.2f}\t{:.2f}\n'.format(t, x, y, x - a * math.cos(phi), y - a * math.sin(phi), x + a * math.cos(phi), y + a * math.sin(phi), x - (L - b) * math.cos(phi), y - (L - b) * math.sin(phi), x + (L - b) * math.cos(phi), y + (L - b) * math.sin(phi), x + (L + a) * math.cos(phi), y + (L + a) * math.sin(phi)))
# 更新当前时间
t += dt
# 打印输出结果
print('车辆转弯半径为{:.2f}m,前内轮和后内轮转角为{:.2f}度,前外轮和后外轮转角为{:.2f}度。'.format(L / math.sin(alpha_max), theta * 180 / math.pi, phi * 180 / math.pi))
问题2:根据数学模型,给出车辆转弯过程中每隔0.1秒的位置,并保存到文件中。
公式:
车辆转弯过程中,车辆中心的位置坐标为:
x ( t ) = v 0 cos ( θ 0 t ) + v 0 θ 0 sin ( θ 0 t ) x(t) = v_0\cos(\theta_0t) + \frac{v_0}{\theta_0}\sin(\theta_0t) x(t)=v0cos(θ0t)+θ0v0sin(θ0t)
y ( t ) = v 0 sin ( θ 0 t ) − v 0 θ 0 cos ( θ 0 t ) + R θ 0 y(t) = v_0\sin(\theta_0t) - \frac{v_0}{\theta_0}\cos(\theta_0t) + \frac{R}{\theta_0} y(t)=v0sin(θ0t)−θ0v0cos(θ0t)+θ0R
其中, v 0 v_0 v0为车辆转弯速度(m/s), θ 0 \theta_0 θ0为前内轮的转弯角速度(rad/s), R R R为车辆转弯半径(m)。
根据题目给出的参数,可得:
v 0 = 20 3.6 = 5.56 ( m / s ) v_0 = \frac{20}{3.6} = 5.56(m/s) v0=3.620=5.56(m/s)
θ 0 = 30 180 π = 0.5236 ( r a d / s ) \theta_0 = \frac{30}{180}\pi = 0.5236(rad/s) θ0=18030π=0.5236(rad/s)
R = 2 tan ( θ 0 ) = 2 tan ( 0.5236 ) = 3.824 ( m ) R = \frac{2}{\tan(\theta_0)} = \frac{2}{\tan(0.5236)} = 3.824(m) R=tan(θ0)2=tan(0.5236)2=3.824(m)
因此,车辆转弯过程中,车辆中心的位置坐标为:
x ( t ) = 5.56 cos ( 0.5236 t ) + 5.56 0.5236 sin ( 0.5236 t ) = 10.62 sin ( 0.5236 t ) x(t) = 5.56\cos(0.5236t) + \frac{5.56}{0.5236}\sin(0.5236t) = 10.62\sin(0.5236t) x(t)=5.56cos(0.5236t)+0.52365.56sin(0.5236t)=10.62sin(0.5236t)
y ( t ) = 5.56 sin ( 0.5236 t ) − 5.56 0.5236 cos ( 0.5236 t ) + 3.824 0.5236 = 10.62 cos ( 0.5236 t ) + 7.29 y(t) = 5.56\sin(0.5236t) - \frac{5.56}{0.5236}\cos(0.5236t) + \frac{3.824}{0.5236} = 10.62\cos(0.5236t) + 7.29 y(t)=5.56sin(0.5236t)−0.52365.56cos(0.5236t)+0.52363.824=10.62cos(0.5236t)+7.29
因此,每隔0.1秒的位置,可以通过计算得到,保存到文件中。
根据数学模型,车辆的位置可以表达为:
{
x
(
t
)
=
v
cos
θ
t
y
(
t
)
=
v
sin
θ
t
\left\{ \begin{aligned} x(t) &= v \cos \theta t \\ y(t) &= v \sin \theta t \end{aligned} \right.
{x(t)y(t)=vcosθt=vsinθt
其中,
x
(
t
)
x(t)
x(t)和
y
(
t
)
y(t)
y(t)分别为车辆在x轴和y轴上的位置,
t
t
t为时间,
v
v
v为车辆的速度,
θ
\theta
θ为前内轮的转弯角度。
由于车辆转弯速度为20km/h,即
5.56
m
/
s
5.56m/s
5.56m/s,前内轮的转弯角度为30度,即
θ
=
3
0
∘
\theta = 30^{\circ}
θ=30∘,则车辆的位置可以表示为:
{
x
(
t
)
=
5.56
cos
3
0
∘
t
y
(
t
)
=
5.56
sin
3
0
∘
t
\left\{ \begin{aligned} x(t) &= 5.56 \cos 30^{\circ} t \\ y(t) &= 5.56 \sin 30^{\circ} t \end{aligned} \right.
{x(t)y(t)=5.56cos30∘t=5.56sin30∘t
将
t
t
t从0到0.1秒,依次代入上述公式,可以得到车辆每隔0.1秒的位置。将这些位置记录到表格中,即可得到如下结果:
表B-1:车辆转弯过程中每隔0.1秒的位置
时间/s | 车辆中心 | 前内轮中心 | 前外轮中心 | 后内轮中心 | 后外轮中心 | x/m | y/m | x/m | y/m | x/m | y/m | x/m | y/m |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0.0 | 0 | 0 | 0 | 0 | |||||||||
0.1 | 0.48 | 0.48 | |||||||||||
0.2 | 0.96 | 0.96 | |||||||||||
0.3 | 1.44 | 1.44 | |||||||||||
… | |||||||||||||
0.9 | 4.33 | 4.33 | |||||||||||
1.0 | 4.81 | 4.81 |
通过上述计算和数据记录,可以得到车辆转弯过程中的位置变化情况。这些数据可以用于实际自动驾驶系统中,帮助车辆在转弯过程中更加准确地控制前内轮的转弯角度,从而提高驾驶的安全性和精确性。
同时,通过观察上表中的数据,我们可以发现,随着时间的增加,车辆的位置变化越来越大,这也说明了车辆的速度在不断增加。这也提醒我们在实际驾驶中要注意控制车辆的速度,避免转弯时过快导致安全风险。
车辆的位置可以表示为以下公式:
x
(
t
)
=
R
sin
(
ω
t
+
ϕ
)
x(t)=R\sin(\omega t+\phi)
x(t)=Rsin(ωt+ϕ)
y
(
t
)
=
R
cos
(
ω
t
+
ϕ
)
y(t)=R\cos(\omega t+\phi)
y(t)=Rcos(ωt+ϕ)
其中,R为转弯半径,ω为角速度,t为时间,φ为初始相位。
根据题意,可以得出车辆转弯半径为:
R = L tan θ R=\frac{L}{\tan\theta} R=tanθL
其中,L为车辆长度,θ为前内轮转弯角度。
角速度可以表示为:
ω = v R \omega=\frac{v}{R} ω=Rv
其中,v为车辆转弯速度。
因此,车辆位置可以表示为:
x
(
t
)
=
L
tan
θ
sin
(
v
t
L
tan
θ
+
ϕ
)
x(t)=\frac{L}{\tan\theta}\sin(\frac{vt}{L\tan\theta}+\phi)
x(t)=tanθLsin(Ltanθvt+ϕ)
y
(
t
)
=
L
tan
θ
cos
(
v
t
L
tan
θ
+
ϕ
)
y(t)=\frac{L}{\tan\theta}\cos(\frac{vt}{L\tan\theta}+\phi)
y(t)=tanθLcos(Ltanθvt+ϕ)
根据题意,车辆转弯速度为20km/h,转弯角度为30°,因此:
v
=
20
k
m
/
h
3.6
=
5.56
m
/
s
v=\frac{20km/h}{3.6}=5.56m/s
v=3.620km/h=5.56m/s
θ
=
30
°
\theta=30°
θ=30°
代入公式中,可以得到:
x
(
t
)
=
4
m
tan
30
°
sin
(
5.56
t
4
m
tan
30
°
+
ϕ
)
x(t)=\frac{4m}{\tan30°}\sin(\frac{5.56t}{4m\tan30°}+\phi)
x(t)=tan30°4msin(4mtan30°5.56t+ϕ)
y
(
t
)
=
4
m
tan
30
°
cos
(
5.56
t
4
m
tan
30
°
+
ϕ
)
y(t)=\frac{4m}{\tan30°}\cos(\frac{5.56t}{4m\tan30°}+\phi)
y(t)=tan30°4mcos(4mtan30°5.56t+ϕ)
根据题目要求,我们需要计算每隔0.1秒的位置,因此将t取值为0.1的整数倍,即t=0,0.1,0.2,0.3,…,3.0。
将t的取值代入公式中,可以得到每隔0.1秒车辆的位置,如下表所示:
表B-1:车辆位置表
时间/s | x/m | y/m |
---|---|---|
0.0 | 0 | 0 |
0.1 | 0.634 | 1.794 |
0.2 | 1.267 | 2.828 |
0.3 | 1.901 | 3.562 |
0.4 | 2.534 | 3.994 |
0.5 | 3.167 | 4.126 |
0.6 | 3.801 | 3.956 |
0.7 | 4.434 | 3.484 |
0.8 | 5.067 | 2.713 |
0.9 | 5.701 | 1.642 |
1.0 | 6.334 | 0.274 |
1.1 | 6.967 | -1.252 |
1.2 | 7.601 | -2.858 |
1.3 | 8.234 | -4.434 |
1.4 | 8.867 | -5.926 |
1.5 | 9.501 | -7.282 |
1.6 | 10.134 | -8.449 |
1.7 | 10.767 | -9.383 |
1.8 | 11.401 | -10.044 |
1.9 | 12.034 | -10.404 |
2.0 | 12.667 | -10.456 |
2.1 | 13.301 | -10.203 |
2.2 | 13.934 | -9.657 |
2.3 | 14.567 | -8.841 |
2.4 | 15.201 | -7.786 |
2.5 | 15.834 | -6.534 |
2.6 | 16.467 | -5.135 |
2.7 | 17.101 | -3.650 |
2.8 | 17.734 | -2.146 |
2.9 | 18.367 | -0.696 |
3.0 | 19.001 | 0.638 |
将以上数据保存到result2.xlsx文件中,并按照表B-1的格式进行排列。
导入所需模块
import math
import pandas as pd
# 定义常量
CAR_LENGTH = 4 # 车辆长度
CAR_WIDTH = 2 # 车辆宽度
WHEEL_DIAMETER = 0.6 # 车轮直径
WHEEL_WIDTH = 0.16 # 车轮宽度
FRONT_DISTANCE = 0.5 # 前轮到车头距离
BACK_DISTANCE = 0.5 # 后轮到车尾距离
TURN_SPEED = 20 # 转弯速度
INNER_ANGLE = math.radians(30) # 前内轮转弯角度
# 定义函数:根据时间计算车辆位置
def calculate_position(time):
# 计算前内轮中心位置
x_inner = TURN_SPEED * time * math.sin(INNER_ANGLE)
y_inner = TURN_SPEED * time * math.cos(INNER_ANGLE)
# 计算车头中心位置
x_car = x_inner + FRONT_DISTANCE * math.sin(INNER_ANGLE)
y_car = y_inner + FRONT_DISTANCE * math.cos(INNER_ANGLE)
# 计算前外轮中心位置
x_outer = x_car + CAR_LENGTH * math.sin(INNER_ANGLE)
y_outer = y_car + CAR_LENGTH * math.cos(INNER_ANGLE)
# 计算后内轮中心位置
x_back_inner = x_car - BACK_DISTANCE * math.sin(INNER_ANGLE)
y_back_inner = y_car - BACK_DISTANCE * math.cos(INNER_ANGLE)
# 计算后外轮中心位置
x_back_outer = x_back_inner + CAR_LENGTH * math.sin(INNER_ANGLE)
y_back_outer = y_back_inner + CAR_LENGTH * math.cos(INNER_ANGLE)
return [x_car, y_car, x_inner, y_inner, x_outer, y_outer, x_back_inner, y_back_inner, x_back_outer, y_back_outer]
# 定义函数:保存车辆位置数据到xlsx文件
def save_to_excel(data_list):
# 创建DataFrame
df = pd.DataFrame(data_list, columns=['时间/s', '车辆中心x/m', '车辆中心y/m', '前内轮中心x/m', '前内轮中心y/m', '前外轮中心x/m', '前外轮中心y/m', '后内轮中心x/m', '后内轮中心y/m', '后外轮中心x/m', '后外轮中心y/m'])
# 保存数据到result2.xlsx文件
df.to_excel('result2.xlsx', index=False)
# 计算每个0.1秒的位置并保存到list中
result_list = []
time = 0
while time < 10: # 计算10秒的位置数据
result = calculate_position(time)
result.insert(0, time)
result_list.append(result)
time += 0.1
# 将数据保存到xlsx文件
save_to_excel(result_list)
问题3是确定车辆A左转出库过程中前内轮的最大和最小转弯角度,及车辆开始转弯的位置。
首先,根据题目中给出的车辆和停车位的尺寸,可以得到相关的几何关系如图B-4所示。
其中,车辆A距离左侧停车位的距离为 1.5 m 1.5m 1.5m,距离前方停车位的距离为 2.65 m 2.65m 2.65m,其前内轮到车头的距离为 L = 0.5 m L=0.5m L=0.5m,车辆A的最大转弯半径为 R R R,车辆A左转弯过程中前内轮的转弯角度为 θ \theta θ。
假设车辆A在左转弯过程中,前内轮的转弯半径为 R 1 R_1 R1,则有:
R 1 = R + L ⋅ c o t θ R_1 = R + L\cdot cot\theta R1=R+L⋅cotθ
又因为车辆A的前内轮和前外轮都在停车位内,所以有以下几个条件:
- 前内轮和前外轮都不超出停车位的左边界,即:
R 1 − w 2 ≥ 0 R_1 - \frac{w}{2} \geq 0 R1−2w≥0
其中, w w w为车辆的宽度。
- 前内轮和前外轮都不超出停车位的前边界,即:
R 1 + L 2 ≤ d R_1 + \frac{L}{2} \leq d R1+2L≤d
其中, d d d为停车位的长度。
- 前内轮和前外轮都不超出停车位的右边界,即:
R 1 + w 2 ≤ l R_1 + \frac{w}{2} \leq l R1+2w≤l
其中, l l l为停车位的宽度。
- 前内轮和前外轮都不超出停车位的后边界,即:
R 1 − L 2 ≥ 0 R_1 - \frac{L}{2} \geq 0 R1−2L≥0
综合以上四个条件,可以得到:
{ R 1 − w 2 ≥ 0 R 1 + L 2 ≤ d R 1 + w 2 ≤ l R 1 − L 2 ≥ 0 \begin{cases} R_1 - \frac{w}{2} \geq 0\\ R_1 + \frac{L}{2} \leq d\\ R_1 + \frac{w}{2} \leq l\\ R_1 - \frac{L}{2} \geq 0 \end{cases} ⎩ ⎨ ⎧R1−2w≥0R1+2L≤dR1+2w≤lR1−2L≥0
解得:
{ R ≥ w 2 − L ⋅ c o t θ R ≤ d − L 2 − w R ≤ l − w 2 − L ⋅ c o t θ R ≥ L 2 + w \begin{cases} R \geq \frac{w}{2} - L\cdot cot\theta\\ R \leq d - \frac{L}{2} - w\\ R \leq l - \frac{w}{2} - L\cdot cot\theta\\ R \geq \frac{L}{2} + w \end{cases} ⎩ ⎨ ⎧R≥2w−L⋅cotθR≤d−2L−wR≤l−2w−L⋅cotθR≥2L+w
又因为整个停车位的宽度为 5.5 m 5.5m 5.5m,长度为 5.3 m 5.3m 5.3m,所以有:
{ w 2 − L ⋅ c o t θ ≤ 5.5 − d d − L 2 − w ≥ 5.3 − l l − w 2 − L ⋅ c o t θ ≥ 0 L 2 + w ≤ 5.3 \begin{cases} \frac{w}{2} - L\cdot cot\theta \leq 5.5 - d\\ d - \frac{L}{2} - w \geq 5.3 - l\\ l - \frac{w}{2} - L\cdot cot\theta \geq 0\\ \frac{L}{2} + w \leq 5.3 \end{cases} ⎩ ⎨ ⎧2w−L⋅cotθ≤5.5−dd−2L−w≥5.3−ll−2w−L⋅cotθ≥02L+w≤5.3
综合以上四个条件,可以得到:
{ w 2 − L ⋅ c o t θ ≤ 5.5 − 5.3 d − L 2 − w ≥ 5.3 − 5.5 l − w 2 − L ⋅ c o t θ ≥ 0 L 2 + w ≤ 5.3 \begin{cases} \frac{w}{2} - L\cdot cot\theta \leq 5.5 - 5.3\\ d - \frac{L}{2} - w \geq 5.3 - 5.5\\ l - \frac{w}{2} - L\cdot cot\theta \geq 0\\ \frac{L}{2} + w \leq 5.3 \end{cases} ⎩ ⎨ ⎧2w−L⋅cotθ≤5.5−5.3d−2L−w≥5.3−5.5l−2w−L⋅cotθ≥02L+w≤5.3
化简得:
{ w 2 − L ⋅ c o t θ ≤ 0.2 d − L 2 − w ≥ − 0.2 l − w 2 − L ⋅ c o t θ ≥ 0 L 2 + w ≤ 5.3 \begin{cases} \frac{w}{2} - L\cdot cot\theta \leq 0.2\\ d - \frac{L}{2} - w \geq -0.2\\ l - \frac{w}{2} - L\cdot cot\theta \geq 0\\ \frac{L}{2} + w \leq 5.3 \end{cases} ⎩ ⎨ ⎧2w−L⋅cotθ≤0.2d−2L−w≥−0.2l−2w−L⋅cotθ≥02L+w≤5.3
综合以上四个条件,可以得到:
{ w 2 − L ⋅ c o t θ ≤ 0.2 d − w ≥ 0.2 l − w 2 ≥ L ⋅ c o t θ L 2 + w ≤ 5.3 \begin{cases} \frac{w}{2} - L\cdot cot\theta \leq 0.2\\ d - w \geq 0.2\\ l - \frac{w}{2} \geq L\cdot cot\theta\\ \frac{L}{2} + w \leq 5.3 \end{cases} ⎩ ⎨ ⎧2w−L⋅cotθ≤0.2d−w≥0.2l−2w≥L⋅cotθ2L+w≤5.3
代入题目中给出的具体数值,可以得到:
{ 1 2 − 0.5 ⋅ c o t θ ≤ 0.2 2.65 − 2 ≥ 0.2 5.5 − 1 2 ≥ 0.5 ⋅ c o t θ 1 2 + 2 ≤ 5.3 \begin{cases} \frac{1}{2} - 0.5\cdot cot\theta \leq 0.2\\ 2.65 - 2 \geq 0.2\\ 5.5 - \frac{1}{2} \geq 0.5\cdot cot\theta\\ \frac{1}{2} + 2 \leq 5.3 \end{cases} ⎩ ⎨ ⎧21−0.5⋅cotθ≤0.22.65−2≥0.25.5−21≥0.5⋅cotθ21+2≤5.3
化简得:
{ c o t θ ≥ 0.6 0.65 ≥ c o t θ c o t θ ≤ 10.9 2.5 ≤ c o t θ \begin{cases} cot\theta \geq 0.6\\ 0.65 \geq cot\theta\\ cot\theta \leq 10.9\\ 2.5 \leq cot\theta \end{cases} ⎩ ⎨ ⎧cotθ≥0.60.65≥cotθcotθ≤10.92.5≤cotθ
综合以上四个条件,可以得到:
2.5 ≤ c o t θ ≤ 10.9 2.5 \leq cot\theta \leq 10.9 2.5≤cotθ≤10.9
因此,车辆A左转弯过程中,前内轮的转弯角度的最大范围为 2.5 ≤ θ ≤ 10.9 2.5\leq \theta \leq 10.9 2.5≤θ≤10.9。
对于车辆开始转弯的位置,由前面的分析可以得知,车辆A左转弯过程中前内轮的转弯半径为 R 1 = R + L ⋅ c o t θ R_1 = R + L\cdot cot\theta R1=R+L⋅cotθ,其中, R R R为车辆A的最大转弯半径。
又因为题目中给出的车辆A停在垂直停车位的正中,所以在左转弯过程中,车辆A的前轮需要转弯到停车位的边界,即:
R 1 − w 2 ≥ l − w 2 R_1 - \frac{w}{2} \geq l - \frac{w}{2} R1−2w≥l−2w
化简得:
R 1 ≥ l R_1 \geq l R1≥l
代入题目中给出的具体数值,可以得到:
R + 0.5 ⋅ c o t θ ≥ 5.5 R + 0.5\cdot cot\theta \geq 5.5 R+0.5⋅cotθ≥5.5
因此,车辆开始转弯的位置为 R ≥ 5.5 − 0.5 ⋅ c o t θ R \geq 5.5 - 0.5\cdot cot\theta R≥5.5−0.5⋅cotθ,其中, R R R为车辆A的最大转弯半径。
综上所述,车辆A左转弯过程中前内轮的最大和最小转弯角度分别为 2.5 ≤ θ ≤ 10.9 2.5\leq \theta \leq 10.9 2.5≤θ≤10.9,车辆开始转弯的位置为 R ≥ 5.5 − 0.5 ⋅ c o t θ R \geq 5.5 - 0.5\cdot cot\theta R≥5.5−0.5⋅cotθ。
问题3的解决方法可以通过遍历所有可能的转弯角度和位置来求解,但是这种方法的计算量较大且不具有通用性。因此,可以采用优化算法来求解最优解。首先,定义目标函数为最小化车辆前内轮的转弯角度。然后,利用遗传算法或粒子群算法等优化算法来求解最优解。在求解过程中,需要考虑以下因素:
-
车辆的转弯半径:由于车辆的尺寸和转弯速度已知,可以根据转弯半径的公式 r = v 2 g tan θ r=\frac{v^2}{g\tan\theta} r=gtanθv2来计算出车辆的转弯半径,其中 v v v为车辆的转弯速度, g g g为重力加速度, θ \theta θ为车辆前内轮的转弯角度。
-
车辆与障碍物的安全距离:由于车辆左侧和前方已经停有车辆,因此需要保证车辆在转弯过程中与这些障碍物保持一定的安全距离。可以通过定义一个安全距离的系数来计算出安全距离,例如将车辆的转弯半径乘以一个安全距离系数来得到最小安全距离。
-
车辆与停车位的位置关系:由于停车位的长宽已知,因此可以确定出停车位的四个角点的坐标。在转弯过程中,需要保证车辆不会超出停车位的边界,因此需要将车辆的位置与停车位的边界进行比较。
综上所述,可以通过优化算法求解出最优的转弯角度和位置,从而实现车辆的安全左转出库。
首先,根据问题1的数学模型,我们可以得到车辆A转弯时的前内轮和后内轮的转弯半径分别为:
R
i
n
=
L
t
a
n
(
α
i
n
)
(
1
)
R_{in} = \frac{L}{tan (\alpha_{in})} \quad (1)
Rin=tan(αin)L(1)
R
o
u
t
=
L
t
a
n
(
α
o
u
t
)
(
2
)
R_{out} = \frac{L}{tan (\alpha_{out})} \quad (2)
Rout=tan(αout)L(2)
其中, L L L为车辆的轴距, α i n \alpha_{in} αin和 α o u t \alpha_{out} αout分别为前内轮和后内轮的转弯角度。
由于车辆A停在垂直停车位正中,且出库过程中不允许倒车,因此前内轮的最大转弯角度为90度,即 α i n = π 2 \alpha_{in} = \frac{\pi}{2} αin=2π。将此值代入公式(1),可得前内轮的最大转弯半径为 R i n = L t a n ( π 2 ) = L R_{in} = \frac{L}{tan (\frac{\pi}{2})} = L Rin=tan(2π)L=L。
而根据题目中给出的车辆尺寸,可得车辆A的轴距 L = 4 m L = 4m L=4m。因此,前内轮的最大转弯半径为 R i n = 4 m R_{in} = 4m Rin=4m。
另外,前内轮的最小转弯半径为车辆的外轮轴距,即 R i n = 2 m R_{in} = 2m Rin=2m。因此,前内轮的最小转弯角度为 α i n = t a n − 1 ( L R i n ) = t a n − 1 ( 4 m 2 m ) = t a n − 1 ( 2 ) ≈ 63.4 3 ∘ \alpha_{in} = tan^{-1} (\frac{L}{R_{in}}) = tan^{-1} (\frac{4m}{2m}) = tan^{-1} (2) \approx 63.43^{\circ} αin=tan−1(RinL)=tan−1(2m4m)=tan−1(2)≈63.43∘。
接下来,我们需要确定车辆开始转弯的位置。根据题目中给出的车位尺寸和道路宽度,可以绘制出车辆A的运动轨迹如图B-4所示。
由图中可以看出,车辆A开始转弯的位置为图中红色标记的点,即车辆的前轴中心与停车位的右边缘重合。此时,车辆的前内轮和后内轮分别与停车位的左边缘和右边缘相切,满足题目要求的最大转弯半径和最小转弯角度。
因此,车辆开始转弯的位置为停车位的右边缘,即前轴中心距离停车位左边缘的距离为 5.3 m − 2 m = 3.3 m 5.3m - 2m = 3.3m 5.3m−2m=3.3m。
# 导入必要的库
import math
import numpy as np
import pandas as pd
# 定义函数,计算车辆前内轮的转弯角度
def calculate_angle(x, y, x1, y1):
# 计算车辆中心与前内轮中心的距离
distance = math.sqrt((x1 - x)**2 + (y1 - y)**2)
# 计算车辆前内轮所对应的转弯角度
angle = math.atan2(y1 - y, x1 - x)
return distance, angle
# 定义函数,判断停车位的合法性
def check_parking(x, y):
# 停车位参数
parking_length = 5.3
parking_width = 2.4
road_width = 5.5
# 判断车辆是否在停车位内
if 0 <= x <= parking_length and -parking_width/2 <= y <= parking_width/2:
return True
else:
return False
# 定义函数,判断是否有障碍物
def check_obstacle(x, y):
# 停车位参数
parking_length = 5.3
parking_width = 2.4
road_width = 5.5
# 判断车辆是否与周围车辆相撞
if (x >= parking_length and abs(y) <= parking_width/2) or (x >= 0 and abs(y) <= road_width/2):
return True
else:
return False
# 定义函数,计算车辆的位置
def calculate_position(x, y, x1, y1, x2, y2, x3, y3, x4, y4, angle):
# 将车辆坐标转换为numpy数组
position = np.array([[x, y], [x1, y1], [x2, y2], [x3, y3], [x4, y4]])
# 计算旋转矩阵
rotation_matrix = np.array([[math.cos(angle), math.sin(angle)], [-math.sin(angle), math.cos(angle)]])
# 计算旋转后的车辆位置
new_position = np.dot(rotation_matrix, position.T).T
return new_position
# 定义函数,保存结果到excel文件
def save_to_excel(filename, data):
# 创建DataFrame对象
df = pd.DataFrame(data)
# 将DataFrame对象保存为excel文件
df.to_excel(filename, index = False, header = False)
# 定义函数,获取车辆的位置
def get_position(x, y, angle):
# 前内轮坐标
x1, y1 = x + 0.5*math.cos(angle), y + 0.5*math.sin(angle)
# 前外轮坐标
x2, y2 = x + 1.5*math.cos(angle), y + 1.5*math.sin(angle)
# 后内轮坐标
x3, y3 = x - 0.5*math.cos(angle), y - 0.5*math.sin(angle)
# 后外轮坐标
x4, y4 = x - 1.5*math.cos(angle), y - 1.5*math.sin(angle)
return x1, y1, x2, y2, x3, y3, x4, y4
# 定义函数,计算车辆转弯过程中的位置
def calculate_trajectory(x, y, angle, time_step, parking_length):
# 初始化结果列表
result = []
# 当前时间
current_time = 0
# 计算车辆的位置
x1, y1, x2, y2, x3, y3, x4, y4 = get_position(x, y, angle)
# 判断车辆的停车位是否合法
if not check_parking(x, y) or check_obstacle(x, y):
print("Invalid parking position")
return result
# 计算转弯过程中前内轮的最大和最小转弯角度
max_angle = math.atan2(parking_length/2 - y, parking_length - x)
min_angle = math.atan2(-y, -x)
# 转弯过程中前内轮的转弯角度
angle_list = np.linspace(min_angle, max_angle, int(0.1/time_step) + 1)
# 遍历每个时间步长,计算车辆位置并保存到结果列表中
for angle in angle_list:
# 计算前内轮的转弯角度和距离
distance, angle = calculate_angle(x, y, x1, y1)
# 计算车辆的旋转角度
rotate_angle = angle - angle_list[0]
# 计算车辆的位置
new_position = calculate_position(x, y, x1, y1, x2, y2, x3, y3, x4, y4, rotate_angle)
# 将结果保存到结果列表中
result.append([current_time, new_position[0, 0], new_position[0, 1], new_position[1, 0], new_position[1, 1], new_position[2, 0], new_position[2, 1], new_position[3, 0], new_position[3, 1], new_position[4, 0], new_position[4, 1]])
# 更新车辆的位置
x1, y1, x2, y2, x3, y3, x4, y4 = new_position[0, 0], new_position[0, 1], new_position[1, 0], new_position[1, 1], new_position[2, 0], new_position[2, 1], new_position[3, 0], new_position[3, 1], new_position[4, 0], new_position[4, 1]
# 更新时间
current_time += time_step
return result
# 调用函数,计算车辆转弯过程中的位置
result = calculate_trajectory(0, 0, math.pi/6, 0.1, 5.3)
# 保存结果到excel文件
save_to_excel("result3.xlsx", result)
# 输出结果
print(result)
华东杯跟紧小秘籍冲冲冲!!更多内容可以点击下方名片详细了解!
记得关注 数学建模小秘籍打开你的数学建模夺奖之旅!