之前没做过阿克曼模型,大概列一下公式及输入输出

一、通过轨迹规划的线速度和角速度,速度分解给电机

1. 已知量(轨迹规划输出)

轨迹规划器给出的控制指令通常是:

  • v:车体中心线速度(通常沿车辆 x 轴)

  • ω:车体绕 z 轴的角速度(偏航角速度)

2. 阿克曼模型需要的控制输入

阿克曼模型要求的控制输入通常是:

  • v:车辆沿主轴的线速度(多数情况是后轮中心点速度)

  • δ:前轮转角(steering angle),是前轮相对于车身的转向角

3. 转换公式(核心)

给定:

  • 车辆轴距 L

转换为前轮转角的公式为:

\delta = \arctan \left ( L\cdot \omega /v \right )

v_{wheel} = v_{planning}

注意:

  • 如果 ω=0,表示直行,此时 δ=0

  • 如果 v=0,车辆原地旋转,此时阿克曼车辆无法实现,需特殊处理(如小车式模型或原地转向模型)

  • 后轮中心的线速度等于轨迹规划的线速度

4. 控制信号的解读

最终的阿克曼控制指令是:

  • 前轮转角 δ:传给前轮转向系统(如舵机)

  • 线速度 v:传给车辆后轮驱动系统(如电机),用于设定期望速度或加速度

二、底盘计算里程计

1. 输入变量(从阿克曼模型或控制层获得)

我们已知以下量:

  • v:后轮线速度(单位:m/s)

  • δ:前轮转角(单位:rad)

  • L:车辆轴距(单位:m)

  • dt:时间步长(单位:s)

我们目标是实时或周期性更新车辆的里程计状态:

(x,y,θ)

其中:

  • x,y:车体中心在世界坐标系下的位置

  • θ:车体航向角(朝向,偏航角)

2. 建立运动学模型(基于阿克曼)

阿克曼车辆的瞬时运动满足以下微分方程:

\left\{\begin{matrix} \dot{x}=v\cdot \cos \theta \\ \dot{y}=v\sin \theta \\ \dot{\theta =\left ( v/L \right )\cdot \tan \delta } \end{matrix}\right.

这就是以后轮为参考点的非完整运动模型

3. 离散化更新公式(用于里程计积分)

设上一时刻的位置为 \left ( x_{k+1},y_{k+1},\theta _{_{k+1}} \right ),则:

\left\{\begin{matrix} x_{k+1}=x_{k}+v\cdot \cos (\theta _{k})\cdot dt)\\ y_{k+1}=y_{k}+v\cdot \sin(\theta _{k})\cdot dt) \\ \theta _{k+1}=\theta _{k}+\frac{v}L{}\cdot \tan(\delta )\cdot dt) \end{matrix}\right.

机器人的车体航向角θ,可以直接由IMU去拿。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