API review
NOTE: This is a preliminary brainstorming review conducted online
Proposer: Jonathan Bohren
Present at review:
- Jonathan Bohren
Question / concerns / comments
Enter your thoughts on the API and any questions / concerns you have here. Please sign your name. Anything you want to address in the API review should be marked down here before the start of the meeting.
Meeting agenda
Determine scope for a message type to capture the semantics of cartesian trajectories and streaming cartesian control in teleoperation.
Potential features include (in no particular order):
- Multiple end-effectors
- Variable impedance (stiffness/damping)
- Path tolerances
- Accelerations
- Combinations of joint-space and cartesian-space movements
- Nullspace posture
- Nullspace impedance
The previous formal review notes are here: robot_mechanism_controllers/Reviews/Cartesian Trajectory Proposal API Review
The initial thread on ros-users is here: http://lists.ros.org/lurker/thread/20130605.124118.361c6da3.en.html
Proposals
Willow Garage (2010)
Details here: robot_mechanism_controllers/Reviews/Cartesian Trajectory Proposal API Review
[CartesianTrajectoryGoal]
CartesianTrajectory trajectory
  Header header  # A stamp of 0 means "execute now"
  PoseStamped tool  # The frame which is being controlled
  string[] posture_joint_names
  CartesianTrajectoryPoint[] points
    duration time_from_start
    Pose pose
    Twist twist
    float64[] posture
  JointTrajectory posture  # For determining the redundancy
CartesianTolerance path_tolerance  # Tolerance for aborting the path
  float64 position
  float64 orientation  # Permitted angular error
  float64 velocity
  float64 angular_velocity
CartesianTolerance goal_tolerance  # Tolerance for when reaching the goal is considered successful
bool queue[CartesianTrajectoryResult] int32 error_code # 0 if successful CartesianTrajectoryPoint cartesian_state JointTrajectoryPoint joint_state Twist pose_error Twist twist_error CartesianTolerance path_tolerance # Current tolerance used for the path
[CartesianTrajectoryError] int32 SUCCESSFUL = 0 int32 ROOT_TRANSFORM_FAILED int32 TOOL_TRANSFORM_FAILED int32 PATH_TOLERANCE_VIOLATED int32 INVALID_POSTURE
Konrad Banachowicz
[CartesianTrajectoryGoal]
Header header  # A stamp of 0 means "execute now"
string[] effector_names
CartesianTrajectory[] trajectory
  Pose tool  # The frame (offset ?) which is being controlled or it can be treated as separate effector ? 
  CartesianTrajectoryPoint[] points
    duration time_from_start
    Pose pose
    Twist twist
CartesianImpedance[] impedance
    Pose center_of_compliance # or it can be treated as separate effector ? 
    TBD stiffness % cartesian stiffness 
    TBD damping % damping ratio
CartesianTolerance[] path_tolerance  # Tolerance for aborting the path
  float64 position
  float64 orientation  # Permitted angular error
  float64 velocity
  float64 angular_velocity
CartesianTolerance[] goal_tolerance  # Tolerance for when reaching the goal is considered successful
string[] joint_names
JointTrajectoryPoint[] posture  # For determining the redundancy
JointImpedance[] nullspace_impedance
  float64[] stiffness
  float64[] damping
Konrad Banachowicz 2
CartesianTrajectory
Express trajectory of frame target_frame_id in relation to frame header.frame_id .
Header header # stamp - trajectory start time, frame_id - trajectory reference frame string target_frame_id # target controlled frame CartesianTrajectoryPoint[] points duration time_from_start Pose pose Twist twist
CartesianImpedance
Parameters of spring-damper located between frame header.frame_id and frame target_frame_id.
Header header # stamp - trajectory start time, frame_id - spring-damper base frame 
string target_frame_id # spring-damper end frame
CartesianImpedancePoint[] points
  duration time_from_start
  CartesianStiffness stiffness
    Vector3 translational
    Vector3 rotational
  CartesianDamping damping
    Vector3 translational
    Vector3 rotational
CartesianConstraints
Constraint the relation between header.frame_id and target_frame_id.
Header header # stamp - time of constraint activation string target_frame_id duration time_from_start # duration of constraint activation TranslationConstraint translation OrientationConstraint orientation Twist twist Wrench wrench
ActionGoal
[CartesianTrajectoryGoal] CartesianTrajectory[] trajectory CartesianImpedance[] impedance CartesianConstraints[] path_constraints # Tolerance for aborting the path JointTrajectory[] posture # For determining the redundancy JointImpedance[] nullspace_impedance
Adolfo Rodriguez Tsouroukdissian
- +1 for adding Cartesian accelerations to the CartesianTrajectoryPoint message. 
- The list of potential features mentions "Multiple end-effectors". I'd like to see how this looks like. We also need to decide where to draw the line, because when controlling multiple end-effectors, you're more likely to also want partial constraint specifications (< 6dof of a frame, like following orientation only), which seems out of the scope of the current proposal. 
Konrad Banachowicz
The concept of multiple end-effectors is included in ActionGoal. We have multiple trajectories (CartesianTrajectory[] trajectory). It can express trajectories in general, it could be "end-effectors", "tool transforms", "center of complayance", "look at" frame for head ...
In my use-case the constraints are encoded in spatial springs between frames. I don't control position of the end-effector directly but by spatial springs between end-effector and an other frames.
Conclusion
Package status change mark change manifest)
 Action items that need to be taken. Action items that need to be taken.
 Major issues that need to be resolved Major issues that need to be resolved
