The BodyPosition object applies a force on a BasePart such that it will maintain a constant position in the world. The Position property, not to be confused with BasePart.Position, controls the target world position. This is the translational counterpart to a BodyGyro. If you need further control on a force applied to an object, consider using a BodyForce or BodyThrust instead.
The strength of the force applied by this object is controlled by several factors, namely the distance to the goal position: the force is stronger when farther away from the goal. This is amplified by P (power). The present velocity will also dampen the force applied by this object, and this is amplified by D (dampening). The resulting force is then capped by MaxForce. Note the force applied on the part to achieve the goal position may vary on a per-axis basis.
The D property determines how much dampening will be applied to the force used toward reaching the goal Position. When the part approaches the goal position it needs to decelerate, otherwise it will move past the goal and have to stop and re-accelerate back toward the goal. This is often creates undesirable rubber-banding effect, so applying dampening using this property is how that effect is avoided. The higher this value is set, the greater the dampening curve becomes, or the slower the part will approach the goal position.
The MaxForce property determines the limit on the amount of force that may be applied on each axis in reaching the goal Position. If a part isn't moving, consider increasing this value (also check that it is not Anchored or attached to any anchored parts).
The P property determines how much power is used while applying force in order to reach the goal Position. The higher this value, the more power will be used and the faster it will be used. The force the BodyPosition exerts increases as the difference between the part's current position and the goal position increases. This property is multiplied to this force to either amplify or diminish it.