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 string SFString rollSound "sounds/roll.waw" # any string SFString 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
评论(0)
您还未登录,请登录后发表或查看评论