Move robot in grid

Hi everyone :slight_smile:

I've spent some time now working on a prototype for robot path planning inside a dynamic grid (obstacles move as well as other robots), something like Amazon Kiva project.

The current situation is that I have a single robot car controlled by NodeMCU with 2 DC motors equipped with the IR encoders and I've got an IMU (6 DOF). Each wheel is controlled via a PID controller, the steering is done via another PID too. The relative position has many problems, I cannot get the exact traveled distance as expected, when rotating the car, the error increases, and more importantly the heading drifts.

I've many solutions in my mind and I hope if you can guide me...
First of all, I would like to optimize the relative positioning as far as I can, then move to the inevitable absolute position.

Regarding the relative positioning:

  1. Does adding magnetometer to the IMU help maintaining the heading? like a lot of people are saying that it doesn't work well when it's near motors and other electronics!
  2. I've not used omni wheels before, but will they be helpful to avoid rotations error? (we move in 4 directions only, currently, we move forward and rotate left/right only, but the ultimate goal is to move around freely in 4 directions) or does their configuration increase the drifting error due to friction?
  3. If I use stepper motors, would it make any difference? as I think the slipping will be there (thus the number of steps doesn't equal the traveled distance).

Regarding the absolute positioning:
I'm really open to all your suggestions but here's the situation and the suggestions I've seen so far.
The obstacles (racks on the warehouse floor) moves around (this assumption is based on the fact that the robot hopefully can lift a rack and move it to the warehouse gate, and yeah hopefully). This means no fixed walls to use ultrasonic as a measure for the error.
There're other cars on the map.
We only move forward only and rotate right/left, and move one step each time (discrete movement).

Now the solutions I've seen so far are:

  1. Use camera to detect QR codes (stickers on the ground on each grid cell) -> apply image analysis -> move toward the QR code. Now I think that NodeMCU won't be able to handle this, thus I think of using a dedicated camera (maybe an old Android phone), that takes photos, sends them to the server, the server processes the photo and responds to the car with the direction to align itself to the grid cell.
    However, I think it's going to be harder than what I say. What do you think? Is this going to be overkill?

  2. Use top view camera that watches the whole grid (this prototype has a small grid, however, the algorithm should be scalable to handle input from multiple cameras) and connected directly to the server, the server then identifies each car, guides it to the proper position and align it in the grid cell.

  3. Each grid cell borders are colored black, then I attach two color sensors close to the ground, one on each side of the car, when both detect the line, I know that I'm halfway between 2 grid centers, eliminating (or reducing) the slipping error that prevents me from getting the right traveled distance.
    I was wondering, given the timings that these two sensors detect the black line, and the reference angle that I'm following, and the angles at each moment the sensors detect the black line, can I use this info to correct the my reference angle drifting?

  4. I've not done the line follower car before, but if I employed the same technique (each grid cell has a cross line "+" such that neighboring cells form a continuous line), would this cause problem at the intersections? I really don't like this solution but I think it may be the most robust one, given that there's a reference line all the time. If I'm missing something about this idea please let me know.

If you have any other suggestions or other related links I would be happy if you tell me, thank you :slight_smile:

  1. Does adding magnetometer to the IMU help maintaining the heading? like a lot of people are saying that it doesn't work well when it's near motors and other electronics!

A magnetometer can be a great help, but MUST be calibrated in the final environment to be useful. Many people don't bother to do that, and simply give up when they discover that it doesn't work. Follow this tutorial to learn how to calibrate a magnetometer.

  1. Omni wheels don't work well with encoders.
  1. If I use stepper motors, would it make any difference?

No. Wheel slip is a major problem.

For accurate indoor localization, you could consider Pozyx.