Forklift Controller using Navigation Stack

Hello,

I am attempting to implement an autonomous forklift to perform transport operations in a warehouse environment, I want to use ROS1 Navigation Stack to perform path planning, but I cant seem to integrate this in the simulation.

I have setup the forklift with the necessary sensors, and am able to locate the robot in the static map as well as acquire the costmaps. When performing the path planning it seems like it is correct, but when it comes to integrate this movement in Isaac sim through the /cmd_vel I am missing something.

The robot is not successful in rotating well, I think it is due to the setup of the wheels, since its setup does not enable the use of a differential controller, but I could be wrong. Any ideas?

We have carter_warehouse_navigation.usd example which is similar to yours. Maybe you can check it out? You can find it by Window->Examples->Robotics Examples. Then you can open the Robotics Examples tab and go to ROS2->Navigation. It is the one called Carter.

Here is a tutorial to run ROS2 navigation stack in Isaac Sim. ROS2 Navigation — Isaac Sim Documentation

Yes, I have seen the Carter example, the problem is the Carter robot has a 4 wheel configuration which is simple to control via the Action Graph Nodes, in this forklift there is only one wheel, one swivel, and 4 rollers. So my struggle is really with this wheel configuration since I wasn’t able to control the robot’'s movement simply with the articulation controller.

With Ackerman controller it does not make sense since there isn’t even a pair of wheels, Differential controller the same and the Holonomic controller is not suitable since this robot does not enable holonomic movement. So whatś the proper way of converting an twist message into correct movement for this forklift asset?

I still have no idea how to implement the forklift_b asset. Any help would be great.

I am also attempting to implement the navigation stack on the forklift_c asset, since this as a more traditional 4 wheel configuration. To do so I added damping to the front wheel joints and utilized the following action graph with 2 differential controller for each pair of wheels(since the front and back wheels differ in radius ans wheel distance).

Front wheels:

Back wheels:

Action Graph:

base_local_planner.ymal:

TrajectoryPlannerROS:
  max_vel_x: 0.45
  min_vel_x: 0.1
  max_vel_theta: 3.0
  min_in_place_vel_theta: 0.4

  acc_lim_theta: 3.2
  acc_lim_x: 2.5
  acc_lim_y: 2.5


It appears the movement is somewhat successful, but I think there is still something I am missing to improve the reliability of the movement, perhaps the ROS base planner parameters or some parameter in Isaac Sim. This is particularly clear in the last part of the movement in which it just circles forever without being able to achieve the desired pose.

Any tips would be great.

Take a look at this. If you follow along this tutorial you should be able to setup forklift_c with ROS.

Thanks @suryaveer01. Yes I think that would help with forklift assets
Here is the tutorial for Isaac Sim 4.5 ROS 2 Ackermann Controller — Isaac Sim Documentation

Thanks for the feedback,

I was able to control the robot with the Ackermann controller, the problem was in my research I wasn’t able to find an implementation of the navigation stack for the Ackermann drive setup.

So I was able to control the robot by publishing AckermannDrive messages, but to implement an autonomous path planning, the ROS Navigation stack is not able to plan this setup, since the Ackermann drive setup is not able to perform angular movement without linear movement, so they can’t rotate in place.

Please correct me if I am wrong.

nav2 with this planner should give you good results. Some configurations to look at are wheelbase and turning radius.
Common forklifts that you can buy drive like cars. So there is no turning in place for them. This planner can account for that and pass commands based on the parameters. You should be able to find example configurations and tune from there.
Example: Nav2 Regulated Pure Pursuit set with Ackermann model skips driving maneuvers given by path planner · Issue #4757 · ros-navigation/navigation2 · GitHub

1 Like

I am not using ROS2 but will take a look into this.

Just to let you know that we will no longer support ROS. We will only support ROS2

1 Like

With ROS1 Teb Local planner with move base should be able to plan for ackermann vehicles with similar paths.

1 Like

Will look into this, thanks for all the hints.

Yes, I am aware of this but for now I still want to run in ROS