Hello,
I am currently working on a project that is taking an electric wheelchair base, and making it into a general mobile project platform. I am currently trying to get the differential drive controller working with with my gazebo simulation model, the urdf file that I have attached was generated from a solidworks model that I created/hacked together from a grabcad wheelchair that looked close to the one I am using. I had success creating (using) a simple effort position controller, and the velocity controller's JointVelocityController, which should let you know that I do have the basic ideas of adding the transmissions, plugins, and other <gazebo> tags </gazebo> to the urdf and I am beginning to think my problem is something very simple that I just cant seem to notice.
For the diff drive controller, I am not trying to do anything fancy (yet), just simply loading and running the controller through the use of basic rostopics and rosservices to be sure everything is loaded and interacting properly. I am using the example minimal yaml config file that is in the ros_controllers github and am just trying to simply get the controller to load manually using rosservice calls.
I would like to mention, I kept in all the random items that I have tried and commented out so you might be able to see a few of the things that I have tried, I started off trying to load the diff drive controller through a launch file, and after trying to launch all the controllers using a single yaml file, I eventually split them into the velocity controller, and diff drive controller yaml files that you see attached (there is much unneeded code in them).
When I attempt to load the diff_drive_controller using the rosservice call, I get these errors bellow, I also have attached a screenshot with my terminal displaying the rosparam list command, showing the "robot description" being in the param server, and I was able to get that parameter and display it also.
[ERROR] [1417338350.580091510, 1122.203000000]: Robot descripion couldn't be retrieved from param server.
[ERROR] [1417338350.580215810, 1122.203000000]: Failed to initialize the controller
[ERROR] [1417338350.580286582, 1122.203000000]: Initializing controller '/diff_drive_controller' failed
From everything I have read, and from all the different examples I have looked at (including the following; segbot, labrob, pr2) it seems like the plugin tag directly within the urdf should be sufficient to start using the cmd_vel topic to control the wheel chair model but that does not appear to be the case through my current experience. I have not really dissected my urdf file since the other controller's seem to function properly.
here are a couple specific questions that I have, in the diff_drive_controller_plugin.xml it says
"The DiffDriveController tracks velocity commands. It expects 2 VelocityJointInterface type of hardware interfaces"
is that referring to the joint information within the transmission element of the urdf?
<joint name="left_rear_wheel_joint">
<hardwareInterface>VelocityJointInterface</hardwareInterface>
</joint>
In
this post, you mention that that the diff drive controller is not a "node" is my assumption
correct, that the urdf plugin tag should be all that is needed to make the diff drive controller work? also your presentation did help clear a few things up about the general functionality of the ros_controllers package.
I read over this email/post a few times, I think it makes something close to a coherent thought (it is very late... early?) and sorry if it doesn't.
Any help or advice would be much appreciated please let me know if more information or clarification is needed.
Chris Crippen