Added package for steer_drive_controller.#289
Added package for steer_drive_controller.#289MoriKen254 wants to merge 28 commits intoros-controls:kinetic-develfrom MoriKen254:add-steer-drive-controller-kinetic
Conversation
|
Hello, Thanks for the contribution! |
|
Thank you for your reply. Oh, excuse me. I didn't notice the similar one was already going on. Ok, I'm glad to join the effort of #280 with @vincentrou to solve current problems they are working on. Moreover, I'm gonna check and compare both packages and try to merge them into just one pull request. |
|
Amazing, thanks guys! Having the two controllers merged would be great! |
|
Thank for your response! Main difference between controller of #280 & one of #289I deeply looked inside of In conclusion, target application robot might be different each other. In detail
On the other hand, Actually, we had to use this configuration to apply it to our real car-like robot. When we used Gazebo, we resolved a closed link problem by creating a specific Thus, I came to believe a target robot of #280 & that of #289 might be different so I beg your suggestion. What would we do?Now, I think there are two ways to solve this issue.
The first one can reduce the number of controller packages while codes in the package might be complicated. The second one will increase the number of controller packages while codes in each package would be simpler. I feel this way makes cohesion higher because the target robot differs. Which would you think is better? Or is there another better solution? |
|
Thank you for this detailed comparison. There is two ways for me :
|
|
@vincentrou Your second idea looks great. It'll cover more various configurations. I wanna check one thing on that idea. As you said the real robot base controller can't take a rear speed and a steer position command. Maybe the controller must convert 2 rear speed and 2 front steering commands into one rear speed and one front steering respectively. The flow converting two commands into one seems somewhat strange for me. Then I have another idea. How about creating another class such like The following figure shows my current idea about modified class diagram.
Yes, this is NOT just merging #280 & #289 into one code but enables both rover-like function and car-like function to coexist with keeping separated each other. More than welcome comments. |
|
I am not sure it is a good idea to make multiple controller coexisting in the same code. My idea was to use the four_wheel_steering_controller as it is now for your car-like vehicle. |
|
@vincentrou Maybe we can share some super class like this. (will be different in exact) |
|
Thank you guys, you are awesome to have posted all the analysis. Please bear with us while we review your pull requests. |
| @@ -0,0 +1,79 @@ | |||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |||
| project(steer_drive_controller) | ||
|
|
||
| find_package(catkin REQUIRED COMPONENTS | ||
| controller_interface |
There was a problem hiding this comment.
please sort these dependencies
(in vim you can do it by selecting these lines in visual mode and :sort )
| INCLUDE_DIRS include | ||
| LIBRARIES ${PROJECT_NAME} | ||
| CATKIN_DEPENDS | ||
| roscpp |
There was a problem hiding this comment.
please sort these dependencies
(in vim you can do it by selecting these lines in visual mode and :sort )
|
|
||
| Controller for a steer drive mobile base. | ||
|
|
||
| ## 仕様 |
There was a problem hiding this comment.
Please use English, I'd love to learn Japanese but I feel this is not the right place or time for it :)
There was a problem hiding this comment.
Oops, I'm so sorry. I forgot to remove Japanese stuff from here. I added a link to the English ROS Wiki page currently :)
| * \brief The Odometry class handles odometry readings | ||
| * (2D pose and velocity with related timestamp) | ||
| */ | ||
| class Odometry |
There was a problem hiding this comment.
is this Odometry class different from the original one from the diff_drive_controller, if yes, how?
There was a problem hiding this comment.
Yes, it is. In odometry.cpp, update() method follows car-like steer drive kinematics.
| namespace steer_drive_controller | ||
| { | ||
|
|
||
| class SpeedLimiter |
There was a problem hiding this comment.
is this class different from the original one from the diff_drive_controller, if yes, how?
There was a problem hiding this comment.
No, it isn't. SpeedLimitter class is same as the diff_drive_controller's one.
There was a problem hiding this comment.
Fixed in MoriKen254@1c26e56 and MoriKen254@4f00fab.
| { | ||
| // constants | ||
| private: | ||
| enum INDX_WHEEL { |
There was a problem hiding this comment.
I couldn't find a reference to these indices anywhere. It's also bad practice to rely on positions in arrays.
There was a problem hiding this comment.
Ok, I'll remove INDX_WHEEL indices. Could you please which way is better to specify positions without arrays? I would like to follow a better way if possible.
There was a problem hiding this comment.
The general practice where you'd use arrays is when you have something global or semi-global storing all the data and then parts of the code "magically know" which index they need. A practice that limits the scope of functions is passing handles to data a given function needs to have access to. I'm not sure this directly applies here, as in this case the issue I raised was that there's simply no reference to those enum indices :)
| <license>BSD</license> | ||
|
|
||
| <url type="bugtracker">https://github.com/CIR-KIT/steer_drive_ros/issues</url> | ||
| <url type="repository">https://github.com/CIR-KIT/steer_drive_ros.git</url> |
|
A general but important note that I forgot to add: |
|
ping @MoriKen254 |
|
Thank you very much for pinging me. |
The test still fails for some reason, but at least it compiles now. Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
…we want to wait stateCB after waitForState find new states
…r topics than when we confirmed with waitForState function
…ing to 'enabled/disabled'
…drive-controller-kinetic
|
Sorry for making you wait for a long term (which is because of my very private reason though...). I've been thinking about this request during the term and now I'm ready to follow your review. Please give me another chance and let me resume this request to be completed. |
|
Fixed @bmagyar's #289 (comment) in MoriKen254@d89255a. |
|
@MoriKen254 Glad you are still around! Sorry to be a pain but could you please rebase this Pull Request on the latest |
|
Thank you for your response! Glad too still your welcoming this request. So sorry on the conflicts. it's my fault. I just actually wanted to merge into the newest ver. of kinetic-devel first... Please let me create another pull request to sum up all reviews here for now into a single commit safely and cleanly. I have got confused about the branch of mine... Sorry about that. Please let me know if this causes problems. |
|
merged #356 |





I developed steer_drive_controller for 4 wheel autonomous robot, which is made based on the concept of diff_drive_controller. Thus I would like this package to be one of official ros_controllers to contribute research on autonomous driving.
The following video shows demonstration of our robot with the controller on Gazebo. We actually succeeded in driving the real robot and won a competition in Japan. More information on the robot is described on http://wiki.ros.org/Robots/CIR-KIT-Unit03.
Detailed documentation is currently posted on http://wiki.ros.org/steer_drive_controller. Test codes passed on industrial_ci system on https://github.com/CIR-KIT/steer_drive_ros.
We also provide whole sample system where steer_drive_controller works properly. The important repository is http://wiki.ros.org/cirkit_unit03_apps. If you want to check functionality of the controller on Gazebo, please try the following commands on your PC.
(in your workspace) $ git clone -b kinetic-devel https://github.com/CIR-KIT-Unit03/cirkit_unit03_apps $ cd cirkit_unit03_apps $ sh install.shThe script resolves all dependencies properly. Then please launch the following autorun file after catkin_make.
Then the world shown on the Youtube video is supposed to appear and ready for navigation, which means 2d nav goal from RViz is available.
This is my first time for pull request so I might have made mistakes on license and author stuff. For instance, I just added my name as an author to each code I modified, which was originally from diff_drive_controller. I was not sure if this way was correct. This is my first trial to request so please let me know if I did a wrong thing.
I hope I could contribute to enhancement of ros_controller by this.
Best regards.