分析总结常见的几种移动机器人底盘类型及其运动学

本文深入探讨了移动机器人的各类底盘,包括两轮差速、三轮全向、四轮全向、麦克纳姆轮、四轮滑移及四轮阿克曼底盘的特点与运动学模型。通过对比分析,为机器人设计提供了实用的工程应用指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言(Preface)

最近想做一个关于移动机器人的总结,就先从移动机器人的底盘说起吧。现在移动机器人这么火热,大到无人驾驶车,规矩的有工业上应用得很多的AGV(比如智能物流自动搬运机器人),小到淘宝上面的智能小车,都可以算作移动机器人。移动机器人有各种各样的底盘,有两轮的三轮的四轮的,比如无人车是四轮的阿克曼模型,一般的AGV是两轮差速模型,还有大学生机器人竞赛里面常见的三轮全向轮底盘,四轮全向轮底盘,还有一些AGV是四轮滑移底盘,是不是有点让人眼花缭乱的感觉呢,哈哈,下面就逐一来分析一下,关于运动学的话我不会推导公式,我本人也是不太喜欢推公式的,我觉得有现成的用,理解其含义就好了,我就从工程应用上面说说怎么用。

 

两轮差速底盘(Differential Drive robot)

就是类似下面这货,两个驱动轮,带几个万向轮,靠差速转弯,有点像两轮平衡车,但和平衡车不同的是,他三个轮子在平面上已经平衡了,不需要考虑自平衡的问题。

两轮差速底盘估计是现在应用得最多的机器人底盘了,ROS自带的DWA路径规划算法特别适合这货,他本身也可以原地旋转,还是很灵活的,简单有效,所以应用很多。

想要做全自主移动的机器人,就不能不知道自己的位置,要估计机器人的位置,就要用到里程计了,里程计有几种,轮式里程计,激光里程计,视觉里程计。 轮式里程计就是把机器人在这个很小的路程里的运动可以看成直线运动。然后就是这里实际上是对速度做一个积分,

 

正运动学模型(forward kinematic model)将得到一系列公式,让我们可以通过四个轮子的速度,计算出底盘的运动状态;而逆运动学模型(inverse kinematic model)得到的公式则是可以根据底盘的运动状态解算出四个轮子的速度。

我们的速度是由嵌入式设备测试来的很短时间内的一个速度,

\LARGE \Delta v = \frac{input\cdot \frac{ppr}{2\pi} \cdot r}{\Delta t }

上式中,input是在\Delta t 时间内轮子编码器增加的读数,ppr是编码器的线数,r是轮子半径。式中的分子 实际上是在算\Delta t 内轮子的平均线速度,但这只是其中一个轮子的速度,车子中心的速度实际是 左轮的速度加右轮的速度/2,即

 \LARGE v = \frac{(v _{l}+v_{r} )}{2} 

这个速度的估计精度和编码器的精度有很大关系,而且轮子不能打滑空转。

求得小车的近似瞬间速度V后,以世界坐标系为原点,对V进行积分,即可得到机器人在世界坐标系中的位置,算法如下:

    //compute odometry in a typical way given the velocities of the robot
    double dt = (current_time - last_time).toSec();
    double delta_x = (vx * cos(th) - vy * sin(th)) * dt;
    double delta_y = (vx * sin(th) + vy * cos(th)) * dt;
    double delta_th = vth * dt;
   
    x += delta_x;
    y += delta_y;
    th += delta_th;

 

三轮全向轮底盘(Three-wheel omnidirectional wheel robot)

图片来自百度图片~,三个全向轮分别相隔120°,可以全方位移动。

我们先以小车自身中心建立坐标系,如下图:

其中v_1、v_2、v_3分别为三个轮子的转速,ω为旋转角速度,v_x、v_y为车身坐标系中的速度即相对速度(由于底盘速度性能与在世界坐标系中的姿态无关,因此此处为简化运算,取车身坐标系与世界坐标系X,Y方向重合),a为旋转中心到轮轴心的垂直距离,θ为轮轴与x轴夹角,θ=π/6。不难得出各轮速度的转换矩阵为:

然后求逆得:

现在我们就可以根据三个轮子的轮速来确定

四轮全向轮底盘(Four-wheel omnidirectional wheel robot)

每个轮子相互垂直,成十字形摆放的时候刚好是个十字坐标系,不过为了轴向的性能更好,一般用X型,如下图

 

 

四轮麦克纳姆轮底盘(Four-wheeled Mecanum wheel  robot)

