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实现麦克纳姆轮底盘运动
- 添加两个
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 stringSFString rollSound "sounds/roll.waw" # any stringSFString SlideSound "sounds/slide.wav" # any string
}
- 第一个
ContactProperties
节点如下图所示:
第二个ContactProperties
节点如下图所示:
主要修改material1
;coulombFriction
;frictionRotation
;bounce
和forceDependentSlip
参数。
- material1字段在麦克纳姆轮实体的节点下已经定义,如下图所示:
大家可以尝试着修改成ExteriorWheelMat
试试,可以发现机器人横向移动时会随即带着旋转的姿态,因为这时这个轮子的frictionRotation
摩擦方向正好是同向,有一个同向的力导致机器人旋转。
- coulombFriction字段可以设置4个参数。只有一个参数时摩擦是对称的;两个参数时摩擦是不对称的;三个参数时对
material1
使用不对称系数,对于material2
使用对称系数;四个参数时对material1
和material2
都使用不对称系数。此时我们设置了3个参数,说明对material1
是不对称系数,对material2
是对称系数。 - frictionRotation字段中,第一节点设置成-0.965,第二节点设置成0.965
- bounce字段设置成0,对象会有效的停止在和他碰撞的表面,不会弹跳。
- forceDependentSlip字段可以设置4个参数。使用一个参数,则该系数适用于两个方向;两个参数时力相关滑移是不对称的,对两个material使用相同的系数;三个参数时对
material1
使用不对称系数,对于material2
使用对称系数;四个参数时对material1
和material2
都使用不对称系数。
通过使用上面的节点配置,可以实现麦克纳姆轮的运动方式
效果
结语
本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~
为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接
开源项目mecanum_robotsim正在更新中~~
✌Bye