Files
TIR_PROJ/protos/ShepherdDogMecanum360.proto
Johnny Fernandes 27c0f65722 Mecanum Webots via Supervisor kinematic injection
Replace the failing ODE-rolled mecanum chassis dynamics with a
Supervisor.setVelocity call that uses the gym mecanum forward
kinematics formula directly. Wheel motors still spin (visual);
chassis motion comes from the gym model so training and deployment
match by construction.

Results (seed=42, n=10 sheep): BC + RL mecanum pen 10/10 in both
field and field_round. n=5 mecanum cells still 0/5 due to tracker
phantoms anchored to wall corners under the 360° LiDAR — documented
in docs/status.md as the remaining gap.

Cleanup: drop deploy-time hacks (HERDING_HEADING_*, HERDING_OMEGA_CLAMP,
HERDING_TRACKER_*) that were workarounds for the old ODE chaos;
revert the proto inertiaMatrix, roller dampingConstant, and reduced
motor torque since they no longer carry load; refresh comments
around the mecanum config presets.
2026-05-18 22:46:37 +00:00

2069 lines
56 KiB
Protocol Buffer

#VRML_SIM R2025a utf8
# Shepherd Dog Robot - mecanum-wheeled base with dog character on top
# 4-wheel omnidirectional drive (front-left, front-right, rear-left, rear-right).
PROTO ShepherdDogMecanum360 [
field SFVec3f translation 0 0 0
field SFRotation rotation 0 1 0 0
field SFString name "ShepherdDog"
field SFString controller "shepherd_dog"
field MFString controllerArgs []
field SFString customData ""
field SFBool supervisor TRUE
field SFBool synchronization TRUE
]
{
Robot {
translation IS translation
rotation IS rotation
name IS name
controller IS controller
controllerArgs IS controllerArgs
customData IS customData
supervisor IS supervisor
synchronization IS synchronization
children [
# ========== CHASSIS / BASE ==========
DEF CHASSIS Transform {
translation 0 0 0.05
children [
Shape {
appearance DEF CHASSIS_APP PBRAppearance {
baseColor 0.2 0.2 0.2
roughness 0.6
metalness 0.3
}
geometry Box {
size 0.32 0.16 0.06
}
}
]
}
# Front slope
DEF CHASSIS_FRONT Transform {
translation 0.14 0 0.07
children [
Shape {
appearance USE CHASSIS_APP
geometry Box {
size 0.06 0.14 0.04
}
}
]
}
# Rear slope
DEF CHASSIS_REAR Transform {
translation -0.14 0 0.07
children [
Shape {
appearance USE CHASSIS_APP
geometry Box {
size 0.06 0.14 0.04
}
}
]
}
# ========== DOG BODY on top of chassis ==========
DEF BODY Transform {
translation 0 0 0.11
children [
Shape {
appearance DEF FUR_BROWN PBRAppearance {
baseColor 0.55 0.35 0.17
roughness 0.85
metalness 0.0
}
geometry Box {
size 0.30 0.16 0.08
}
}
]
}
# ========== CHEST ==========
DEF CHEST Transform {
translation 0.12 0 0.11
children [
Shape {
appearance DEF FUR_CREAM PBRAppearance {
baseColor 0.85 0.72 0.55
roughness 0.85
metalness 0.0
}
geometry Box {
size 0.08 0.18 0.08
}
}
]
}
# ========== HEAD ==========
DEF HEAD Transform {
translation 0.20 0 0.17
children [
Shape {
appearance USE FUR_BROWN
geometry Box {
size 0.10 0.12 0.09
}
}
]
}
# ========== SNOUT + LIDAR ==========
DEF SNOUT Transform {
translation 0.28 0 0.155
children [
Shape {
appearance USE FUR_CREAM
geometry Box {
size 0.08 0.07 0.05
}
}
# Nose
Transform {
translation 0.04 0 0.01
children [
Shape {
appearance PBRAppearance {
baseColor 0.1 0.1 0.1
roughness 0.4
}
geometry Sphere {
radius 0.013
subdivision 2
}
}
]
}
# Lidar full 360° FOV (mecanum 360 variant)
Lidar {
translation 0.05 0 0.01
name "lidar"
horizontalResolution 360
fieldOfView 6.28
numberOfLayers 1
minRange 0.10
maxRange 15.0
noise 0.005
}
]
}
# ========== LEFT EAR ==========
DEF LEFT_EAR HingeJoint {
jointParameters HingeJointParameters {
axis 0 0 1
anchor 0.19 0.055 0.21
}
device [
RotationalMotor {
name "left ear motor"
maxVelocity 10.0
minPosition -0.5
maxPosition 0.5
}
]
endPoint Solid {
translation 0.19 0.055 0.21
rotation 0 0 1 0.2
name "left ear"
children [
Shape {
appearance DEF FUR_DARK PBRAppearance {
baseColor 0.35 0.20 0.10
roughness 0.85
metalness 0.0
}
geometry Box {
size 0.035 0.025 0.06
}
}
]
boundingObject Box {
size 0.035 0.025 0.06
}
physics Physics {
density -1
mass 0.005
}
}
}
# ========== RIGHT EAR ==========
DEF RIGHT_EAR HingeJoint {
jointParameters HingeJointParameters {
axis 0 0 1
anchor 0.19 -0.055 0.21
}
device [
RotationalMotor {
name "right ear motor"
maxVelocity 10.0
minPosition -0.5
maxPosition 0.5
}
]
endPoint Solid {
translation 0.19 -0.055 0.21
rotation 0 0 -1 0.2
name "right ear"
children [
Shape {
appearance USE FUR_DARK
geometry Box {
size 0.035 0.025 0.06
}
}
]
boundingObject Box {
size 0.035 0.025 0.06
}
physics Physics {
density -1
mass 0.005
}
}
}
# ========== EYES ==========
DEF LEFT_EYE Transform {
translation 0.25 0.05 0.19
children [
Shape {
appearance PBRAppearance {
baseColor 0.95 0.95 0.95
roughness 0.3
}
geometry Sphere {
radius 0.016
subdivision 2
}
}
# Pupil
Transform {
translation 0.012 0 0.004
children [
Shape {
appearance PBRAppearance {
baseColor 0.1 0.1 0.1
roughness 0.2
}
geometry Sphere {
radius 0.009
subdivision 2
}
}
]
}
]
}
DEF RIGHT_EYE Transform {
translation 0.25 -0.05 0.19
children [
Shape {
appearance PBRAppearance {
baseColor 0.95 0.95 0.95
roughness 0.3
}
geometry Sphere {
radius 0.016
subdivision 2
}
}
# Pupil
Transform {
translation 0.012 0 0.004
children [
Shape {
appearance PBRAppearance {
baseColor 0.1 0.1 0.1
roughness 0.2
}
geometry Sphere {
radius 0.009
subdivision 2
}
}
]
}
]
}
# ========== COLLAR ==========
DEF COLLAR Transform {
translation 0.16 0 0.125
children [
Shape {
appearance PBRAppearance {
baseColor 0.8 0.1 0.1
roughness 0.5
}
geometry Cylinder {
height 0.02
radius 0.095
subdivision 16
}
}
# ID tag
Transform {
translation 0 0.10 0
rotation 1 0 0 1.5708
children [
Shape {
appearance PBRAppearance {
baseColor 0.75 0.75 0.0
metalness 0.8
roughness 0.2
}
geometry Cylinder {
height 0.003
radius 0.018
subdivision 8
}
}
]
}
]
}
# ========== TAIL (lidar inside tail tip ball) ==========
DEF TAIL HingeJoint {
jointParameters HingeJointParameters {
axis 0 1 0
anchor -0.15 0 0.11
}
device [
RotationalMotor {
name "tail motor"
maxVelocity 5.0
minPosition -1.0
maxPosition 1.0
}
]
endPoint Solid {
translation -0.17 0 0.13
name "tail solid"
children [
Shape {
appearance USE FUR_BROWN
geometry Capsule {
height 0.12
radius 0.013
top FALSE
}
}
# Tail tip ball
Transform {
translation 0 0 0.08
children [
Shape {
appearance PBRAppearance {
baseColor 0.2 0.2 0.2
roughness 0.3
metalness 0.6
}
geometry Sphere {
radius 0.028
subdivision 4
}
}
]
}
]
boundingObject Group {
children [
Capsule {
height 0.12
radius 0.013
}
Transform {
translation 0 0 0.08
children [
Sphere {
radius 0.028
}
]
}
]
}
physics Physics {
density -1
mass 0.08
}
}
}
# ========== AXLE ARMS (4 corners) ==========
DEF FRONT_RIGHT_AXLE Transform {
translation 0.14 -0.115 0.038
children [
Shape {
appearance PBRAppearance {
baseColor 0.5 0.5 0.5
roughness 0.3
metalness 0.8
}
geometry Box {
size 0.02 0.08 0.02
}
}
]
}
DEF FRONT_LEFT_AXLE Transform {
translation 0.14 0.115 0.038
children [
Shape {
appearance PBRAppearance {
baseColor 0.5 0.5 0.5
roughness 0.3
metalness 0.8
}
geometry Box {
size 0.02 0.08 0.02
}
}
]
}
DEF REAR_RIGHT_AXLE Transform {
translation -0.14 -0.115 0.038
children [
Shape {
appearance PBRAppearance {
baseColor 0.5 0.5 0.5
roughness 0.3
metalness 0.8
}
geometry Box {
size 0.02 0.08 0.02
}
}
]
}
DEF REAR_LEFT_AXLE Transform {
translation -0.14 0.115 0.038
children [
Shape {
appearance PBRAppearance {
baseColor 0.5 0.5 0.5
roughness 0.3
metalness 0.8
}
geometry Box {
size 0.02 0.08 0.02
}
}
]
}
# ========== FRONT RIGHT WHEEL ==========
DEF FRONT_RIGHT_WHEEL_JOINT HingeJoint {
jointParameters HingeJointParameters {
axis 0 1 0
anchor 0.14 -0.14 0.038
}
device [
RotationalMotor {
name "front right wheel motor"
maxVelocity 70.0
maxTorque 20.0
}
PositionSensor {
name "front right wheel sensor"
resolution 0.00628
}
]
endPoint Solid {
translation 0.14 -0.14 0.038
rotation 0 -1 0 1.570796
children [
# Visual hub only the rollers below provide ground contact.
Pose {
rotation 1 0 0 -1.5708
children [
Shape {
appearance PBRAppearance {
baseColor 0.5 0.5 0.5
roughness 0.3
metalness 0.7
}
geometry Cylinder {
height 0.018
radius 0.018000000000000002
subdivision 16
}
}
Shape {
appearance PBRAppearance {
baseColor 0.6 0.6 0.6
roughness 0.2
metalness 0.8
}
geometry Cylinder {
height 0.022
radius 0.008
subdivision 8
}
}
]
}
# Mecanum roller 1 (θ=0°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.707107 0.707107 0.000000
anchor 0.000000 0.000000 -0.031000
}
endPoint Solid {
translation 0.000000 0.000000 -0.031000
rotation 0.000000 0.000000 -1.000000 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front right roller 1"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 2 (θ=45°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.500000 0.707107 0.500000
anchor 0.021920 0.000000 -0.021920
}
endPoint Solid {
translation 0.021920 0.000000 -0.021920
rotation 0.707107 0.000000 -0.707107 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front right roller 2"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 3 (θ=90°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.000000 0.707107 0.707107
anchor 0.031000 0.000000 -0.000000
}
endPoint Solid {
translation 0.031000 0.000000 -0.000000
rotation 1.000000 0.000000 -0.000000 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front right roller 3"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 4 (θ=135°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.500000 0.707107 0.500000
anchor 0.021920 0.000000 0.021920
}
endPoint Solid {
translation 0.021920 0.000000 0.021920
rotation 0.707107 0.000000 0.707107 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front right roller 4"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 5 (θ=180°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.707107 0.707107 0.000000
anchor 0.000000 0.000000 0.031000
}
endPoint Solid {
translation 0.000000 0.000000 0.031000
rotation 0.000000 0.000000 1.000000 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front right roller 5"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 6 (θ=225°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.500000 0.707107 -0.500000
anchor -0.021920 0.000000 0.021920
}
endPoint Solid {
translation -0.021920 0.000000 0.021920
rotation -0.707107 0.000000 0.707107 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front right roller 6"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 7 (θ=270°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.000000 0.707107 -0.707107
anchor -0.031000 0.000000 0.000000
}
endPoint Solid {
translation -0.031000 0.000000 0.000000
rotation -1.000000 0.000000 0.000000 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front right roller 7"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 8 (θ=315°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.500000 0.707107 -0.500000
anchor -0.021920 0.000000 -0.021920
}
endPoint Solid {
translation -0.021920 0.000000 -0.021920
rotation -0.707107 0.000000 -0.707107 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front right roller 8"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
]
name "front right wheel"
boundingObject Pose {
rotation 1 0 0 -1.5708
children [
Cylinder {
height 0.022
radius 0.02
}
]
}
physics Physics {
density -1
mass 0.045
centerOfMass [
0 0 0
]
}
}
}
# ========== FRONT LEFT WHEEL ==========
DEF FRONT_LEFT_WHEEL_JOINT HingeJoint {
jointParameters HingeJointParameters {
axis 0 1 0
anchor 0.14 0.14 0.038
}
device [
RotationalMotor {
name "front left wheel motor"
maxVelocity 70.0
maxTorque 20.0
}
PositionSensor {
name "front left wheel sensor"
resolution 0.00628
}
]
endPoint Solid {
translation 0.14 0.14 0.038
rotation 0 -1 0 1.570796
children [
# Visual hub only the rollers below provide ground contact.
Pose {
rotation 1 0 0 -1.5708
children [
Shape {
appearance PBRAppearance {
baseColor 0.5 0.5 0.5
roughness 0.3
metalness 0.7
}
geometry Cylinder {
height 0.018
radius 0.018000000000000002
subdivision 16
}
}
Shape {
appearance PBRAppearance {
baseColor 0.6 0.6 0.6
roughness 0.2
metalness 0.8
}
geometry Cylinder {
height 0.022
radius 0.008
subdivision 8
}
}
]
}
# Mecanum roller 1 (θ=0°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.707107 -0.707107 0.000000
anchor 0.000000 0.000000 -0.031000
}
endPoint Solid {
translation 0.000000 0.000000 -0.031000
rotation 0.000000 0.000000 -1.000000 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front left roller 1"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 2 (θ=45°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.500000 -0.707107 0.500000
anchor 0.021920 0.000000 -0.021920
}
endPoint Solid {
translation 0.021920 0.000000 -0.021920
rotation 0.707107 0.000000 -0.707107 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front left roller 2"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 3 (θ=90°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.000000 -0.707107 0.707107
anchor 0.031000 0.000000 -0.000000
}
endPoint Solid {
translation 0.031000 0.000000 -0.000000
rotation 1.000000 0.000000 -0.000000 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front left roller 3"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 4 (θ=135°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.500000 -0.707107 0.500000
anchor 0.021920 0.000000 0.021920
}
endPoint Solid {
translation 0.021920 0.000000 0.021920
rotation 0.707107 0.000000 0.707107 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front left roller 4"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 5 (θ=180°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.707107 -0.707107 0.000000
anchor 0.000000 0.000000 0.031000
}
endPoint Solid {
translation 0.000000 0.000000 0.031000
rotation 0.000000 0.000000 1.000000 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front left roller 5"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 6 (θ=225°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.500000 -0.707107 -0.500000
anchor -0.021920 0.000000 0.021920
}
endPoint Solid {
translation -0.021920 0.000000 0.021920
rotation -0.707107 0.000000 0.707107 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front left roller 6"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 7 (θ=270°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.000000 -0.707107 -0.707107
anchor -0.031000 0.000000 0.000000
}
endPoint Solid {
translation -0.031000 0.000000 0.000000
rotation -1.000000 0.000000 0.000000 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front left roller 7"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 8 (θ=315°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.500000 -0.707107 -0.500000
anchor -0.021920 0.000000 -0.021920
}
endPoint Solid {
translation -0.021920 0.000000 -0.021920
rotation -0.707107 0.000000 -0.707107 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "front left roller 8"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
]
name "front left wheel"
boundingObject Pose {
rotation 1 0 0 -1.5708
children [
Cylinder {
height 0.022
radius 0.02
}
]
}
physics Physics {
density -1
mass 0.045
centerOfMass [
0 0 0
]
}
}
}
# ========== REAR RIGHT WHEEL ==========
DEF REAR_RIGHT_WHEEL_JOINT HingeJoint {
jointParameters HingeJointParameters {
axis 0 1 0
anchor -0.14 -0.14 0.038
}
device [
RotationalMotor {
name "rear right wheel motor"
maxVelocity 70.0
maxTorque 20.0
}
PositionSensor {
name "rear right wheel sensor"
resolution 0.00628
}
]
endPoint Solid {
translation -0.14 -0.14 0.038
rotation 0 -1 0 1.570796
children [
# Visual hub only the rollers below provide ground contact.
Pose {
rotation 1 0 0 -1.5708
children [
Shape {
appearance PBRAppearance {
baseColor 0.5 0.5 0.5
roughness 0.3
metalness 0.7
}
geometry Cylinder {
height 0.018
radius 0.018000000000000002
subdivision 16
}
}
Shape {
appearance PBRAppearance {
baseColor 0.6 0.6 0.6
roughness 0.2
metalness 0.8
}
geometry Cylinder {
height 0.022
radius 0.008
subdivision 8
}
}
]
}
# Mecanum roller 1 (θ=0°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.707107 -0.707107 0.000000
anchor 0.000000 0.000000 -0.031000
}
endPoint Solid {
translation 0.000000 0.000000 -0.031000
rotation 0.000000 0.000000 -1.000000 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear right roller 1"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 2 (θ=45°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.500000 -0.707107 0.500000
anchor 0.021920 0.000000 -0.021920
}
endPoint Solid {
translation 0.021920 0.000000 -0.021920
rotation 0.707107 0.000000 -0.707107 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear right roller 2"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 3 (θ=90°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.000000 -0.707107 0.707107
anchor 0.031000 0.000000 -0.000000
}
endPoint Solid {
translation 0.031000 0.000000 -0.000000
rotation 1.000000 0.000000 -0.000000 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear right roller 3"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 4 (θ=135°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.500000 -0.707107 0.500000
anchor 0.021920 0.000000 0.021920
}
endPoint Solid {
translation 0.021920 0.000000 0.021920
rotation 0.707107 0.000000 0.707107 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear right roller 4"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 5 (θ=180°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.707107 -0.707107 0.000000
anchor 0.000000 0.000000 0.031000
}
endPoint Solid {
translation 0.000000 0.000000 0.031000
rotation 0.000000 0.000000 1.000000 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear right roller 5"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 6 (θ=225°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.500000 -0.707107 -0.500000
anchor -0.021920 0.000000 0.021920
}
endPoint Solid {
translation -0.021920 0.000000 0.021920
rotation -0.707107 0.000000 0.707107 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear right roller 6"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 7 (θ=270°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.000000 -0.707107 -0.707107
anchor -0.031000 0.000000 0.000000
}
endPoint Solid {
translation -0.031000 0.000000 0.000000
rotation -1.000000 0.000000 0.000000 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear right roller 7"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 8 (θ=315°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.500000 -0.707107 -0.500000
anchor -0.021920 0.000000 -0.021920
}
endPoint Solid {
translation -0.021920 0.000000 -0.021920
rotation -0.707107 0.000000 -0.707107 2.356194
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear right roller 8"
contactMaterial "MecanumWheelB"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
]
name "rear right wheel"
boundingObject Pose {
rotation 1 0 0 -1.5708
children [
Cylinder {
height 0.022
radius 0.02
}
]
}
physics Physics {
density -1
mass 0.045
centerOfMass [
0 0 0
]
}
}
}
# ========== REAR LEFT WHEEL ==========
DEF REAR_LEFT_WHEEL_JOINT HingeJoint {
jointParameters HingeJointParameters {
axis 0 1 0
anchor -0.14 0.14 0.038
}
device [
RotationalMotor {
name "rear left wheel motor"
maxVelocity 70.0
maxTorque 20.0
}
PositionSensor {
name "rear left wheel sensor"
resolution 0.00628
}
]
endPoint Solid {
translation -0.14 0.14 0.038
rotation 0 -1 0 1.570796
children [
# Visual hub only the rollers below provide ground contact.
Pose {
rotation 1 0 0 -1.5708
children [
Shape {
appearance PBRAppearance {
baseColor 0.5 0.5 0.5
roughness 0.3
metalness 0.7
}
geometry Cylinder {
height 0.018
radius 0.018000000000000002
subdivision 16
}
}
Shape {
appearance PBRAppearance {
baseColor 0.6 0.6 0.6
roughness 0.2
metalness 0.8
}
geometry Cylinder {
height 0.022
radius 0.008
subdivision 8
}
}
]
}
# Mecanum roller 1 (θ=0°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.707107 0.707107 0.000000
anchor 0.000000 0.000000 -0.031000
}
endPoint Solid {
translation 0.000000 0.000000 -0.031000
rotation 0.000000 0.000000 -1.000000 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear left roller 1"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 2 (θ=45°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.500000 0.707107 0.500000
anchor 0.021920 0.000000 -0.021920
}
endPoint Solid {
translation 0.021920 0.000000 -0.021920
rotation 0.707107 0.000000 -0.707107 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear left roller 2"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 3 (θ=90°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.000000 0.707107 0.707107
anchor 0.031000 0.000000 -0.000000
}
endPoint Solid {
translation 0.031000 0.000000 -0.000000
rotation 1.000000 0.000000 -0.000000 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear left roller 3"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 4 (θ=135°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.500000 0.707107 0.500000
anchor 0.021920 0.000000 0.021920
}
endPoint Solid {
translation 0.021920 0.000000 0.021920
rotation 0.707107 0.000000 0.707107 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear left roller 4"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 5 (θ=180°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.707107 0.707107 0.000000
anchor 0.000000 0.000000 0.031000
}
endPoint Solid {
translation 0.000000 0.000000 0.031000
rotation 0.000000 0.000000 1.000000 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear left roller 5"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 6 (θ=225°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.500000 0.707107 -0.500000
anchor -0.021920 0.000000 0.021920
}
endPoint Solid {
translation -0.021920 0.000000 0.021920
rotation -0.707107 0.000000 0.707107 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear left roller 6"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 7 (θ=270°)
HingeJoint {
jointParameters HingeJointParameters {
axis -0.000000 0.707107 -0.707107
anchor -0.031000 0.000000 0.000000
}
endPoint Solid {
translation -0.031000 0.000000 0.000000
rotation -1.000000 0.000000 0.000000 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear left roller 7"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
# Mecanum roller 8 (θ=315°)
HingeJoint {
jointParameters HingeJointParameters {
axis 0.500000 0.707107 -0.500000
anchor -0.021920 0.000000 -0.021920
}
endPoint Solid {
translation -0.021920 0.000000 -0.021920
rotation -0.707107 0.000000 -0.707107 0.785398
children [
Shape {
appearance PBRAppearance {
baseColor 0.12 0.12 0.12
roughness 0.7
metalness 0.1
}
geometry Capsule {
height 0.02
radius 0.007
subdivision 8
}
}
]
name "rear left roller 8"
contactMaterial "MecanumWheelA"
boundingObject Capsule {
height 0.02
radius 0.007
subdivision 8
}
physics Physics {
density -1
mass 0.003
centerOfMass [
0 0 0
]
}
}
}
]
name "rear left wheel"
boundingObject Pose {
rotation 1 0 0 -1.5708
children [
Cylinder {
height 0.022
radius 0.02
}
]
}
physics Physics {
density -1
mass 0.045
centerOfMass [
0 0 0
]
}
}
}
# ========== IMU SENSORS ==========
Accelerometer {
translation 0 0 0.10
name "accelerometer"
}
Gyro {
translation 0 0 0.10
name "gyro"
}
Compass {
translation 0 0 0.10
name "compass"
}
# ========== GPS ==========
GPS {
translation 0 0 0.17
name "gps"
}
# ========== RECEIVER ==========
Receiver {
name "receiver"
channel 1
}
# ========== EMITTER ==========
Emitter {
name "emitter"
channel 1
range 50.0
}
]
# ========== BOUNDING OBJECT ==========
boundingObject Group {
children [
# Chassis box
Transform {
translation 0 0 0.05
children [
Box {
size 0.32 0.16 0.06
}
]
}
# Body box
Transform {
translation 0 0 0.11
children [
Box {
size 0.30 0.16 0.08
}
]
}
]
}
# ========== PHYSICS ==========
# Chassis dynamics are not exercised in herding runs the
# controller drives the body kinematically via Supervisor
# setVelocity (see drive_mecanum in controllers/shepherd_dog).
# Webots-derived inertia from the bounding box is sufficient.
physics Physics {
density -1
mass 5.0
centerOfMass [
0 0 0.03
]
}
}
}