There are several tasks for Amazon robot that needs to be solved in special order. They can be divided in subgroups as follows:
- Navigate to the given palette
- Identify that palette have been reached and lift it
- Navigate to the drop point on map with a palette on
- Leave the palette at a drop location
- Navigate either to initial location or chargning point
Right now, RViz is not used as all external commands are received by GUI. Code in MyAlgorithm then checks the validity of the received point and only sends command if:
- The point selected is close enough to palette which is then approximated in code
- The point is in drop sector
- The point is in charging sector
After the valid location is chosen, the path planning, global navigation, local navigation are all solved by the use of the
move_base package. Costmaps are configured for the minimum collision and maximum velocity, but further tunning may be required.
When selected point is palette in a Warehouse, the robot navigates to it, lifts it, then leaves it on drop sector. Afterwards, the robot navigates to the charging location where it waits for next commands.
The following requirements were satisfied in my prototype of the working solution as it can be seen in the following video:
However, still additional work is required. For example, moments where palette selected is locked by other palettes needs to handled. Additionally, it would be better if
dynamic_reconfigure package be added to handle movement with palette on. Finally, the last but not the least, I was stuck with the problem that current GUI implementation always sends empty
Twist commands to the motor, what hugely distorts movement of the robot. For now, I have disabled teleop and API commands for movement, because I was not able to find what part of code was exactly sending these commands.