In it's current setup, we can run the Gazebo sim in either position control or torque control mode. The output of many of our controllers (and the input of the actual hardware) is a combination of the two; desired joint positions and velocities as well as feedforward torques. It would be nice to replicate this interface in our simulator as well.
Gazebo should expose a single topic called /spirit/gazebo/control_inputs of type MotorControlInput (defined in spirit_msgs). This will contain desired joint torques, joint positions, joint velocities as well as gains kp and kd for each joint. The controller should interpret these interpret these inputs according to the control law below and apply the resultant torques to each joint respectively.
Some good references on how effort_controllers work can be found here. What we want is effectively a new effort_controller called joint_feedforward_position_controller. Look over the other controllers in the referenced folder to see how they work with gazebo.