@@ -23,6 +23,7 @@ type client struct {
2323 resource.TriviallyCloseable
2424 name string
2525 client pb.ArmServiceClient
26+ model referenceframe.Model
2627 logger logging.Logger
2728}
2829
@@ -35,12 +36,24 @@ func NewClientFromConn(
3536 logger logging.Logger ,
3637) (Arm , error ) {
3738 pbClient := pb .NewArmServiceClient (conn )
38- return & client {
39+ c := & client {
3940 Named : name .PrependRemote (remoteName ).AsNamed (),
4041 name : name .ShortName (),
4142 client : pbClient ,
4243 logger : logger ,
43- }, nil
44+ }
45+ clientFrame , err := c .Kinematics (ctx )
46+ if err != nil {
47+ logger .CWarnw (
48+ ctx ,
49+ "error getting model for arm; making the assumption that joints are revolute and that their positions are specified in degrees" ,
50+ "err" ,
51+ err ,
52+ )
53+ } else {
54+ c .model = clientFrame
55+ }
56+ return c , nil
4457}
4558
4659func (c * client ) EndPosition (ctx context.Context , extra map [string ]interface {}) (spatialmath.Pose , error ) {
@@ -79,12 +92,7 @@ func (c *client) MoveToJointPositions(ctx context.Context, positions []reference
7992 if err != nil {
8093 return err
8194 }
82- m , err := c .Kinematics (ctx )
83- if err != nil {
84- return err
85- }
86-
87- jp , err := referenceframe .JointPositionsFromInputs (m , positions )
95+ jp , err := referenceframe .JointPositionsFromInputs (c .model , positions )
8896 if err != nil {
8997 return err
9098 }
@@ -110,12 +118,8 @@ func (c *client) MoveThroughJointPositions(
110118 c .logger .Warnf ("%s MoveThroughJointPositions: position argument is nil" , c .name )
111119 }
112120 allJPs := make ([]* pb.JointPositions , 0 , len (positions ))
113- m , err := c .Kinematics (ctx )
114- if err != nil {
115- return err
116- }
117121 for _ , position := range positions {
118- jp , err := referenceframe .JointPositionsFromInputs (m , position )
122+ jp , err := referenceframe .JointPositionsFromInputs (c . model , position )
119123 if err != nil {
120124 return err
121125 }
@@ -145,11 +149,7 @@ func (c *client) JointPositions(ctx context.Context, extra map[string]interface{
145149 if err != nil {
146150 return nil , err
147151 }
148- m , err := c .Kinematics (ctx )
149- if err != nil {
150- return nil , err
151- }
152- return referenceframe .InputsFromJointPositions (m , resp .Positions )
152+ return referenceframe .InputsFromJointPositions (c .model , resp .Positions )
153153}
154154
155155func (c * client ) Stop (ctx context.Context , extra map [string ]interface {}) error {
0 commit comments