Skip to content

Base position control shouldn't use privileged information #93

Description

@hello-binit

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions