If I command the base backwards 8cm using:
sim.move_by('base_translate', -0.08)
I expect the base to attempt to move backwards 8cm. If it encounters a wall 3cm into the move, it should, like the real robot, push back against the wall for the remaining 5cm, then stop. Instead, the sim will continue pushing back against the wall forever.
Since MuJoCo provides wheel-space velocity control, this sim builds two layers on top: 1) a base-frame velocity control interface (i.e. takes SE2 twist and converts to wheel-space commands), 2) a closed-loop position control interface. To close the loop, the position controller uses the robot's position in the world. This is why the sim pushes back against the wall forever; until the remaining 5cm are crossed, the position interface hasn't met its finish condition.
Using the robot's position in the world is privileged information, and unnecessary. Odom-frame wheel odometry should be calculated by integrating wheel-space deltas (this may already be happening in the code). Like the real robot, this odometry would not know about wheel slip, and wheel odometry would report 8cm motion after 5cm against the wall.
If I command the base backwards 8cm using:
I expect the base to attempt to move backwards 8cm. If it encounters a wall 3cm into the move, it should, like the real robot, push back against the wall for the remaining 5cm, then stop. Instead, the sim will continue pushing back against the wall forever.
Since MuJoCo provides wheel-space velocity control, this sim builds two layers on top: 1) a base-frame velocity control interface (i.e. takes SE2 twist and converts to wheel-space commands), 2) a closed-loop position control interface. To close the loop, the position controller uses the robot's position in the world. This is why the sim pushes back against the wall forever; until the remaining 5cm are crossed, the position interface hasn't met its finish condition.
Using the robot's position in the world is privileged information, and unnecessary. Odom-frame wheel odometry should be calculated by integrating wheel-space deltas (this may already be happening in the code). Like the real robot, this odometry would not know about wheel slip, and wheel odometry would report 8cm motion after 5cm against the wall.