Announcement: ros_control RobotStatus publisher

(as this is rather ROS-I specific I opted to post this here instead of over in the #ros-projects category)

Various robot drivers in ROS-Industrial periodically publish RobotStatus messages that encode controller/robot state (ie: e-stop active, is the robot in motion, etc). For drivers that build on-top of ros_control, publishing these messages is typically done by the hardware_interface part of the stack, but that always seemed like a work-around to me.

As I needed it for a ros_control-based driver recently, I decided to write a ros_control robot status controller that can be configured similar to the joint_state_controller and takes on the responsibility of publishing RobotStatus messages, so hardware_interface implementations don’t need to do that any more. This separates responsibilities and reduces complexity of hardware_interfaces.

The controller may be found here: gavanderhoorn/industrial_robot_status_controller and the readme explains how to integrate it into a hardware_interface for a specific robot and how to add it to a configuration. I’m hosting it on my personal account for now, but that may change in the future.

Note: in case you’re wondering: the industrial_robot_status_controller does not actually control anything. The name follows the (unfortunate) convention in ros_control to call everything that derives from controller_interface::Controller a (XYZ)Controller (such as the joint_state_controller which publishes JointState messages).

3 Likes

Nice! I have been running into the same problem, and solving it for our specific situation. Better to have a generic solution.

Small update: I’ve just released the package through the ROS buildfarm into ROS Kinetic.

Building from source should not longer be necessary (for users of ROS Kinetic).