Navigation system of the retail service robot for 2024 NTU Robotics final project.
You may find the project demo video on YouTube.
In addition to running in the real-world, the project can also be run in the Gazebo simulation environment.
where it receives simulated sensor data from the Gazebo simulator.
-
This project uses Docker to simplify the setup of the environment. If you don't have Docker installed, please follow the instructions from Install Docker Engine to install Docker on your system.
-
Clone this repository and its submodules and change to the project directory:
git clone --recurse-submodules https://github.com/QuantumSpawner/robotics_project cd robotics_project -
Set up a Docker environment by:
docker compose up -d
-
Attach a shell to the Docker container by:
docker exec -it robotics-ros bash -
Build and source the workspace:
cd ~/ws catkin_make source devel/setup.bash
roslaunch robotics robotics.launchroslaunch robotics simulation.launchWe use Scout Mini as our platform and a laptop as the main computer. The robot uses a Hokuyo lidar, a webcam, and an IMU along with the built-in odometry from the Scout Mini to perceive the environment.
The navigation system is based on the ROS navigation stack, consisting of four main parts:
During development, we discovered that only relying on the Scout Mini’s odometry data is not accurate enough owing to the high wheel slippage of the robot in the indoor environment, especially when the robot is turning. Hence, in order to improve the accuracy of the robot’s
pose estimation, we utilized robot_localization ROS package to implement the EKF for localization.
By fusing an additional inertial measurement unit (IMU) that provides accurate orientation data with the odometry data that provides relative accurate translation data, the EKF can provide localization data that is accurate in both orientation and translation.
The ROS package slam_toolbox is selected for the SLAM algorithm over the gmapping package ubiquitous in ROS 1 projects. The slam_toolbox package can also be used as a localizer without requiring additional packages such as amcl provided by the navigation stack that is found not suitable for our inaccurate odometry system during testing, which is required by the gmapping package in order to localize the robot in the map.
The shopping scene is first mapped and stored using slam_toolbox as shown in the figure above, which is used to localize the robot for navigation tasks.
The ROS package global_planner provided by the navigation stack is used for path planning to generate a path from the current robot pose to the goal pose. The global_planner package is based on the Dijkstra algorithm to generate paths that are collision-free based on the map generated by the SLAM system.
The globally accurate localization data from the SLAM is used as references for the global planner to generate a path that is accurate relative to the map.
The ROS package dwa_local_planner provided by the navigation stack is used for local controller to generate velocity commands for the robot to follow the path generated by the global planner. The dwa_local_planner package is based on the dynamic window approach (DWA) algorithm to generate velocity commands that are collision-free based on the lidar data.
The globally accurate localization data from the SLAM is not suitable for the high-frequency local controller as the localization data has lower update frequency and jumps between estimates. Hence the higher-frequency and smooth pose estimates from the EKF are used as references for the local controller to generate velocity commands.




