Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RSDK-2259, et. al.] Remove RobotConstructor, clean up constraint descriptions #2190

Merged
merged 4 commits into from
Apr 10, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 6 additions & 28 deletions components/arm/arm.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import (
"go.viam.com/rdk/registry"
"go.viam.com/rdk/resource"
"go.viam.com/rdk/robot"
"go.viam.com/rdk/robot/framesystem"
"go.viam.com/rdk/spatialmath"
"go.viam.com/rdk/subtype"
"go.viam.com/rdk/utils"
Expand Down Expand Up @@ -342,7 +341,7 @@ func WrapWithReconfigurable(r interface{}, name resource.Name) (resource.Reconfi
}

// Move is a helper function to abstract away movement for general arms.
func Move(ctx context.Context, r robot.Robot, a Arm, dst spatialmath.Pose) error {
func Move(ctx context.Context, logger golog.Logger, a Arm, dst spatialmath.Pose) error {
joints, err := a.JointPositions(ctx, nil)
if err != nil {
return err
Expand All @@ -356,7 +355,7 @@ func Move(ctx context.Context, r robot.Robot, a Arm, dst spatialmath.Pose) error
return err
}

solution, err := Plan(ctx, r, a, dst)
solution, err := Plan(ctx, logger, a, dst)
if err != nil {
return err
}
Expand All @@ -365,34 +364,13 @@ func Move(ctx context.Context, r robot.Robot, a Arm, dst spatialmath.Pose) error

// Plan is a helper function to be called by arm implementations to abstract away the default procedure for using the
// motion planning library with arms.
func Plan(
ctx context.Context,
r robot.Robot,
a Arm,
dst spatialmath.Pose,
) ([][]referenceframe.Input, error) {
// build the framesystem
fs, err := framesystem.RobotFrameSystem(ctx, r, nil)
if err != nil {
return nil, err
}
armName := a.ModelFrame().Name()
destination := referenceframe.NewPoseInFrame(armName+"_origin", dst)

// PlanRobotMotion needs a frame system which contains the frame being solved for
if fs.Frame(armName) == nil {
armFrame := a.ModelFrame()
jp, err := a.JointPositions(ctx, nil)
if err != nil {
return nil, err
}
return motionplan.PlanFrameMotion(ctx, r.Logger(), dst, armFrame, armFrame.InputFromProtobuf(jp), defaultArmPlannerOptions, nil)
}
solutionMap, err := motionplan.PlanRobotMotion(ctx, destination, a.ModelFrame(), r, fs, nil, defaultArmPlannerOptions, nil)
func Plan(ctx context.Context, logger golog.Logger, a Arm, dst spatialmath.Pose) ([][]referenceframe.Input, error) {
armFrame := a.ModelFrame()
jp, err := a.JointPositions(ctx, nil)
if err != nil {
return nil, err
}
return motionplan.FrameStepsFromRobotPath(a.ModelFrame().Name(), solutionMap)
return motionplan.PlanFrameMotion(ctx, logger, dst, armFrame, armFrame.InputFromProtobuf(jp), defaultArmPlannerOptions, nil)
}

// GoToWaypoints will visit in turn each of the joint position waypoints generated by a motion planner.
Expand Down
25 changes: 4 additions & 21 deletions components/arm/arm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
"go.viam.com/rdk/referenceframe"
"go.viam.com/rdk/registry"
"go.viam.com/rdk/resource"
framesystemparts "go.viam.com/rdk/robot/framesystem/parts"
"go.viam.com/rdk/spatialmath"
"go.viam.com/rdk/testutils/inject"
rutils "go.viam.com/rdk/utils"
Expand Down Expand Up @@ -389,19 +388,7 @@ func TestOOBArm(t *testing.T) {
},
}

injectedRobot := setupInjectRobot()
injectedRobot.FrameSystemConfigFunc = func(
ctx context.Context,
additionalTransforms []*referenceframe.LinkInFrame,
) (framesystemparts.Parts, error) {
return framesystemparts.Parts{}, nil
}

injectedRobot.LoggerFunc = func() golog.Logger {
return logger
}

notReal, err := fake.NewArm(injectedRobot, cfg, logger)
notReal, err := fake.NewArm(cfg, logger)
test.That(t, err, test.ShouldBeNil)

injectedArm := &inject.Arm{
Expand Down Expand Up @@ -434,7 +421,7 @@ func TestOOBArm(t *testing.T) {

t.Run("Move fails when OOB", func(t *testing.T) {
pose = spatialmath.NewPoseFromPoint(r3.Vector{200, 200, 200})
err := arm.Move(context.Background(), &inject.Robot{}, injectedArm, pose)
err := arm.Move(context.Background(), logger, injectedArm, pose)
u := "cartesian movements are not allowed when arm joints are out of bounds"
v := "joint 0 input out of bounds, input 12.56637 needs to be within range [6.28319 -6.28319]"
s := strings.Join([]string{u, v}, ": ")
Expand Down Expand Up @@ -541,9 +528,7 @@ func TestXArm6Locations(t *testing.T) {
},
}

injectedRobot := setupInjectRobot()

notReal, err := fake.NewArm(injectedRobot, cfg, logger)
notReal, err := fake.NewArm(cfg, logger)
test.That(t, err, test.ShouldBeNil)

t.Run("home location check", func(t *testing.T) {
Expand Down Expand Up @@ -666,9 +651,7 @@ func TestUR5ELocations(t *testing.T) {
},
}

injectedRobot := setupInjectRobot()

notReal, err := fake.NewArm(injectedRobot, cfg, logger)
notReal, err := fake.NewArm(cfg, logger)
test.That(t, err, test.ShouldBeNil)

t.Run("home location check", func(t *testing.T) {
Expand Down
11 changes: 4 additions & 7 deletions components/arm/eva/eva.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ import (
"go.viam.com/rdk/referenceframe"
"go.viam.com/rdk/registry"
"go.viam.com/rdk/resource"
"go.viam.com/rdk/robot"
"go.viam.com/rdk/spatialmath"
)

Expand All @@ -48,8 +47,8 @@ var evamodeljson []byte

func init() {
registry.RegisterComponent(arm.Subtype, ModelName, registry.Component{
RobotConstructor: func(ctx context.Context, r robot.Robot, config config.Component, logger golog.Logger) (interface{}, error) {
return NewEva(ctx, r, config, logger)
Constructor: func(ctx context.Context, _ registry.Dependencies, config config.Component, logger golog.Logger) (interface{}, error) {
return NewEva(ctx, config, logger)
},
})

Expand Down Expand Up @@ -97,15 +96,14 @@ type eva struct {
moveLock *sync.Mutex
logger golog.Logger
model referenceframe.Model
robot robot.Robot

frameJSON []byte

opMgr operation.SingleOperationManager
}

// NewEva TODO.
func NewEva(ctx context.Context, r robot.Robot, cfg config.Component, logger golog.Logger) (arm.LocalArm, error) {
func NewEva(ctx context.Context, cfg config.Component, logger golog.Logger) (arm.LocalArm, error) {
model, err := Model(cfg.Name)
if err != nil {
return nil, err
Expand All @@ -118,7 +116,6 @@ func NewEva(ctx context.Context, r robot.Robot, cfg config.Component, logger gol
logger: logger,
moveLock: &sync.Mutex{},
model: model,
robot: r,
frameJSON: evamodeljson,
}

Expand Down Expand Up @@ -153,7 +150,7 @@ func (e *eva) EndPosition(ctx context.Context, extra map[string]interface{}) (sp
func (e *eva) MoveToPosition(ctx context.Context, pos spatialmath.Pose, extra map[string]interface{}) error {
ctx, done := e.opMgr.New(ctx)
defer done()
return arm.Move(ctx, e.robot, e, pos)
return arm.Move(ctx, e.logger, e, pos)
}

func (e *eva) MoveToJointPositions(ctx context.Context, newPositions *pb.JointPositions, extra map[string]interface{}) error {
Expand Down
11 changes: 4 additions & 7 deletions components/arm/fake/fake.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import (
"go.viam.com/rdk/referenceframe"
"go.viam.com/rdk/registry"
"go.viam.com/rdk/resource"
"go.viam.com/rdk/robot"
"go.viam.com/rdk/spatialmath"
)

Expand Down Expand Up @@ -68,8 +67,8 @@ func (config *AttrConfig) Validate(path string) error {

func init() {
registry.RegisterComponent(arm.Subtype, ModelName, registry.Component{
RobotConstructor: func(ctx context.Context, r robot.Robot, config config.Component, logger golog.Logger) (interface{}, error) {
return NewArm(r, config, logger)
Constructor: func(ctx context.Context, _ registry.Dependencies, config config.Component, logger golog.Logger) (interface{}, error) {
return NewArm(config, logger)
},
})

Expand All @@ -85,7 +84,7 @@ func init() {
}

// NewArm returns a new fake arm.
func NewArm(r robot.Robot, cfg config.Component, logger golog.Logger) (arm.LocalArm, error) {
func NewArm(cfg config.Component, logger golog.Logger) (arm.LocalArm, error) {
model, err := buildModel(cfg)
if err != nil {
return nil, err
Expand All @@ -96,7 +95,6 @@ func NewArm(r robot.Robot, cfg config.Component, logger golog.Logger) (arm.Local
joints: &pb.JointPositions{Values: make([]float64, len(model.DoF()))},
model: model,
logger: logger,
robot: r,
}, nil
}

Expand Down Expand Up @@ -131,7 +129,6 @@ type Arm struct {
CloseCount int
logger golog.Logger
model referenceframe.Model
robot robot.Robot
}

// UpdateAction helps hinting the reconfiguration process on what strategy to use given a modified config.
Expand Down Expand Up @@ -170,7 +167,7 @@ func (a *Arm) EndPosition(ctx context.Context, extra map[string]interface{}) (sp

// MoveToPosition sets the position.
func (a *Arm) MoveToPosition(ctx context.Context, pos spatialmath.Pose, extra map[string]interface{}) error {
return arm.Move(ctx, a.robot, a, pos)
return arm.Move(ctx, a.logger, a, pos)
}

// MoveToJointPositions sets the joints.
Expand Down
11 changes: 4 additions & 7 deletions components/arm/universalrobots/ur.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import (
"go.viam.com/rdk/referenceframe"
"go.viam.com/rdk/registry"
"go.viam.com/rdk/resource"
"go.viam.com/rdk/robot"
"go.viam.com/rdk/spatialmath"
"go.viam.com/rdk/utils"
)
Expand Down Expand Up @@ -62,8 +61,8 @@ var ur5modeljson []byte

func init() {
registry.RegisterComponent(arm.Subtype, ModelName, registry.Component{
RobotConstructor: func(ctx context.Context, r robot.Robot, config config.Component, logger golog.Logger) (interface{}, error) {
return URArmConnect(ctx, r, config, logger)
Constructor: func(ctx context.Context, _ registry.Dependencies, config config.Component, logger golog.Logger) (interface{}, error) {
return URArmConnect(ctx, config, logger)
},
})

Expand Down Expand Up @@ -97,7 +96,6 @@ type URArm struct {
activeBackgroundWorkers *sync.WaitGroup
model referenceframe.Model
opMgr operation.SingleOperationManager
robot robot.Robot
urHostedKinematics bool
inRemoteMode bool
dashboardConnection net.Conn
Expand Down Expand Up @@ -157,7 +155,7 @@ func (ua *URArm) Close(ctx context.Context) error {
}

// URArmConnect TODO.
func URArmConnect(ctx context.Context, r robot.Robot, cfg config.Component, logger golog.Logger) (arm.LocalArm, error) {
func URArmConnect(ctx context.Context, cfg config.Component, logger golog.Logger) (arm.LocalArm, error) {
// this is to speed up component build failure if the UR arm is not reachable
ctx, cancel := context.WithDeadline(ctx, time.Now().Add(5*time.Second))
defer cancel()
Expand Down Expand Up @@ -196,7 +194,6 @@ func URArmConnect(ctx context.Context, r robot.Robot, cfg config.Component, logg
logger: logger,
cancel: cancel,
model: model,
robot: r,
urHostedKinematics: attrs.ArmHostedKinematics,
inRemoteMode: false,
readRobotStateConnection: connReadRobotState,
Expand Down Expand Up @@ -360,7 +357,7 @@ func (ua *URArm) MoveToPosition(ctx context.Context, pos spatialmath.Pose, extra
if usingHostedKinematics {
return ua.moveWithURHostedKinematics(ctx, pos)
}
return arm.Move(ctx, ua.robot, ua, pos)
return arm.Move(ctx, ua.logger, ua, pos)
}

// MoveToJointPositions TODO.
Expand Down
4 changes: 1 addition & 3 deletions components/arm/universalrobots/ur5e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import (
"go.viam.com/rdk/referenceframe"
"go.viam.com/rdk/resource"
"go.viam.com/rdk/spatialmath"
"go.viam.com/rdk/testutils/inject"
"go.viam.com/rdk/utils"
)

Expand Down Expand Up @@ -344,8 +343,7 @@ func TestArmReconnection(t *testing.T) {
},
}

injectRobot := &inject.Robot{}
arm, err := URArmConnect(parentCtx, injectRobot, cfg, logger)
arm, err := URArmConnect(parentCtx, cfg, logger)

test.That(t, err, test.ShouldBeNil)
ua, ok := arm.(*URArm)
Expand Down
26 changes: 15 additions & 11 deletions components/arm/wrapper/wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

"github.com/edaniels/golog"
pb "go.viam.com/api/component/arm/v1"
"go.viam.com/utils"
goutils "go.viam.com/utils"

"go.viam.com/rdk/components/arm"
"go.viam.com/rdk/components/generic"
Expand All @@ -16,8 +16,8 @@ import (
"go.viam.com/rdk/referenceframe"
"go.viam.com/rdk/registry"
"go.viam.com/rdk/resource"
"go.viam.com/rdk/robot"
"go.viam.com/rdk/spatialmath"
"go.viam.com/rdk/utils"
)

// AttrConfig is used for converting config attributes.
Expand All @@ -32,7 +32,7 @@ var model = resource.NewDefaultModel("wrapper_arm")
func (cfg *AttrConfig) Validate(path string) ([]string, error) {
var deps []string
if cfg.ArmName == "" {
return nil, utils.NewConfigValidationFieldRequiredError(path, "arm-name")
return nil, goutils.NewConfigValidationFieldRequiredError(path, "arm-name")
}
if _, err := referenceframe.ModelFromPath(cfg.ModelFilePath, ""); err != nil {
return nil, err
Expand All @@ -43,8 +43,8 @@ func (cfg *AttrConfig) Validate(path string) ([]string, error) {

func init() {
registry.RegisterComponent(arm.Subtype, model, registry.Component{
RobotConstructor: func(ctx context.Context, r robot.Robot, config config.Component, logger golog.Logger) (interface{}, error) {
return NewWrapperArm(config, r, logger)
Constructor: func(ctx context.Context, deps registry.Dependencies, config config.Component, logger golog.Logger) (interface{}, error) {
return NewWrapperArm(config, deps, logger)
},
})

Expand All @@ -64,18 +64,23 @@ type Arm struct {
model referenceframe.Model
actual arm.Arm
logger golog.Logger
robot robot.Robot
opMgr operation.SingleOperationManager
}

// NewWrapperArm returns a wrapper component for another arm.
func NewWrapperArm(cfg config.Component, r robot.Robot, logger golog.Logger) (arm.LocalArm, error) {
modelPath := cfg.ConvertedAttributes.(*AttrConfig).ModelFilePath
func NewWrapperArm(cfg config.Component, deps registry.Dependencies, logger golog.Logger) (arm.LocalArm, error) {
attrs, ok := cfg.ConvertedAttributes.(*AttrConfig)
if !ok {
return nil, utils.NewUnexpectedTypeError(attrs, cfg.ConvertedAttributes)
}

modelPath := attrs.ModelFilePath
model, err := referenceframe.ModelFromPath(modelPath, cfg.Name)
if err != nil {
return nil, err
}
wrappedArm, err := arm.FromRobot(r, cfg.ConvertedAttributes.(*AttrConfig).ArmName)

wrappedArm, err := arm.FromDependencies(deps, attrs.ArmName)
if err != nil {
return nil, err
}
Expand All @@ -84,7 +89,6 @@ func NewWrapperArm(cfg config.Component, r robot.Robot, logger golog.Logger) (ar
model: model,
actual: wrappedArm,
logger: logger,
robot: r,
}, nil
}

Expand Down Expand Up @@ -130,7 +134,7 @@ func (wrapper *Arm) EndPosition(ctx context.Context, extra map[string]interface{
func (wrapper *Arm) MoveToPosition(ctx context.Context, pos spatialmath.Pose, extra map[string]interface{}) error {
ctx, done := wrapper.opMgr.New(ctx)
defer done()
return arm.Move(ctx, wrapper.robot, wrapper, pos)
return arm.Move(ctx, wrapper.logger, wrapper, pos)
}

// MoveToJointPositions sets the joints.
Expand Down
1 change: 0 additions & 1 deletion components/arm/wrapper/wrapper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ func TestUpdateAction(t *testing.T) {
model: model,
actual: &inject.Arm{},
logger: logger,
robot: &inject.Robot{},
}

// scenario where we do not reconfigure
Expand Down
Loading