问答 | 为什么两轮差速机器人转向运动是圆周运动

关注同名微信公众号“混沌无形”,阅读更多有趣好文!

原文链接https://mp.weixin.qq.com/s/Mj5iLR_4TKeJiaOVqJf6Vg包含原文PDF百度云下载链接

从理论概念方面分析,机器人运动可视为刚体平面运动,因此所有的平面刚体运动可分解为平移和旋转两种运动,平移运动包含x-y两个方向的运动,所以刚体平面运动是3个自由度。

当左右驱动轮的速度不同的时候,意味着同一刚体上的两个点速度不一致,说明刚体运动中肯定有“旋转”的成分,而刚体的位置也在发生变化,所以也有“平移”的成分,而受到轮子的约束,机器人平移运动仅能沿着轮子滚动方向(x轴方向)运动,不能沿着y轴方向运动(漂移不在本文讨论范围内)。

因此,机器人上所有的点仅使用角速度和沿着x轴的线速度就可以描述。当角速度不为0时,机器人肯定在做圆周运动;当角速度为0时,左右驱动轮的速度是相同的,则机器人沿着直线运动。

图 1 两轮差速模型.机器人的外轮廓可视为圆形,直径为dwb,ICR表示瞬时旋转中心,蓝色圆弧表示机器人运动路径,点L和R分别为左右轮与地面的接触点。

 

由于网页排版效果一般,所以笔者按照期刊论文版式为小伙伴们整理了原文PDF,方便收藏和回味。

原文链接https://mp.weixin.qq.com/s/Mj5iLR_4TKeJiaOVqJf6Vg包含原文PDF百度云下载链接
CSDN下载链接:https://download.csdn.net/download/qq_19598969/15690269

如果喜欢的话,可以关注同名微信公众号“混沌无形”,阅读更多有趣好文!

### 四轮差速转向公式及其计算方法 对于四轮差速驱动机器人运动控制,其核心在于如何通过调整各个电机的速度来实现期望的运动模式。这类机器人能够执行多种类型的移动动作,包括但不限于前进、后退、转弯以及原地旋转[^3]。 #### 运动学模型基础 为了理解四轮差速转向的工作机制,首先要考虑的是车辆的运动学模型。通常情况下,这些模型会基于机器人的质心(COM, Center of Mass)进行构建。然而,在某些应用场景下,可能更倾向于采用几何中心(CENTER)作为参考点来进行建模。此时,则需引入适当的坐标变换以适应新的参照系需求[^1]。 #### 差速转向原理 在讨论具体的转向公式之前,先了解基本的差速转向概念非常重要。当希望机器人改变方向时,并不是让所有的轮胎都按照同样的速率运转;而是根据不同情况下的具体要求,适当增加或减少特定一侧或一组轮胎的动力输入。例如: - **直行**:所有四个轮子保持相同的角速度; - **转弯**:内外侧轮之间存在转速差异,外侧轮比内侧轮更快; - **原地旋转**:两侧轮子反向转动,即一边正转另一边反转。 这种设计允许即使是在狭窄空间内也能灵活操控设备完成复杂的轨迹变化。 #### 转弯半径与角度关系 考虑到实际操作中的精度问题,特别是针对小型化无人平台而言,准确测量并设定合理的参数显得尤为关键。其中一个重要方面就是确定合适的转弯半径(_r_c_)——这不仅影响到整体行驶路径的设计,同时也涉及到安全性和效率等多个层面的因素考量[^2]。 假设已知两个前/后轴间距离为L,左右轮距为W,则可以根据给定条件得出相应的数学表达式用于描述任意时刻各部件的状态变化规律。对于简单的圆周运动来说,有如下近似公式可用于估算最小可行曲率半径R_min: \[ R_{min} \approx L / (tan(\theta)) \] 这里θ代表当前瞬态航向角的变化量大小。需要注意的是,上述方程仅适用于理想状况下的理论分析框架之内;而在真实世界里由于地面摩擦力等因素干扰作用的存在,往往还需借助实验数据进一步修正完善相关结论。 #### 控制策略实施细节 最终要使整个系统稳定可靠运行起来,除了依赖精准可靠的硬件设施之外,软件层面上同样不可或缺一套完善的算法逻辑支持体系。比如利用PID控制器或者其他先进的自适应技术手段去动态调整目标指令值,从而确保无论外界环境怎样波动都能始终保持良好的跟踪性能表现。 ```python def calculate_turn_radius(steering_angle_degrees, wheelbase_length_meters): """ Calculate the turn radius based on steering angle and vehicle's wheelbase. :param steering_angle_degrees: Steering angle in degrees :param wheelbase_length_meters: Distance between front and rear axles in meters :return: Turn radius in meters """ import math if abs(steering_angle_degrees) < 0.001: return float('inf') # Straight line case radian_steering_angle = math.radians(abs(steering_angle_degrees)) turn_radius = wheelbase_length_meters / math.tan(radian_steering_angle) return turn_radius ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

混沌无形

谢谢老板

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

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

打赏作者

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

抵扣说明:

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

余额充值