Capstone Project: Differential Drive UGV. How to use diff_drive_controller

Hi everybody,
Long time lurker, first time writing.
Sorry for the long post. Since I may have more questions in the future I figured I would write out a full description of our project so far, in case it may provide any assistance.

For my Computer Science Senior Design project we are creating an automated UGV with ROS support. It runs through two wheelchair motors, 2 caster wheels, a SICK LMS100 LiDAR, a Roboteq HDC2450 Motor Driver, and a Raspberry Pi as the controlling computer, with ROS-Kinetic.

We have an external PC on the same network that is handling the heavy computation. We are using the Hector-SLAM algorithm for localization and mapping. This SLAM algorithm is approximating and publishing our TF.

One big issue that is being fixed right now: This first implementation had no encoders. We are in the process of ordering encoders and we will be fixing them to the exposed rear shaft of the wheelchair motors. These will connect in directly to the motor driver.

All of our current code is located at http://github.com/cmcollander/ugv


Okay! So, I was able to write some quick ROS nodes to get motor values sent from a custom-made game controller to the wheels. It drives around great but we, of course, need to now add more automation and the ros-control and ros-navigation stacks look perfect for our use.

So it looks like the best bet for me is the diff_drive_controller but I’m having trouble understanding how to implement it. I found a guide that provided instructions into how to create a basic robot class that extends RobotHW. Is this still necessary if I decide to use the diff_drive_controller or will I be, effectively, creating my own controller if I decide to go this route? In the diff_drive_controller documentation I see that joint names are a required parameter. How are these joint names listed to the robot? How does the controller know how to communicate with my motor driver? I assume I still need to create this RobotHW extension but I don’t know exactly how to go about doing this. Also, is the diff_drive_controller a node that I run, once I get the RobotHW extension class running?

I’ve been reading alot lately and all of this is very new to me. I hope some of you can provide help to speed things up a little bit! I love ROS and have used it for robotic arms in the past, but creating my own mobile robot is a whole different venture.

Thanks in advance!