Project information


AGV control system using ROS2 & NAV2!

This project is a Proof-of-Concept and also my learning path of ROS2 & NAV2. It demonstrates a scenario that multiple AGVs unload/load packages parallelly. (Because of the CPU resource limitation, I only simulate one AGV). The system utilizes ROS2 and NAV2 framework to control the agv. The system has a traffic control node to handle the access at unloading zone. It also provides a simple web dashboard to see the current status.

Mapping

The first step for navigation is to create the map. I have created a factory simulation scene using Gazebo. And I used the TurtleBot3 Waffle Pi robot for simulation purposes. Then, I controlled the robot to travel around the scene. Thanks to the cartographer_node, which is the SLAM node used for online & real-time SLAM, the map will be generated by collecting sensor and imu data.

Localization

When a robot is placed into an environment, it does not know where it is. This is where Adaptive Monte Carlo Localization (AMCL) comes in. AMCL is a probabilistic localization module which estimates the position and orientation (i.e. Pose) of a robot in a given known map. By leveraging the nav2_amcl node, the robot will finally find(or believe) its position on the map.

The small green points on the map represent the probability of the robot at that position. It will gradually converge to the actual position where the robot is at, if you move the robot around to let it collect more sensor data.

Navigation

With the help of NAV2 stacks, robot navigation becomes an easy task. It plans the best route based on 2 maps, the local map, and the global map. The local map is generated by collecting real-time sensor data on the robot. Therefore the robot can avoid colliding with obstacles that are not recorded on the map. Another global map is generated based on the map previously made.

Bring all together!

The scene is to simulate multiple AGVs parallelly carrying packages from packaging stations to a single unloading zone. To control the access of the unloading zone, I have built a traffic control node to handle the requests from AGVs. When the traffic control node receives a request, it will check the availability of the unloading zone. If the zone is occupied, it will ask the AGV to wait and publish the permission after the zone is free.

To easily understand the status of the system, I built a web dashboard and use the ROS_WEB_BRIDGE to subscribe messages from the system.