I notice that you're using the default nav_stack provided by ROS for a robot with Ackermann steering. How well does it perform? Since it only supports holonomic/differential drive robots, I'm interested in knowing the performance of the Navigation stack with Ackermann Steering robots. From what I have researched we'll need like a local planner to optimize the trajectories at each instance to take into consideration the Ackermann dynamics.
Thank you.
Cheers,
Karan
linorobot_ackermann uses ROS's default global_planner for high level path planning and teb_local_planner as its local_planner which supports car-like steering kinematics. The local planner is instantiated as a plug-in from the launch file (navigate.launch) https://github.com/grassjelly/linorobot_ackermann/blob/master/launch/navigate.launch#L17. teb_local_planner has an option (https://github.com/grassjelly/linorobot_ackermann/blob/master/param/base_local_planner_params.yaml#L16) to use geometry_msgs/Twist which translates the linear velocity to move the robot forward/reverse and angular velocity - z to tell how much angle the steering wheel must turn.
If you look at the Teensy codes, it parses the velocities sent by navigation stack (the same method with the rest of the linorobot platform) except that the angular velocity is used to tell the servo how much angle it must turn
https://github.com/grassjelly/linorobot_ackermann/blob/master/arduino/firmware/src/lino_base_ackermann.ino#L234 .
Here are some useful links about the planner:
Main Wiki:
http://wiki.ros.org/teb_local_planner
Car-like planning:
http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots
Configuring the planner:
http://wiki.ros.org/teb_local_planner/Tutorials/Configure%20and%20run%20Robot%20Navigation
Hope these clear things up. Happy Building!
Cheers,
Juan