驱动运动学:Skid steer滑移转向和mecanum麦克纳姆(包括 ROS Twist)
  lmBrE9awdQJZ 2023年11月19日 26 0



文章目录

  • 概要
  • 滑移转向/差速驱动
  • 基于圆弧的命令
  • ROS 的线性和角速度命令
  • 麦克纳姆轮数学
  • 正向运动学
  • 逆运动学
  • 参考



驱动运动学:Skid steer滑移转向和mecanum麦克纳姆(包括 ROS Twist)_字段

概要

我经常需要滑移转向车辆的基本运动方程。我最近也一直在研究麦克纳姆轮车辆。滑移转向方程相当简单且易于找到,但我会将其包含在不同的版本中,并包含 ROS 方法。麦克纳姆轮方程更难找到,而且有不同的版本。我发现的第一个版本有很多三角函数并且大部分都有效。我在这里展示的版本更容易直观地理解,并且似乎工作得更好(我不需要这个版本的随机比例因子),我还为它们提供了 ROS 方法。

滑移转向/差速驱动

以下是 2 轮和 4 轮差速驱动车辆、2 个轮子和一个脚轮或滑移转向履带式车辆的一些数学计算。

基于圆弧的命令

基本的滑移转向方程为:

右速度 = w ( RADIUS_OF_ARC_TO_DRIVE + WHEEL_BASE/2)
左速度 = w ( RADIUS_OF_ARC_TO_DRIVE – WHEEL_BASE/2)

其中w是角度旋转,RADIUS_OF_ARC_TO_DRIVE 是机器人应行驶的圆弧半径,WHEEL_BASE 是从左轮中心到右轮中心的距离(见上图)。

这也可以写成:

w = (右速度-左速度)/WHEEL_BASE

有两种特殊情况:

IFvelocity_right==velocity_left:
那么圆弧的半径是无穷大,因此机器人将直线行驶。

IF Velocity_right == -velocity_left :
THEN 圆弧半径为 0,机器人原地旋转(即点转向)

ROS 的线性和角速度命令

在 ROS 中,如果使用Twist 主题(这是驱动器消息的默认设置)(消息名称通常是 cmd_vel),您通常会在Linear.x字段中设置 Linear_velocity,在Angular.z字段中设置 Angular_velocity 。

velocity_left_cmd = (线性速度 – 角度速度 * WHEEL_BASE / 2.0)/WHEEL_RADIUS;

velocity_right_cmd = (线性速度 + 角度速度 * WHEEL_BASE / 2.0)/WHEEL_RADIUS;

麦克纳姆轮数学

驱动运动学:Skid steer滑移转向和mecanum麦克纳姆(包括 ROS Twist)_ci_02


在 ROS 中,如果使用 Twist 消息,您通常会设置 Linear.x、Linear.y 和 Angular.z 字段。

一个不相关的注意事项是,如果您在不平坦的地形上操作,那么进行麦克纳姆类型的运动将会失败并且会有很多滑动。滑移转向类型的运动通常效果更好(使用麦克纳姆轮)。

WHEEL_SEPARATION_WIDTH = DISTANCE_LEFT_TO_RIGHT_WHEEL / 2

WHEEL_SEPARATION_LENGTH = DISTANCE_FRONT_TO_REAR_WHEEL / 2

正向运动学

(技术上是逆运动学,但地面机器人通常被称为正运动学)

车轮命令单位为 rad/s

wheel_front_left = (1/WHEEL_RADIUS) * (线性.x – 线性.y – (WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)*角度.z);

Wheel_front_right = (1/WHEEL_RADIUS) * (线性.x + 线性.y + (WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)*角度.z);

wheel_rear_left = (1/WHEEL_RADIUS) * (线性.x + 线性.y – (WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)*角度.z);

wheel_rear_right = (1/WHEEL_RADIUS) * (线性.x – 线性.y + (WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)*角度.z);

要驱动机器人,您可能还需要反转一侧,因为电机安装在另一侧的对面。例如:

轮前右 = -1 * 轮前右

后轮右 = -1 * 后轮右

这也给出了以 rad/s 为单位的输出。如果您的电机控制器以编码器计数为单位运行,您将需要转换单位。

逆运动学

(技术上是正向运动学,但地面机器人通常称为反向运动学)

线性.x = (wheel_front_left +wheel_front_right +wheel_rear_left +wheel_rear_right) * (WHEEL_RADIUS/4)

线性.y = (-wheel_front_left +wheel_front_right +wheel_rear_left –wheel_rear_right) * (WHEEL_RADIUS/4)

角度.z = (-wheel_front_left +wheel_front_right –wheel_rear_left +wheel_rear_right) * (WHEEL_RADIUS/(4 * (WHEEL_SEPARATION_WIDTH + WHEEL_SEPARATION_LENGTH)))

参考

https://www.robotsforroboticists.com/drive-kinematics/


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
  mYwXEFqSO0K7   2024年01月09日   39   0   0 Angular
lmBrE9awdQJZ