How to solve "Controller Spawner couldn't find the expected controller_manager ROS interface." warning?
Ubuntu version: 18.04.3 Ros version: Melodic
Hi. I am trying to control my robot model in rviz. I have achieved to control it by using sliders through "joint_state_publisher". However, now I want to control the joints by sending command through joint position controllers. This is my urdf file (I just show that in order to indicate my robot name):
<?xml version="1.0" ?>
<robot name="mrm_description" xmlns:xacro="http://www.ros.org/wiki/xacro">
.... (links, transmission and joints)
</robot>
When I try to launch my robot model in rviz using roslaunch it is launched successfully. However, the node named "controller_spawner" isn't initiated. When this section is reached it waits a little bit and then "Controller Spawner couldn't find the expected controller_manager ROS interface." The warning message:
INFO] [1582488295.560399]: Controller Spawner: Waiting for service controller_manager/load_controller
[WARN] [1582488325.855090]: Controller Spawner couldn't find the expected controller_manager ROS interface.
[controller_spawner-4] process has finished cleanly
My launch file: <launch>
<rosparam file="$(find mrm_description)/config/robotManipulator_control.yaml" command="load" />
<param name="robot_description" command="$(find xacro)/xacro '$(find mrm_description)/urdf/mrm.xacro'"/>
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mrm_description)/launch/config.rviz"/>
<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
output = "screen" args="
/mrm_description/joint_state_controller
/mrm_description/base_waist_joint_position_controller
/mrm_description/waist_forearm_joint_position_controller
/mrm_description/forearm_forearmRotation_joint_position_controller
/mrm_description/forearmRotation_wrist_joint_position_controller
/mrm_description/wrist_wristRotation_joint_position_controller
--shutdown-timeout 3"/>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
</launch>
I checked whether there is missing installation, but everything related with package is satisfied:
ros@ros-VirtualBox:~/simulation_ws$ rosdep check controller_manager
All system dependencies have been satisfied
I searched about the solution of the problem in Google and applied the suggestions. None of them worked. Additionally most of them were for Gazebo simulation which is not in my case. So, from here I really don't have any clue about what to do. Thank you for your help :)
Hi @Burhan,
Have you tested your set up in a non-virtual environment?. I see several possibilities:
Thank you for your suggestions.
And also I would like to ask whether you can test my code in order to see if it works for you. Anyway, I put the link to my project in github. Thank you :)
Link to the project
Hi @Burhan
I took a look at your package and I have some questions.
Are you trying to control a Real platform or simulated one?
Why you are implementing a hardware interface for ros control if you already have a set of well known controllers that are known to work properly.
Also check the description and the your TF because it seems that is not properly loaded.
I try to make connection between rviz model and the real robot. So, they can send each other the positions.
There is no problem with description file. If I include the joint_state_publisher node before rviz node, then everything will be fine. I don't know why, but it makes like that. I have solved the problem of "Controller Spawner couldn't find the expected controller_manager ROS interface." by implementing hardware_interface, but now spawner cannot load the joint controllers. I try to solve that. The warning is "Could not load controller 'joint_state_controller' because the type was not specified. Did you load the controller configuration on the parameter server". I try to find the cause of the problem. Thank you very much :)
Ok. Let me explain, If you load a set of controllers the manager will expect a specific interface. If you load the controllers and you do not have an interface provided by either Gazebo or a real robot the controller manager will not be able to load since there is no hardware interface to load things. Furthermore, the fact that the description is ok with the
joint_state_publisher
means that you need the proper interfaces loaded in your environment either by a simulation or a real platform. If you do this you will not need the JSP since the controllers will assume the join states publish task.Another thing that can be happening is the fact that you do not have installed in you machine the controllers you want to use. Since you are using the joint_state_publisher and effort controllers make sure you have installed those packages in your operational environment ...(more)
I understood. Thank you very much for your clarification. And in terms of git, yes. It is the first time I use github, so that is why I did like that.
Hello , @Burhan! Facing the exact same issue. Let me know if you have solved it ?
Ok resolved! Special thanks to @Weasfas for the detailed explanation. I had cloned the "mrm_decription" package and launched "spawn.launch" file. But Gazebo was not getting started by it. Issue was in the "spawn.launch" file. They have called "spawn_model" node without running "gazebo_ros " node as Construct IDE runs Gazebo in the beginning itself. Normal way is to "inlcude empty_world.launch" file before calling spawn_model node. Have a look here: Gazebo not starting on loading urdf . As, @Weasfas has clearly explained that controller_manager requires an interface provided by Gazebo or a real-robot to load controllers. So, here Gazebo itself was not getting started and thus controller manager was not able to load controllers. Solution: (worked for me) : Simply added <include file="$(find gazebo_ros)/launch/empty_world.launch"/>before <group ns="/mrm"> tag ! Hope It helps