syntax = "proto2";
package gazebo.msgs;

/// \ingroup gazebo_msgs
/// \interface Joint
/// \brief Message for creating joint


import "axis.proto";
import "pose.proto";
import "sensor.proto";

message Joint
{

  message Gearbox
  {
    /// \brief Gearbox joint reference body link
    required string gearbox_reference_body = 1;

    /// \brief Gearbox ratio.
    required double gearbox_ratio = 2;
  }

  message Screw
  {
    /// \brief Screw joint thread pitch.
    required double thread_pitch = 1;
  }

  enum Type
  {
    REVOLUTE  = 1;
    REVOLUTE2 = 2;
    PRISMATIC = 3;
    UNIVERSAL = 4;
    BALL      = 5;
    SCREW     = 6;
    GEARBOX   = 7;
    FIXED     = 8;
  }

  required string name           = 1;
  optional uint32 id             = 2;
  repeated double angle          = 3;
  optional Type type             = 4;
  optional string parent         = 5;
  optional uint32 parent_id      = 6;
  optional string child          = 7;
  optional uint32 child_id       = 8;
  optional Pose pose             = 9;
  optional Axis axis1            = 10;
  optional Axis axis2            = 11;

  optional double cfm            = 12;
  optional double bounce         = 13;
  optional double velocity       = 14;
  optional double fudge_factor   = 15;
  optional double limit_cfm      = 16;
  optional double limit_erp      = 17;
  optional double suspension_cfm = 18;
  optional double suspension_erp = 19;

  optional Gearbox gearbox       = 20;
  optional Screw screw           = 21;

  repeated Sensor sensor         = 22;
}
