[Documentation] [TitleIndex] [WordIndex


A base class that implements the common Actuator Array interface. This base class handles the communication with ROS and parses the robot description URDF for relevant information about the controlled joints. A custom driver that adheres to the Actuator Array protocol can be created by implementing just a few functions.

ROS Nodes


The actuator_array_driver is actually a base class and not a node itself. However, the base class implements the following ROS API, so all derived nodes will also implement this API. Further, all nodes in the actuator_array stack assume this API.

Subscribed Topics

command (sensor_msgs/JointState)

Published Topics

joint_states (sensor_msgs/JointState)


stop (std_srvs/Empty)

home (std_srvs/Empty)


robot_description_parameter (string, default: robot_description)

joints (string)

C++ Interface

For a complete listing of all functions, see the C++ API reference. The actuator_array_driver driver is a base class for generating that custom drivers that interact with chains of r/c-type servos with minimal effort. By uses this base class, much of the ROS interface code is handled automatically and interoperability with the other nodes in the actuator_array stack is guaranteed.

The base class is templated on a JOINT structure. If no additional data is needed, the provided JointProperties can be used as the template argument. If additional information needs to be stored on a per-joint basis, then the JointProperties class can be used as a base for a custom JOINT structure.

Joint Properties

The standard JointProperties class contains the following entries. Additional entries can be created by deriving a custom JointProperties class using this as a base. This custom JOINT structure would then be provided as a template argument to the actuator_array_driver.

Required Functions

Because the specifics of the hardware to be controlled will vary between applications, the base class provides hooks for the end-user to implement the actual code nessisary to control the actuators. A default, empty implementation of each of these functions exist in case certain functionality is not requird.

bool init_actuator_(const std::string& joint_name, JOINT& joint_properties,         XmlRpc::XmlRpcValue& joint_data)

bool read_(ros::Time ts = ros::Time::now())

bool command_()

bool stop_()

bool home_()

Provided Convenience Functions

void parse_urdf(const ros::NodeHandle& node)

void update_joint_from_urdf(const std::string& joint_name, JOINT& joint_properties)

void parse_actuator_list(const ros::NodeHandle& node)

void advertise_and_subscribe(ros::NodeHandle& node)

void init()

2024-07-13 12:37