ROS联合Webots之麦克纳姆轮篇-搭建麦轮底盘

ROS联合Webots之麦克纳姆轮篇-搭建麦轮底盘

ubuntu版本:20.04
webots版本:2021a
ros版本:noetic

0.前言

之前笔者出过ROS联合webots开发教程,在教程中使用的是双轮差动底盘模型,今天笔者将带给笔者麦克纳姆轮的使用教程。

1.模型选取

在Webots中,官方提供了kuka公司推出的youbot机器人作为麦克纳姆轮的案例

  • 实物机器人如下所示:
    在这里插入图片描述
  • 仿真机器人如下所示:
    在这里插入图片描述

2.youbot底盘

由上面的两张图可以看到youbot的底盘是麦克纳姆轮底盘,麦克纳姆轮也简称麦轮,与普通的轮子不同,麦轮除了提供前后方向的移动,还能提供左右方向的移动。
麦轮分为两种(A轮和B轮),A轮会产生轴向向左,垂直轴向向前的速度分量,如下图所示:
在这里插入图片描述

B轮会产生轴向向右,垂直轴向向后的速度分量,下图所示。
在这里插入图片描述

youbot机器人底盘上的麦克纳姆轮为A-B-A-B配置,如下图所示:
在这里插入图片描述

将四个轮子复制进自己的机器人中。

3.Webots仿真中的WorldInfo节点

WorldInfo的参数介绍如下所示:

WorldInfo {
  SFString title                          ""         # 给世界取个好听的名字吧
  MFString info                           [ ]        # 介绍世界的信息参数
  SFFloat  gravity                        9.81       # 设置地球引力大小参数
  SFFloat  CFM                            0.00001    # 用于管理接触关节的约束力参数
  SFFloat  ERP                            0.2        # 用于管理接触关节的错误减少参数
  SFString physics                        ""         # 允许用户使用ODE API 编程自定义物理效果的物理插件
  SFFloat  basicTimeStep                  32         # Webots执行的模拟步骤的持续时间
  SFFloat  FPS                            60         # 每秒传输帧数
  SFInt32  optimalThreadCount             1          # 用于计算世界物理的实际线程数
  SFFloat  physicsDisableTime             1          # 物理禁用时间
  SFFloat  physicsDisableLinearThreshold  0.01       # 物理禁用线性阈值
  SFFloat  physicsDisableAngularThreshold 0.01       # 物理禁用角度阈值
  SFNode   defaultDamping                 NULL       # 默认阻尼
  SFFloat  inkEvaporation                 0          # 字段设置为非空值,则地面纹理的颜色将慢慢变为白色。
  SFString coordinateSystem               "ENU"      # 坐标系
  SFString gpsCoordinateSystem            "local"    # GPS坐标系
  SFVec3f  gpsReference                   0 0 0      # GPS参数
  SFFloat  lineScale                      0.1        # 线标尺
  SFInt32  randomSeed                     0          # 随机种子
  MFNode   contactProperties              []         # 允许指定多个 ContactProperties 节点,这些节点定义 Solid 节点碰撞时的行为。
}

4.通过修改worldInfo实现麦克纳姆轮底盘运动

  1. 添加两个ContactProperties节点,通过此节点可以定义Solid节点碰撞时的行为,如下图所示:
    在这里插入图片描述

ContactProperties节点参数介绍:

ContactProperties {
  SFString material1          "default"            # 指定接触材料1,Solid的碰撞节点名
  SFString material2          "default"            # 指定接触材料2,Solid的碰撞节点名
  MFFloat  coulombFriction    1                    # 库仑摩擦系数,0 导致无摩擦接触,无穷大导致接触永不滑动
  SFVec2f  frictionRotation   0 0                  # 允许用户旋转非对称的情况下使用的摩擦方向
  SFFloat  bounce             0.5                  # 恢复系数,表示撞击前后的速度比
  SFFloat  bounceVelocity     0.01                 # 弹跳速度
  MFFloat  forceDependentSlip 0                    # 摩擦的滑移
  SFFloat  softERP            0.2                  # 管理局部接触关节的错误减少参数
  SFFloat  softCFM            0.001                # 管理局部接触关节的软约束力混合
  SFString bumpSound          "sounds/bump.wav"    # any string
  SFString rollSound          "sounds/roll.waw"    # any string
  SFString SlideSound         "sounds/slide.wav"   # any string
}
  1. 第一个ContactProperties节点如下图所示:
    在这里插入图片描述

第二个ContactProperties节点如下图所示:
在这里插入图片描述

主要修改material1coulombFriction;frictionRotation;bounceforceDependentSlip参数。

  • material1字段在麦克纳姆轮实体的节点下已经定义,如下图所示:
    在这里插入图片描述

大家可以尝试着修改成ExteriorWheelMat试试,可以发现机器人横向移动时会随即带着旋转的姿态,因为这时这个轮子的frictionRotation摩擦方向正好是同向,有一个同向的力导致机器人旋转。

  • coulombFriction字段可以设置4个参数。只有一个参数时摩擦是对称的;两个参数时摩擦是不对称的;三个参数时对material1使用不对称系数,对于material2使用对称系数;四个参数时对material1material2都使用不对称系数。此时我们设置了3个参数,说明对material1是不对称系数,对material2是对称系数。
  • frictionRotation字段中,第一节点设置成-0.965,第二节点设置成0.965
  • bounce字段设置成0,对象会有效的停止在和他碰撞的表面,不会弹跳。
  • forceDependentSlip字段可以设置4个参数。使用一个参数,则该系数适用于两个方向;两个参数时力相关滑移是不对称的,对两个material使用相同的系数;三个参数时对material1使用不对称系数,对于material2使用对称系数;四个参数时对material1material2都使用不对称系数。
    通过使用上面的节点配置,可以实现麦克纳姆轮的运动方式

效果

在这里插入图片描述

结语

本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~

为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接

开源项目mecanum_robotsim正在更新中~~
✌Bye

### 关于ROS麦克纳底盘控制的教学资源 对于希望深入理解如何利用ROS进行麦克纳底盘控制的学习者而言,存在多种高质量的教学资源可供选择。 #### ROS基础开发与应用 针对ROS的基础开发和高级应用方面,有专门设计的实验教学方案[^1]。这些材料不仅涵盖了基本概念介绍,还包括实际操作指南,帮助使用者快速上手并掌握核心技巧。特别是当涉及到复杂机构如麦克纳这样的特殊驱动方式时,这类文档能够提供必要的理论背景和技术细节支持。 #### 多场景适用课程体系 为了更好地服务于不同层次的需求,某些教育平台提供了覆盖广泛主题范围内的系统化培训项目。例如,由松灵机器人联手知名在线学习网站古月居共同推出的系列视频讲座就特别强调了对各种运动模式的支持——这其中包括但不限于基于四独立转向机制(即所谓的“麦克纳”配置)。通过这套精心编排的内容集锦,学员可以逐步建立起从简单到复杂的全面认知框架,并最终实现自主完成相关项目的构建能力[^2]。 #### myAGV智能移动底盘案例研究 具体来说,在myAGV这款产品身上体现出了许多值得借鉴的设计思路和技术解决方案。作为Elephant Robotics旗下的一员,它凭借坚固耐用的身体构造以及先进的软件环境而备受好评;更重要的是其内部集成了一系列成熟的同步定位与地图绘制(SLAM)算法库,使得即使是没有太多经验的新手也能轻松驾驭整个流程中的每一个环节[^3]。 ```python import rospy from geometry_msgs.msg import Twist def move_robot(linear_speed, angular_speed): pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10) rospy.init_node('move_robot') twist = Twist() twist.linear.x = linear_speed twist.angular.z = angular_speed rate = rospy.Rate(10) while not rospy.is_shutdown(): pub.publish(twist) rate.sleep() if __name__ == '__main__': try: move_robot(0.5, 0.2) # Example values for demonstration purposes only. except rospy.ROSInterruptException: pass ``` 此Python脚本展示了如何向`/cmd_vel`话题发布速度命令以控制搭载ROS系统的机器人行动。这对于操控采用麦克纳技术的产品尤为有用,因为可以通过调整线性和角速度参数精确地指挥设备沿任意方向前进或旋转。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

锡城筱凯

你的鼓励是我创造的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值