> SetAngle(...) causes a discrete jump without dynamics. I feel an underlying PID that uses SetForce(...) to try and achieve the desired joint position might make a better behavior here.

What we currently do is precisely that. If a joint has a position interface, we look for a PID specification in the ROS parameter server, and bail out if none is found. Here's the [PID loading](https://github.com/pal-robotics/reemc_standalone/blob/master/reemc_simulation/reemc_hardware_gazebo/src/reemc_hardware_gazebo.cpp#L177) and [use](https://github.com/pal-robotics/reemc_standalone/blob/master/reemc_simulation/reemc_hardware_gazebo/src/reemc_hardware_gazebo.cpp#L242) for a position-only robot. I originally intended to generalize and add this to gazebo_ros_control, but have not had the time. We use the PID class from ros_control instead of that from Gazebo because loading a controller configuration from file with the former is really simple.