这个轮子也非常出名,Robomaster 就是用的这种轮子,可以像正常车轮子那样前面两个轮后面两个轮摆放,如下图:

四个麦克纳姆轮有几种摆放方式,咱只说最常见的长方O形,即上图的样子。

下面来看下它的运动学,我们先定义,v_{wi} 是第i个轮子的转速。沿左为X轴正方向,向前为Y轴正方向,轮子速度也是定义向前为正方向。

           上图是当底盘沿着 Y 轴平移时的情况,可以看到,当所有轮子都前转的时候,由于有摩擦力,会有F1,F2,F3,F4四个方向的力,F1和F2,F3和F4,沿X轴的力会相互抵消掉,只剩下沿Y轴的,最后计算合起来的速度也正好等于轮子转速,所以,Y方向的速度就是轮子转速。

           如此,可以想象得到当底盘沿着 X 轴平移时有:

当底盘绕几何中心自转时:

所以综上有公式得:

 

参考资料:https://zhuanlan.zhihu.com/p/20282234

四轮滑移底盘(Four-wheel sliding robot)

这个也可以叫四轮差速底盘,他和两轮的原理一样,都是靠左右两边的速度不一样还转向,但是因为他四个轮子都是固定的,想象一下,当车子差速原地转向的时候,四个轮子就必定会有一点漂移的情况出现,就是轮子会出现侧向滑动,而两轮不会出现这种情况,因为两轮的车轴经过旋转中心。下图出名的 husky robot 就是这类底盘。

运动学可以使用2轮的。轮子磨损会比两轮大。

 

四轮阿克曼底盘(Four-wheeled Ackerman robot)

像汽车一样,前轮转向,后轮驱动的模型就叫阿克曼模型,如下图

下面来看一下运动学模型:

公式:

车辆运动学参考资料:https://blog.csdn.net/u013914471/article/details/82968608

### 四轮差速运动学模型的实现原理 四轮差速移动机器人(SSMR)是一种常见的全向移动平台,其运动学建模基于两轮差速机器人的扩展。通过对四个独立可控车轮的速度和方向进行协调控制,能够实现复杂的运动模式[^1]。 #### 系统模型构建 为了描述四轮差速机器人的运动特性,通常采用平面极坐标系下的运动学方程表示。设 \( (x, y) \) 表示机器人中心的位置,\( \theta \) 表示机器人朝向角,则可以通过以下公式表达: \[ \begin{aligned} \dot{x} &= v \cos(\theta), \\ \dot{y} &= v \sin(\theta), \\ \dot{\theta} &= \omega, \end{aligned} \] 其中 \( v \) 和 \( \omega \) 分别代表线速度和角速度。对于四轮差速机器人而言,这两大参数由各个车轮的速度综合决定。 #### 差速控制策略 在实际应用中,差速动的 AGV 机器人常依赖 MPC(Model Predictive Control,模型预测控制)算法完成横向速度控制。MPC 的核心在于通过实时优化计算得出最优控制序列,使得机器人沿预定轨迹平稳行驶并减小误差。具体流程如下: 1. **建立系统模型**:利用前述运动学方程作为基础动态模型; 2. **定义目标函数**:最小化位置偏差、姿态偏差以及能耗等因素组成的加权代价函数; 3. **确定约束条件**:考虑物理极限(如最大转矩)、路径边界等限制因素; 4. **求解优化问题**:运用数值方法寻找未来一段时间内的最佳控制指令集合; 5. **将控制输入转化为差速轮速度**:依据所得结果调整左右两侧电机转速差异以达成所需转向效果[^2]。 #### 轨迹预测与仿真验证 针对特定应用场景可能还需要进一步探讨如何结合其他类型底盘结构(例如阿克曼转向机制),形成更加灵活多变的整体解决方案。比如,在某些情况下可以在标准差速平台上附加额外自由度来增强机动性能[^4]。下面给出一段简单的 Python 示例程序用于模拟基本直线前进过程中的状态变化情况: ```python import numpy as np from scipy.integrate import odeint def kinematic_model(state, t, u): x, y, theta = state v, omega = u dxdt = v * np.cos(theta) dydt = v * np.sin(theta) dthetadt = omega return [dxdt, dydt, dthetadt] initial_state = [0, 0, 0] time_span = np.linspace(0, 10, 100) control_input = lambda t: [1, 0.1] # Constant velocity and angular rate solution = odeint(kinematic_model, initial_state, time_span, args=(control_input(time_span),)) print(solution[-1]) # Final position after simulation ``` 此脚本展示了如何使用 SciPy 库解决微分方程组进而获得随时间演化的位姿数据流。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值