(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_interface
s.
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).