Can't initialize effort_controllers/JointPositionController with non-global robot_description parameter
Here's an outline of my problem:
- I have multiple robots in Gazebo with different URDF descriptions. Each robot is pushed into a namespace (/robot1/...), and each frame id is pre-pended with a prefix (robot1_....). Consequently, I have no robot_description param in the global namespace.
- libgazebo_ros_control (running inside Gazebo) initializes ControllerManager. Gazebo runs in the global namespace.
effort_controllers/JointPositionController
(running inside Gazebo) callsurdf::Model::initParam
which does not respect the controller's constructed namespace, and executes asearchParam
in Gazebo's global namespace, which fails.
I can't figure out how to tell the controller to read the robot_description from robot1/robot_description
.
Furthermore, It's unclear to me why the controller is trying to read the URDF independently in the first place. Why doesn't it get it from the controller manager?
A guess, but: does the
robotNamespace
tag (in the urdf) influence this at all?@gvdhoorn: Good suggestion. I'm using it already to ensure that gazebo_ros_control creates the controllers in the correct interface. But the NodeHandle is not passed to urdf::Model, so it doesn't solve the problem.
I've filed an issue report here: https://github.com/ros-controls/ros_c...