-
Notifications
You must be signed in to change notification settings - Fork 332
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refactor to distinguish between wheel and steering joints (steering controller) #692
Comments
Hope it's not too late to open this conversation back up. I think these changes both make sense as @roncapat suggests:
My suggestion is to merge all models down to one controller which would result in
There would be 16 configurations in general (where some fall under diff_drive and perhaps those would want to be ignored or yet better integrated into this somehow 🤯), and if all 16 of those could use the same controller, I think it would be very elegant (at least from the user's perspective). I understand this will be somewhat of a massive undertaking, but I also think this will massively enhance the experience of any ros2_control user trying to set up a steering robot. @bmagyar @christophfroehlich @destogl, Could I ask for your thoughts? |
That seems very clean! Love the table for a comprehensive recap. |
Thanks for bringing this up again. My thoughts on that topic:
not directly related:
|
|
@roncapat is raising a fair point, and I think they should stay seperated, at least for now. My thinking was that if we are to use one controller for any kind of "steering" robot, then the code would have to figure out based on the values provided to the arguments, similar to the table, what setup to use. I thought if we are letting the code decide this, then we can eventually have a "mobile robot controller" where if no steering_wheels are specific, in the front nor the back, then the code would recognize this as a diff drive robot. I think it would be nice to have a unification of all mobile robots into one controller but this would need to get done in a way that would make it easier for the user and the developer, otherwise it doesn't make sense to make these changes. I think it is for now more urgent to just fix the controllers. |
Some thoughts:
Conclusion: we have to do this at little steps, not messing up taxonomy of different vehicles, but trying to find a coherent frame for each. |
Originally posted by @ARK3r in #1166 (comment) |
@ARK3r I had a similar idea by generalizing the library in terms of rows, but I never started writing a proposal for that.
rows:
- my_traction
- my_steering
setup:
- my_traction:
steering: ["row1_steering_joint"]
traction: []
wheel_track: nan
wheelbase: 0.0
- my_steering:
steering: []
traction: ["row2_traction_joint"]
wheel_track: nan
wheelbase: 1.0
|
I don't know the extra complexity involved in supporting skid-steering but the two examples I'm finding of a 3 row setup are the JPL open source rover, and that has only one non-steerable row, and on the other hand, a (more) accurate model of a semi-truck would require skid steering support.
I agree with this. At least until the
This looks like a clean way of representing the information |
Another question: How to deal with over-determined measurements from sensors? For example, two steering axes with steering angle sensors, but measuring a different turning radius?
|
In my experience, for example in ackermann, slow-turning wheels must follow fast-turning wheels. So in an Ackermann manouver, inner wheels steer angle depends on command, while outer wheels angle depends on the inner wheels position. Steers synchronization is a hard topic to tackle in a generalized manner, IIRC there are very few papers dealing with this problem. |
From the mechanical odometry perspective instead, all measurements (all wheels, all steers) shall be considered even if redundant, with some kind of optimization / error minimization technique. |
@christophfroehlich @roncapat my naif view is that all what we need is being able to define at configuration the center of rotation position over the wheelbase, the discance can be calculated too since wheels(inner and outer) should come along with the circle line, so triclye, bycle, and for wheels are a subset of that. Then also define what joints are traction and what joints are steering. About odometry agree about taking into account all of them if possible. |
Pre-requirement of #648
If you have a look for example at:
https://github.com/ros-controls/ros2_controllers/blob/master/ackermann_steering_controller/test/ackermann_steering_controller_params.yaml
you can see that
front_wheels_names
andrear_wheels_names
in fact might refer (depending on situation) to either a traction actuator or a steering actuator.Here:
ros2_controllers/steering_controllers_library/src/steering_controllers_library.cpp
Lines 280 to 316 in 76b1ce7
a distinction is then made depending on
front_steering
param (and linked to #648, I should introduce here somehowall_wheel_drive
parameter).It feels to me that otherwise introducing additional implicit conventions in combination of new flags / number of passed joints and their interpretation as wheels or steers will complicate even more the
steering_controller
package...Semantically, we have no enforcement at configuration level of what is "wheel" and what is "steer". I propose to add
front_steer_names
andrear_steer_names
, and refactor the code in support of both #648 and #526 (which I am also involved in).The text was updated successfully, but these errors were encountered: