Interfaces
The testbed is written to comply with the ros_control
standard for RobotHW
. As such, the primary control interfaces are provided by controllers loaded from the ros_controllers
package, rather than interfaces hardcoded into the testbed_driver.
The driver does expose internal state information as well as reconfigurable variables and services.
In the ros_control
nomenclature, the testbed has six joints: yaw
, zaxis
, corexy_x
, corexy_y
, corexy_a
and corexy_b
. The first two are directly controlled, while the middle two are the X- and Y-directions of the the CoreXY system. They are mapped through a transmission to run two actuators: corexy_a
and corexy_b
. A simple 1:1 transmission is used to map these actuators back to joint space so the standard joint_state_controller
can publish their state, but those joints can’t be controlled directly.
The system supports a number of different control modes for each of the joints, but for each mode is only a direct passthrough to a control loop in the actuators themselves.
The available controllers are described in controller.yaml. The actual controller in use for each axis can be set by modifying the launch file, or using the service calls to the controller_manager
.
joint_state_controller
A joint_state_controller
publishes the current state of all of the joints.
Yaw
Two controllers are defined for the yaw motor:
yaw_position_controller
is aJointPositionController
. It listens to a topiccommand
(std_msgs::Float64) which is passed straight to the TMotor.yaw_velocity_controller
is aJointVelocityController
. It listens to a topic'command
(std_msgs::Float64) which is passed straight to the TMotor.
The control loop coefficients of the motors can be set by dynamic reconfigure.
CoreXY
The CoreXY system is slightly more complicated in that it can control two axes (X and Y), but requires coordinated action from two actators (which we call A and B).
In software, the two TMotors are modelled as two ros_control
“actuators”: corexy_a
and corexy_b
. Three “transmissions” are defined to map from the actuators to ros_control
joints:
The
CoreXYTransmission
is a differential transmission which encodes the dynamics of the CoreXY mechanism, and is the primary means of controlling the system.The
SimpleXYA
andSimpleXYB
transmissions are simple 1:1 transmissions which map the current state of each actuator as a “joint” forros_control
. Right now we don’t define any mechanisms for sending commands directly to the actuator through this transmission.
Two controllers are defined for the CoreXYT:
corexy_position_controller
is aJointGroupPositionController
and listens on a topiccommand
(std_msgs::Float64MultiArray). It maps the requested positions to thecorexy_a
andcorexy_b
motors and passes them directly to the TMotors.corexy_velocity_controller
is aJointGroupVelocityController
and listens on a topiccommand
(std_msgs::Float64MultiArray). It maps the requested velocity to thecorexy_a
andcorexy_b
motors and passes them directly to the TMotors.
The primary interfaces are managed by the controller_manager
in testbed_driver. The current controller.yaml loads two plugins:
A
joint_trajectory_controller
offers both an action and topic interface for controlling all four axes of the testbed.A
joint_state_controllers
which publishes the current state of all four axes of the testbed.
Z-axis
TBD…