阿克曼转向计算过程

阿克曼转向计算过程
本文档详细说明了阿克曼转向的计算过程,确保车辆在转弯时所有车轮沿同一转弯中心的圆形路径运动。计算过程包括将输入指令(转向角和速度)转换为适当的车轮角度和速度。

1. 输入定义

转向输入:输入通常为期望的转向角δ\deltaδ或车辆的角速度ω\omegaω,表示转弯速率。
速度输入:车辆的输入线速度vvv,通常为沿纵轴的速度。
车辆参数:
LLL:轴距,前后轴之间的距离。
ddd:轮距,同一轴上左右轮之间的距离。
vbackv_{\text{back}}vback:后轮速度,在纯阿克曼转向中假设后轮直线运动。

2. 逐步计算过程

2.1 将角速度转换为转向角

如果输入为角速度ω\omegaω和线速度vvv,需要将其转换为平均转向角δ\deltaδ,利用转弯半径与车辆几何的关系:ω=vR,R=Ltan⁡δ\omega = \frac{v}{R}, \quad R = \frac{L}{\tan \delta}ω=Rv,R=tanδL
推导得到δ\deltaδtan⁡δ=ωLv,δ=arctan⁡(ωLv)\tan \delta = \frac{\omega L}{v}, \quad \delta = \arctan \left( \frac{\omega L}{v} \right)tanδ=vωL,δ=arctan(vωL)

如果输入直接是角度,则不需要转换。

2.2 计算转弯半径

转弯半径RRR是从瞬时旋转中心(ICR)到后轴中点的距离:R=Ltan⁡δR = \frac{L}{\tan \delta}R=tanδL

这里的计算不是计算最小转弯半径(最大转角下),而是输入转角下的转弯半径。

2.3 分配前轮转向角

在这里插入图片描述

阿克曼转向要求内外轮转向角不同,以满足转弯半径的几何约束:
内侧轮转向角δin\delta_{\text{in}}δinδin=arctan⁡(LR−d2)\delta_{\text{in}} = \arctan \left( \frac{L}{R - \frac{d}{2}} \right)δin=arctan(R2dL)
外侧轮转向角δout\delta_{\text{out}}δoutδout=arctan⁡(LR+d2)\delta_{\text{out}} = \arctan \left( \frac{L}{R + \frac{d}{2}} \right)δout=arctan(R+2dL)
注意:对于左转,左轮为内侧轮δin\delta_{\text{in}}δin,右轮为外侧轮δout\delta_{\text{out}}δout。右转则相反。

2.4 分配各轮速度

根据阿克曼几何,将车辆速度分配到每个车轮,确保转弯时速度匹配:
后轮速度vbackv_{\text{back}}vback假设为输入线速度vvv,因为后轴直线运动。
前轮速度基于转弯半径和轴距计算:
左前轮速度vLv_LvLvL=v⋅R−d2Rv_L = v \cdot \frac{R - \frac{d}{2}}{R}vL=vRR2d
右前轮速度vRv_RvRvR=v⋅R+d2Rv_R = v \cdot \frac{R + \frac{d}{2}}{R}vR=vRR+2d

将转角和轴距代入可得:vL=v(1−dtan⁡δ2L),vR=v(1+dtan⁡δ2L)v_L = v \left( 1 - \frac{d \tan \delta}{2L} \right), \quad v_R = v \left( 1 + \frac{d \tan \delta}{2L} \right)vL=v(12Ldtanδ),vR=v(1+2Ldtanδ)

  1. 总结

转向角:将角速度转换为平均转向角,然后利用阿克曼几何分配内外轮角度。
速度分配:根据各轮到ICR的径向距离分配输入速度,确保平滑转弯。
该过程保证车辆协调转弯,减少轮胎磨损并保持稳定性。

计算过程:

以给定角速度为例,左转,给定ω=1rad/s\omega = 1 \text{rad/s}ω=1rad/sv=10m/sv = 10 \text{m/s}v=10m/sL=1.6mL = 1.6 \text{m}L=1.6mtan⁡δ=1×1.610=0.16,δ=arctan⁡(0.16)≈0.1585rad\tan \delta = \frac{1 \times 1.6}{10} = 0.16, \quad \delta = \arctan (0.16) \approx 0.1585 \text{rad}tanδ=101×1.6=0.16,δ=arctan(0.16)0.1585rad

δ=0.1585rad\delta = 0.1585 \text{rad}δ=0.1585radL=1.6mL = 1.6 \text{m}L=1.6mR=1.6tan⁡0.1585≈1.60.16=10mR = \frac{1.6}{\tan 0.1585} \approx \frac{1.6}{0.16} = 10 \text{m}R=tan0.15851.60.161.6=10m

R=10mR = 10 \text{m}R=10md=1.0md = 1.0 \text{m}d=1.0mL=1.6mL = 1.6 \text{m}L=1.6m
内侧(左)轮:δin=arctan⁡(1.610−0.5)=arctan⁡(1.69.5)≈0.167rad\delta_{\text{in}} = \arctan \left( \frac{1.6}{10 - 0.5} \right) = \arctan \left( \frac{1.6}{9.5} \right) \approx 0.167 \text{rad}δin=arctan(100.51.6)=arctan(9.51.6)0.167rad
外侧(右)轮:δout=arctan⁡(1.610+0.5)=arctan⁡(1.610.5)≈0.151rad\delta_{\text{out}} = \arctan \left( \frac{1.6}{10 + 0.5} \right) = \arctan \left( \frac{1.6}{10.5} \right) \approx 0.151 \text{rad}δout=arctan(10+0.51.6)=arctan(10.51.6)0.151rad

v=10m/sv = 10 \text{m/s}v=10m/sd=1.0md = 1.0 \text{m}d=1.0mL=1.6mL = 1.6 \text{m}L=1.6mδ=0.1585rad\delta = 0.1585 \text{rad}δ=0.1585radtan⁡δ≈0.16\tan \delta \approx 0.16tanδ0.16
后轮速度:vback=vv_{back}=vvback=v
左前轮速度:vL=10(1−1.0×0.162×1.6)=10(1−0.05)=9.5m/sv_L = 10 \left( 1 - \frac{1.0 \times 0.16}{2 \times 1.6} \right) = 10 \left( 1 - 0.05 \right) = 9.5 \text{m/s}vL=10(12×1.61.0×0.16)=10(10.05)=9.5m/s
右前轮速度:vR=10(1+1.0×0.162×1.6)=10(1+0.05)=10.5m/sv_R = 10 \left( 1 + \frac{1.0 \times 0.16}{2 \times 1.6} \right) = 10 \left( 1 + 0.05 \right) = 10.5 \text{m/s}vR=10(1+2×1.61.0×0.16)=10(1+0.05)=10.5m/s
在这里插入图片描述

### 阿克曼转向原理及其前轮转角计算 阿克曼转向几何学是一种用于车辆转向的设计原则,其核心目标是使每个车轮在转弯过程中沿不同的圆周路径滚动而不会发生侧滑。这种设计通过调整前后轴之间的角度关系来实现更高效的转向性能。 #### 基本概念 阿克曼转向的核心在于确保外侧车轮的转弯半径大于内侧车轮的转弯半径。为了达到这一目的,在车辆转向时,两个前轮的角度会有所不同。具体来说,内侧车轮具有更大的偏转角度,从而适应较小的转弯半径[^1]。 #### 转向几何参数定义 以下是阿克曼转向模型中的几个重要参数: - **L**: 车辆轴距(前后轮中心的距离) - **W**: 车辆宽度(两前轮间的距离) - **R**: 外侧车轮的转弯半径 - **δ_i**: 内侧车轮的转向角 - **δ_o**: 外侧车轮的转向角 #### 计算公式推导 假设车辆正在执行左转弯操作,则可以基于三角函数得出内外侧车轮的转向角: 对于外侧车轮, \[ \tan(\delta_o) = \frac{L}{R} \] 而对于内侧车轮, \[ \tan(\delta_i) = \frac{L}{R-W/2} \] 其中 \( R \) 是由驾驶员输入的方向盘角度决定的期望转弯半径。这些公式的应用使得能够精确控制每一轮子的具体旋转方向和程度。 #### 实现代码示例 下面是一个简单的 Python 函数用来演示如何依据给定条件计算上述提到的各个角度: ```python import math def ackermann_steering(L, W, delta_input): """ Calculate inner and outer wheel angles based on Ackermann Steering Geometry. Parameters: L (float): Wheelbase length of vehicle. W (float): Track width between wheels. delta_input (float): Input steering angle from driver input or controller. Returns: tuple: Inner wheel angle(delta_i), Outer wheel angle(delta_o). """ # Assuming delta_input is given as an angle in radians corresponding to the desired turning radius R R = L / math.tan(delta_input) delta_o = math.atan(L / R) delta_i = math.atan(L / (R - W / 2)) return delta_i, delta_o # Example usage with hypothetical values for demonstration purposes only wheel_base_length = 2.7 # meters track_width_between_wheels = 1.5 # meters steering_angle_from_driver = math.radians(30) # Convert degree into radian before passing it inner_wheel_angle, outer_wheel_angle = ackermann_steering(wheel_base_length, track_width_between_wheels, steering_angle_from_driver) print(f"Inner Wheel Angle: {math.degrees(inner_wheel_angle)} degrees") print(f"Outer Wheel Angle: {math.degrees(outer_wheel_angle)} degrees") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白云千载尽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值