/// <summary>
 /// Moves the tip of hand to a position away from the specified position by the distance as specified in the tool direction. (Linear interpolation)
 /// </summary>
 /// <param name="positionNumber">Specify the destination position number in integer value. [1...999]</param>
 /// <param name="travelDistance">Specify the distance in tool direction from the specified position to the destination point. (Zero by default). [-3276,80...3276,70]</param>
 /// <param name="grab">Specify open or close state of the hand.</param>
 public void MoveToolStraight(uint positionNumber, double travelDistance = 0, GrabE grab = GrabE.Closed)
 {
     Port.Write($"MTS {positionNumber},{travelDistance},{GrabStateToString(grab)}");
 }
 /// <summary>
 /// Moves the hand tip to the specified position. (Joint interpolation)
 /// </summary>
 /// <param name="positionNumber">Specify the destination position number in integer value. [1..999]</param>
 /// <param name="grab">Specify hand state.</param>
 public void Move(uint positionNumber = 0, GrabE grab = GrabE.Open)
 {
     Port.Write($"MO {positionNumber},{GrabStateToString(grab)}");
 }
 /// <summary>
 /// Moves to specified position in circulat interpolation.
 /// </summary>
 /// <param name="positionNumber">Specify the destination position. [1...999]</param>
 /// <param name="grab">Specify open or close state of the hand.</param>
 public void MoveRA(uint positionNumber, GrabE grab)
 {
     Port.Write($"MRA {positionNumber},{GrabStateToString(grab)}");
 }
 private static string GrabStateToString(GrabE grab)
 {
     return(grab == GrabE.Open ? "O" : "C");
 }