I've a model that represents a serial manipulator, with hydraulic actuators. I've modelled the actuation of the joints in two ways:
- one using a hydraulic actuator model that is calculated every call to update() in my plugin. It gets joint velocity from the gazebo model, a valve setting from a ros topic and outputs a torque which is applied to the joint. and
- Simply applying the valve setting as a velocity directly to the joint using joint::SetVelocity(). ensuring that joint::SetMaxForce() is a non-zero (and quite large) value of 10000.
However when my valve setting is zero, a particular joint in the arm always seems to drift regardless of method. Now this would be realistic if the joint were truly undriven, however if I set my joint velocity to zero, it would help if it stayed zero (within the bounds of the SetMaxForce() parameter). I cant seem to find a method to set the joint to static as this would accurately model counterbalance valves with zero leakage, but it doesn't seem to be implemented yet.My preference is for an open loop solution to this problem to replicate the real world.
Any ideas or workarounds?
Post score: 0
Comment by hsu on 2013-09-09:
if the valve setting is zero (closed) with zero leakage, can you model the joint as if it's being held in place by a very stiff spring?
Comment by PMilani on 2013-09-09:
Okay I've implemented a spring to be evaluated when the valve is zero. The current hold angle is updated every time the valve is not zero and acts as a reference. The spring constant is large 1E9 Nm/rad, and is the same across all joints. By implementing this every joint has the same "actuator" dynamics but it is only joint 5 that has a problem of drift. This seems strange as in a serial manipulator, it is not the most heavily loaded. Previous joints should exhibit similar problems but do not.