samiamlabs / tricycle_controller

Other
3 stars 1 forks source link

Identify and fix problem with servo jerk limiter sometimes stopping truck to long when making low speed precision adjustments during move_base (teb) #2

Open samiamlabs opened 7 years ago

cosmicog commented 4 years ago

Hello, how can I reproduce this issue?

Based on my observations, this controller looks more compatible with ros navigation than ackermann_steering_controller which is for a different but a similar vehicle type.

samiamlabs commented 4 years ago

Hi!

I'm not exactly sure what you mean by "reproduce".

The controller was originally made for https://minireach.readthedocs.io/en/latest/demo.html I was not allowed to open source the main part of that project though.

I have a demo project that uses the controller here: https://github.com/samiamlabs/dyno/blob/master/dyno_control/launch/tricycle_controllers.launch

cosmicog commented 4 years ago

Generally reproducing a bug in software development means, supplying the causes for the bug and seeing the result that is reported in the issue. The developer team or the person (me) who is willing to try to fix it needs to see the bug in-the-act so can inspect it.

Instead of writing a new one, I switched to your controller while I was trying to tweak ackermann_steering_controller in order to use it on a tricycle robot. My bot also need to do precise movements at some point, but I'm not there yet, haven't started working on precise movements for approaching to e.g. charging dock. But in navigation, it works well.

samiamlabs commented 4 years ago

Sorry, that was not well formulated by me.

What I meant was that I did not understand exactly what you wanted help with. It is hard to just provide something like a system configuration and failing test like in a pure software project because this issue has to do with interaction with real servo hardware.

Was not sure if you had TEB fully working and configured with the controller, if you had a real or a simulated robot etc...

The problem was observed using the specific steer servo we used in the "minireach" project. Small changes in command rotational velocity will cause large changes in the desired steer position at low translational speeds. The fact that it takes time to get the steering to be in the right position for the desired combination is also a huge issue for TEB at low speeds.

The servo controller allowed for quite a lot of jerk in our case. This is good from a control perspective in terms of following the desired path but causes a lot of vibrations and noise on the real hardware. Using a low jerk limit for steer in the tricycle_controller in order to decrease noise in the servo seemed to cause the robot to stop completely sometimes.

Our use case for this was controlling forklifts, and we determined that TEB and this driver was probably not good enough for the precision required for positioning the forklift for loading and unloading operations in tight corridors in any real application. We were thinking about writing a custom mpc based alternative for TEB for this.

Btw, I'm no longer working on any projects where we use this driver, and pretty much all my new stuff is in ROS2...

cosmicog commented 4 years ago

Thanks for the detailed explanation. I'll use this controller for a while and then, I'll think about the situation. And also will migrate to ROS2. Right now, I just need a demo of a vehicle, I might not even need to make it go further than demoing it, so I'm okay with this issue for now. Got my point, thanks again.

samiamlabs commented 4 years ago

Great!