三种常见的移动底盘运动学模型分析

目录

前言

一、四轮差速运动模型

二、麦克纳姆轮运动学模型

三、两轮差速运动学模型

总结


前言

现在大三暑假,开学就要着手准备毕设了,接手了实验室师兄的激光SLAM小车项目,先从下位机学起,争取把整个项目接受下来,有所收获有所创新。

这篇是在学习代码过程中,对四轮差速小车、麦克纳姆轮小车以及两轮差速小车运动学模型的学习总结。

一、四轮差速运动模型

 

符号说明:

在四轮差速模型中,前轮和后轮的速度是同步的,这里以底盘几何中心COG沿y轴方向上的点ICR作为整个底盘进行圆周运动时的圆心,ICR和COG的距离大小与圆周运动角速度大小有关。

公式推导:

绕圆心做圆周运动的物体,其线速度v、角速度w和圆周半径d满足w=v/d。因此可以建立底盘中的约束关系:

\omega _c=\frac{v_c}{d_c}

假设线d_{c}与y轴的夹角为,可以对上式进行变形,结果如下所示:

\omega _c=\frac{v_c}{d_c}=\frac{v_c\cos \alpha _c}{d_c\cos \alpha _c}=\frac{v_{cx}}{d_{cy}}

\omega _c=\frac{v_c}{d_c}=\frac{v_c\sin \alpha _c}{d_c\sin \alpha _c}=\frac{v_{cy}}{d_{cx}}

刚体旋转时,各个位置的角速度与质心处的角速度是一样的,即四个轮子绕ICR旋转的角速度也是\omega _{c}。按照上式推理,同样可以得到以下约束关系式:

\omega _c=\frac{v_i}{d_i}=\frac{v_i\cos \alpha _i}{d_i\cos \alpha _i}=\frac{v_{ix}}{d_{ix}}

\omega _c=\frac{v_i}{d_i}=\frac{v_i\sin \alpha _i}{d_i\sin \alpha _i}=\frac{v_{iy}}{d_{iy}}

同时,d_{i}d_{c}x轴和y轴上的投影长度满足下式关系:

d_{1y}=d_{2y}=d_{cy}-\frac{c}{2}

d_{3y}=d_{4y}=d_{cy}+\frac{c}{2}

当四轮差速底盘设定的左轮、游轮速度分别为v_{l}v_{r},且前轮、后轮速度严格同步时,有下式所示关系:

v_l=v_{1x}=v_{2x}

v_r=v_{3x}=v_{4x}

综合上式可以得到以下结果:

v_l=v_{1x}=v_{2x}=\omega _c\left( d_{cy}-\frac{c}{2} \right) =v_{cx}-\omega _c\cdot \frac{c}{2}

v_r=v_{3x}=v_{4x}=\omega _c\left( d_{cy}+\frac{c}{2} \right) =v_{cx}+\omega _c\cdot \frac{c}{2}

将上式整理后,得到四轮差速底盘的前向运动学关系:

\left[ \begin{array}{c} v_{cx}\\ \omega _z\\ \end{array} \right] =\left[ \begin{matrix} \frac{1}{2}& \frac{1}{2}\\ -\frac{1}{c}& \frac{1}{c}\\ \end{matrix} \right] \left[ \begin{array}{c} v_l\\ v_r\\ \end{array} \right]

参考博客:移动机器人运动模型(两轮、四轮、麦克纳姆轮和概率运动)_anthony-36的博客-CSDN博客_移动机器人运动模型


二、麦克纳姆轮运动学模型

 已知车中心的xy方向线速度v_{tx}v_{ty}和角速度\omega,可以计算出每个轮子的中心速度:

\vec{v}=\vec{v}_t+\vec{v}_r=\vec{v}_t+\vec{\omega}\times \vec{r}

那么轮子中心的xy方向速度分量为:

v_x=v_{tx}-v_{rx}=v_{tx}-v_r\cos \theta =v_{tx}-v_r\frac{r_y}{r}=v_{tx}-\omega r_y

v_y=v_{ty}+v_{ry}=v_{ty}+v_r\sin \theta =v_{ty}+v_r\frac{r_x}{r}=v_{ty}+\omega r_x

根据轮子中心的速度,可以分解为沿辊子方向速度和垂直辊子方向速度,垂直辊子方向速度可以不记,\underset{u}{\rightarrow}是沿辊子方向的单位向量(投影),可以得到:

\vec{v}_{||}=\vec{v}\cdot \vec{u}

辊子方向与x轴方向夹角为45°,则单位向量可以表示为:

\vec{u}=-\frac{1}{\sqrt{2}}\vec{i}+\frac{1}{\sqrt{2}}\vec{j}

则有:

v_{||}=\vec{v}\cdot \vec{u}=\left( \vec{v}_x\vec{i}+\vec{v}_y\vec{j} \right) \cdot \left( -\frac{1}{\sqrt{2}}\vec{i}+\frac{1}{\sqrt{2}}\vec{j} \right)

化简后得到:

\vec{v}_{||}=-\frac{1}{\sqrt{2}}v_x+\frac{1}{\sqrt{2}}v_y

然后从与地面接触的辊子速度到轮子线转速:

v_v=v_{||}\cdot \sqrt{2}=-v_x+v_y

代入上述v_{x}v_{y}计算公式得:

v_v=-\left( v_{tx}-\omega r_y \right) +\left( v_{ty}+\omega r_x \right) =v_{ty}-v_{tx}+\omega \left( r_x+r_y \right)

 依次可得四个轮子的计算公式:

\left\{ \begin{array}{l} v_{v1}=v_{ty}-v_{tx}+\omega \left( r_x+r_b \right)\\ v_{v2}=v_{ty}+v_{tx}-\omega \left( r_x+r_b \right)\\ v_{v3}=v_{ty}-v_{tx}-\omega \left( r_x+r_b \right)\\ v_{v4}=v_{ty}+v_{tx}+\omega \left( r_x+r_b \right)\\ \end{array} \right.

式中r_{x}r_{y}是车身横向距离和纵向距离的一半

参考博客:一文读懂麦克纳姆轮全向移动原理及剖析_苏守坤的博客-CSDN博客_麦克纳姆轮原理

在小车横向距离和纵向距离相近时,麦轮的运动学模型会退化成四轮差速小车的运动学模型,y方向的速度为0,r_{x}r_{y}相等,看一下公式就推出来了。


三、两轮差速运动学模型

运动特性为两轮差速驱动,其底部后方两个同构驱动轮的转动为其提供动力,前方的随动轮起支撑作用并不推动其运动,两轮差速驱动如下图所示。

 它的解算是要达到下图所示目的:

给定前进速度和角速度,计算出左右轮的速度。

根据高中所学的线速度角速度公式,可得:

v_1=v_c+\omega \frac{d}{2}

v_2=v_c-\omega \frac{d}{2}

参考博客:两轮差速机器人运动学模型_奔驰的战猪的博客-CSDN博客_两轮差速模型


总结

感谢CSDN各位大佬,让菜鸡又学到了知识

### 底盘差速模型在机器人路径规划中的应用与实现 #### 差速模型概述 差速驱动模型是一种常见移动机器人运动学模型,适用于具有两个独立控制车轮的机器人。这种类型的机器人能够通过调节两侧电机的速度来改变方向和前进速度[^2]。 #### 路径规划基础概念 对于采用差速模型的机器人来说,在执行路径规划任务时,通常会涉及到从起始位置到目标位置的一系列中间点组成的轨迹。为了使机器人沿预定路线行驶,需要设计合适的控制器以确保实际运行轨迹尽可能贴近理想路径[^1]。 #### Pure Pursuit 控制算法的应用 Pure Pursuit 是一种简单而有效的路径跟踪策略,特别适合应用于基于差速驱动的自主导航系统中。该方法的核心思想是在当前时刻寻找距离最近的目标点作为“前瞻点”,并据此计算所需的转向角度以及相应的角速度命令发送给底层控制系统,从而使车辆逐步逼近整个路径直至完成全程行走过程。 具体而言: - **输入参数** - 当前坐标 (x, y) - 前瞻距离 L(即提前量) - **处理逻辑** ```python def pure_pursuit(current_pose, path_points, lookahead_distance): min_dist = float('inf') target_point_index = None # 寻找最接近但又超出lookahead_distance范围的第一个path point for i, p in enumerate(path_points): dist_to_pathpoint = ((p[0]-current_pose[0])**2 + (p[1]-current_pose[1])**2)**0.5 if abs(dist_to_pathpoint - lookahead_distance) < min_dist and \ dist_to_pathpoint >= lookahead_distance: min_dist = abs(dist_to_pathpoint - lookahead_distance) target_point_index = i if target_point_index is not None: alpha = math.atan2( path_points[target_point_index][1] - current_pose[1], path_points[target_point_index][0] - current_pose[0])\ - current_pose[2] omega = k * alpha # 计算所需角速度; 这里的k是一个增益系数 v = desired_linear_velocity() # 获取期望线速度 return {'v': v, 'omega': omega} else: raise Exception("No suitable look-ahead point found.") ``` 此函数接收机器人的当前位置`current_pose=(x,y,theta)`、一系列路径节点`path_points=[(x_i,y_i)]` 和预设好的前瞻距离 `lookahead_distance` ,返回用于指导下一步行动的方向指令 `{v:linear_speed, omega:angular_speed}` 。其中θ表示朝向角,单位为弧度;α代表相对于车身纵轴的角度偏差;ω则是最终输出给底盘控制器使用的转动速率。 #### 实现注意事项 当利用上述代码片段构建完整的路径追踪解决方案时,还需要考虑其他因素,比如如何平滑过渡不同阶段之间的状态变化、怎样应对突发情况下的避障需求等。此外,由于实际情况可能存在的误差累积效应,建议定期重置位姿估计或引入更高级别的反馈机制来进行补偿修正[^3]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值