PPL API Reference |
|
---|
Public Member Functions | |
Disabled Functions | |
Regular copy/move is not allowed because there can only be one controller per robot, and it must be constructed with the robot pointer present. | |
ControllerMethod (const ControllerMethod &)=delete | |
ControllerMethod (ControllerMethod &&)=delete | |
ControllerMethod & | operator= (const ControllerMethod &)=delete |
ControllerMethod & | operator= (ControllerMethod &&)=delete |
Interface | |
virtual Control | operator() (const Cfg &_current, const Cfg &_target, const double _dt) |
virtual Control | GetRandomControl (const Cfg &_current, const double _dt) const noexcept |
ControlSet * | GetControlSet () noexcept |
void | SetControlSet (ControlSet *const _c) noexcept |
Protected Member Functions | |
Control Selection | |
virtual std::vector< double > | ComputeDesiredForce (const Cfg &_current, const Cfg &_target, const double _dt)=0 |
virtual Control | ComputeNearestControl (const Cfg &_current, std::vector< double > &&_force) |
virtual Control | ComputeNearestContinuousControl (const Cfg &_current, std::vector< double > &&_force) |
virtual Control | ComputeNearestDiscreteControl (const Cfg &_current, std::vector< double > &&_force) |
Protected Attributes | |
Internal State | |
Robot *const | m_robot |
The owning robot object. | |
ControlSet * | m_controls {nullptr} |
The discrete controls, if any. | |
bool | m_debug {false} |
Show debug messages? | |
Construction | |
ControllerMethod (Robot *const _r) | |
ControllerMethod (Robot *const _r, XMLNode &_node) | |
ControllerMethod (Robot *const _r, const ControllerMethod &_c) | |
virtual std::unique_ptr< ControllerMethod > | Clone (Robot *const _r) const =0 |
virtual | ~ControllerMethod () |
static std::unique_ptr< ControllerMethod > | Factory (Robot *const _r, XMLNode &_node) |
Controllers determine the best control needed to move a robot from one configuration to another. They require the standard Cfg as the planning space representation because that's what we can support in simulation.
@TODO Implement simultaneous use of controls from more than one actuator.
ControllerMethod::ControllerMethod | ( | Robot *const | _r | ) |
Construct a controller for a given robot.
_r | The robot to control. |
Construct a controller for a given robot from an XML node.
_r | The robot to control. |
_node | The XML node to read parameters from. |
ControllerMethod::ControllerMethod | ( | Robot *const | _r, |
const ControllerMethod & | _c | ||
) |
Copy a controller for another robot.
_r | The destination robot. |
_c | The controller to copy. |
|
static |
Create a dynamically-allocated controller from an XML node.
_r | The robot to control. |
_node | The XML node to read parameters from. |
|
pure virtual |
Create a copy of this controller for another robot. This is provided so that we can copy controllers without knowing their derived type.
_r | The robot receiving the cloned controller. |
Implemented in ICreateController, CarlikeNeedleController, MatlabNeedleController, PIDFeedback, and SimpleController.
|
virtual |
Find the best available control to steer a robot from a starting configuration to a target configuration.
_current | The current configuration. |
_target | The target configuration. |
_dt | The timestep length. |
Reimplemented in PIDFeedback, and MatlabNeedleController.
|
virtualnoexcept |
Find a random control.
_current | The current configuration. |
_dt | The timestep length. |
Reimplemented in CarlikeNeedleController, and MatlabNeedleController.
|
noexcept |
Get the discrete set of controls that this controller can use, if any.
|
noexcept |
Set a discrete set of controls for this controller to use. This limits the controller to a subset of all possible controls accepted by a robot's actuators.
_c | The control set to use. |
|
protectedpure virtual |
Compute the desired generalized force (or velocity) in the robot's local frame to move from the current position to the target.
_current | The current configuration. |
_target | The target configuration. |
_dt | The timestep length. |
Implemented in CarlikeNeedleController, ICreateController, PIDFeedback, SimpleController, and MatlabNeedleController.
|
protectedvirtual |
Compute the control that produces the closest force to the ideal.
_current | The current configuration. |
_force | The desired force in the robot's local frame. |
|
protectedvirtual |
Compute the continuous control that produces the closest force to the ideal.
_current | The current configuration. |
_force | The desired force in the robot's local frame. |
Reimplemented in CarlikeNeedleController.
|
protectedvirtual |
Compute the discrete control that produces the closest force to the ideal.
_current | The current configuration. |
_force | The desired force in the robot's local frame. |