Skip to content

base controller 2 doesn't reach command velocity according to odometry #392

@ichumuh

Description

@ichumuh

When I send a twist to the pr2 base, it doesn't reach the commanded velocity, according to odometry.
pr2_doesnt_reach_cmd_vel
This does not happen when we put the pr2 on blocks, so that the wheels are in the air. So I suspect that it is related to friction caused by the pr2's weight.
We thought that such a steady state error should be fixable by increasing the I term for the wheels in the base controller 2 config file. But all it did was making the caster wheels behave weirdly. So I looked into the code and I think the pid controller is not used properly.

double command = wheel_pid_controllers_[i].computeCommand(
- wheel_caster_steer_component.linear.x/base_kinematics_.wheel_[i].wheel_radius_,
base_kinematics_.wheel_[i].wheel_speed_cmd_ - filtered_wheel_velocity_[i],
ros::Duration(dT));

Here the new command for the wheels gets computed. The first term is error, where the velocity needed to help with the steering is put. And for error dot, the velocity difference is put, needed to make the robot drive forward. But that means that P and I only affect the steering and D affects how the pr2 drives forward. That seems very weird to me, is there a reason for this? It makes it impossible to get rid of the steady state error through tuning of the pid controller.

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