motor

package
v0.36.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 5, 2024 License: AGPL-3.0 Imports: 16 Imported by: 3

Documentation

Overview

Package motor contains a gRPC bases motor client

Package motor contains a struct representing optional motor properties

Package motor contains a gRPC based motor service server

Index

Constants

View Source
const SubtypeName = "motor"

SubtypeName is a constant that identifies the component resource API string "motor".

Variables

View Source
var API = resource.APINamespaceRDK.WithComponentType(SubtypeName)

API is a variable that identifies the component resource API.

Functions

func CheckSpeed added in v0.30.0

func CheckSpeed(rpm, max float64) (string, error)

CheckSpeed checks if the input rpm is too slow or fast and returns a warning and/or error.

func CreateStatus

func CreateStatus(ctx context.Context, m Motor) (*pb.Status, error)

CreateStatus creates a status from the motor.

func Named

func Named(name string) resource.Name

Named is a helper for getting the named Motor's typed resource name.

func NamesFromRobot

func NamesFromRobot(r robot.Robot) []string

NamesFromRobot is a helper for getting all motor names from the given Robot.

func NewControlParametersUnimplementedError added in v0.26.0

func NewControlParametersUnimplementedError() error

NewControlParametersUnimplementedError returns an error when a control parameters are unimplemented in the config being used of a controlledMotor.

func NewGoToUnsupportedError added in v0.2.8

func NewGoToUnsupportedError(motorName string) error

NewGoToUnsupportedError returns error when a motor is required to support GoTo feature.

func NewPropertyUnsupportedError added in v0.6.0

func NewPropertyUnsupportedError(prop Properties, motorName string) error

NewPropertyUnsupportedError returns an error representing the need for a motor to support a particular property.

func NewRPCServiceServer added in v0.2.36

func NewRPCServiceServer(coll resource.APIResourceCollection[Motor]) interface{}

NewRPCServiceServer constructs a motor gRPC service server. It is intentionally untyped to prevent use outside of tests.

func NewResetZeroPositionUnsupportedError

func NewResetZeroPositionUnsupportedError(motorName string) error

NewResetZeroPositionUnsupportedError returns a standard error for when a motor is required to support reseting the zero position.

func NewSetRPMUnsupportedError added in v0.29.0

func NewSetRPMUnsupportedError(motorName string) error

NewSetRPMUnsupportedError returns an error when a motor does not support SetRPM.

func NewZeroRPMError added in v0.1.4

func NewZeroRPMError() error

NewZeroRPMError returns an error representing a request to move a motor at zero speed (i.e., moving the motor without moving the motor).

func PropertiesToProtoResponse added in v0.6.0

func PropertiesToProtoResponse(
	props Properties,
) (*pb.GetPropertiesResponse, error)

PropertiesToProtoResponse takes a Properties struct (indicating whether the property is supported) and converts it to a GetPropertiesResponse.

Types

type Motor

type Motor interface {
	resource.Resource
	resource.Actuator

	// SetPower sets the percentage of power the motor should employ between -1 and 1.
	// Negative power corresponds to a backward direction of rotation.
	SetPower(ctx context.Context, powerPct float64, extra map[string]interface{}) error

	// GoFor instructs the motor to go in a specific direction for a specific amount of
	// revolutions at a given speed in revolutions per minute. Both the RPM and the revolutions
	// can be assigned negative values to move in a backwards direction. Note: if both are
	// negative the motor will spin in the forward direction.
	// If revolutions != 0, this will block until the number of revolutions has been completed or another operation comes in.
	// Deprecated: If revolutions is 0, this will run the motor at rpm indefinitely.
	GoFor(ctx context.Context, rpm, revolutions float64, extra map[string]interface{}) error

	// GoTo instructs the motor to go to a specific position (provided in revolutions from home/zero),
	// at a specific speed. Regardless of the directionality of the RPM this function will move the motor
	// towards the specified target/position.
	// This will block until the position has been reached.
	GoTo(ctx context.Context, rpm, positionRevolutions float64, extra map[string]interface{}) error

	// SetRPM instructs the motor to move at the specified RPM indefinitely.
	SetRPM(ctx context.Context, rpm float64, extra map[string]interface{}) error

	// Set an encoded motor's current position (+/- offset) to be the new zero (home) position.
	ResetZeroPosition(ctx context.Context, offset float64, extra map[string]interface{}) error

	// Position reports the position of an encoded motor based on its encoder. If it's not supported,
	// the returned data is undefined. The unit returned is the number of revolutions which is
	// intended to be fed back into calls of GoFor.
	Position(ctx context.Context, extra map[string]interface{}) (float64, error)

	// Properties returns whether or not the motor supports certain optional properties.
	Properties(ctx context.Context, extra map[string]interface{}) (Properties, error)

	// IsPowered returns whether or not the motor is currently on, and the percent power (between 0
	// and 1, if the motor is off then the percent power will be 0).
	IsPowered(ctx context.Context, extra map[string]interface{}) (bool, float64, error)
}

A Motor represents a physical motor connected to a board.

SetPower example:

myMotorComponent, err := motor.FromRobot(machine, "my_motor")
// Set the motor power to 40% forwards.
myMotorComponent.SetPower(context.Background(), 0.4, nil)

GoFor example:

myMotorComponent, err := motor.FromRobot(machine, "my_motor")
// Turn the motor 7.2 revolutions at 60 RPM.
myMotorComponent.GoFor(context.Background(), 60, 7.2, nil)

GoTo example:

// Turn the motor to 8.3 revolutions from home at 75 RPM.
myMotorComponent.GoTo(context.Background(), 75, 8.3, nil)

ResetZeroPosition example:

// Set the current position as the new home position with no offset.
myMotorComponent.ResetZeroPosition(context.Background(), 0.0, nil)

Position example:

// Get the current position of an encoded motor.
position, err := myMotorComponent.Position(context.Background(), nil)

// Log the position
logger.Info("Position:")
logger.Info(position)

Properties example:

// Return whether or not the motor supports certain optional features.
properties, err := myMotorComponent.Properties(context.Background(), nil)

// Log the properties.
logger.Info("Properties:")
logger.Info(properties)

IsPowered example:

// Check whether the motor is currently running.
powered, pct, err := myMotorComponent.IsPowered(context.Background(), nil)

logger.Info("Is powered?")
logger.Info(powered)
logger.Info("Power percent:")
logger.Info(pct)

func FromDependencies

func FromDependencies(deps resource.Dependencies, name string) (Motor, error)

FromDependencies is a helper for getting the named motor from a collection of dependencies.

func FromRobot

func FromRobot(r robot.Robot, name string) (Motor, error)

FromRobot is a helper for getting the named motor from the given Robot.

func NewClientFromConn

func NewClientFromConn(
	ctx context.Context,
	conn rpc.ClientConn,
	remoteName string,
	name resource.Name,
	logger logging.Logger,
) (Motor, error)

NewClientFromConn constructs a new Client from connection passed in.

type Properties added in v0.6.0

type Properties struct {
	PositionReporting bool
}

Properties is struct contaning the motor properties.

func ProtoFeaturesToProperties added in v0.6.0

func ProtoFeaturesToProperties(resp *pb.GetPropertiesResponse) Properties

ProtoFeaturesToProperties takes a GetPropertiesResponse and returns an equivalent Properties struct.

Directories

Path Synopsis
Package dimensionengineering contains implementations of the dimensionengineering motor controls
Package dimensionengineering contains implementations of the dimensionengineering motor controls
Package dmc4000 implements stepper motors behind a Galil DMC4000 series motor controller
Package dmc4000 implements stepper motors behind a Galil DMC4000 series motor controller
Package fake implements a fake motor.
Package fake implements a fake motor.
Package gpio implements a GPIO based motor.
Package gpio implements a GPIO based motor.
Package gpiostepper implements a GPIO based stepper motor
Package gpiostepper implements a GPIO based stepper motor
Package ezopmp is a motor driver for the hydrogarden pump
Package ezopmp is a motor driver for the hydrogarden pump
Package register registers all relevant motors
Package register registers all relevant motors
Package roboclaw is the driver for the roboclaw motor drivers NOTE: This implementation is experimental and incomplete.
Package roboclaw is the driver for the roboclaw motor drivers NOTE: This implementation is experimental and incomplete.
Package tmcstepper implements a TMC stepper motor.
Package tmcstepper implements a TMC stepper motor.
Package uln28byj implements a GPIO based stepper motor (model: 28byj-48) with uln2003 controler.
Package uln28byj implements a GPIO based stepper motor (model: 28byj-48) with uln2003 controler.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL