.nova_ws/
└── src/
├── nova_nav/
│ ├── config/param
│ │ ├── base_local_planner_params.yaml
│ │ ├── costmap_common_params.yaml
│ │ ├── dwa_local_planner_params.yaml
│ │ ├── global_costmap_params.yaml
│ │ ├── global_planner_params.yaml
│ │ ├── local_costmap_params.yaml
│ │ └── move_base_params.yaml
│ ├── launch/
│ │ ├── amcl.launch
│ │ ├── gmapping.launch
│ │ ├── move_base.launch
│ │ └── navigation.launch
│ ├── maps/
│ │ ├── final_map.pgm
│ │ └── final_map.yaml
│ ├── CMakeLists.txt
│ └── package.xml
├── nova_slam/
│ ├── launch/
│ │ ├── amcl.launch
│ │ └── gmapping.launch
│ ├── CMakeLists.txt
│ └── package.xml
├── nova_gazebo/
│ ├── launch/
│ │ ├── gazebo.launch
│ │ └── rviz.launch
│ ├── world/
│ │ └── arche.world
│ ├── CMakeLists.txt
│ └── package.xml
├── nova_description/
│ ├── launch/
│ │ └── rviz.launch
│ ├── meshes/
│ │ ├── MecanumLeft.stl
│ │ ├── MecanumRight.stl
│ │ ├── Raspberry_pi_4_case.stl
│ │ ├── Raspberry_pi_4.stl
│ │ ├── Robot_base.stl
│ │ └── rplidar.dae
│ ├── rviz_config/
│ │ ├── main.rviz
│ │ ├── nav.rviz
│ ├── urdf/
│ │ ├── color_gazebo
│ │ ├── color.xacro
│ │ ├── nova_gazebo.xacro
│ │ ├── nova.gazebo
│ │ └── nova.urdf.xacro
│ ├── image/
│ │ ├── AMCL.png
│ │ ├── DWA.png
│ │ ├── DWA2.png
│ │ ├── frames.png
│ │ ├── global_costmap.png
│ │ ├── local_costmap.png
│ │ ├── map.png
│ │ ├── path.png
│ │ ├── robot_gazebo.png
│ │ ├── robot_rviz.png
│ │ └── rviz_gazebo.png
│ ├── CMakeLists.txt
│ └── package.xml
├── CMakeLists.txt
└── README.md
The goal of this project is to program a robot that can take the map generated earlier, localize itself in that map, and navigate the robot to pick up and drop off virtual object. Here is a list of steps undertaken to accomplish that goal:
- Build a simulated world in Gazebo building editor.
- Build a map of the environment using gmapping.
- Use Adaptive Monte Carlo Localisation (AMCL) to detect the robot position within the known map.
- Use the ROS move_base library to plot a path to a target pose and navigate to it.
The mobile robot begins by driving around and scanning the area using a lidar to generate a static map of the environment. With this map in hand, it utilizes odometry and laser data to determine its position through adaptive Monte Carlo Localization (AMCL). When given a navigation goal, the robot plans its path using Dijkstra's algorithm and then navigates to the specified goal using DWA as a local planner.
The project consists of the following parts:
- A Gazebo world and a mobile robot.
- ROS packages: map_server, amcl, move_base, slam-gmapping and teleop_twist_keyboard.
- ROS (noetic), Gazebo on Linux
- CMake & g++/gcc, C++11
- Install some dependencies
sudo apt-get update && sudo apt-get upgrade -ysudo apt-get install ros-noetic-map-serversudo apt-get install ros-noetic-amclsudo apt-get install ros-noetic-move-basesudo apt-get install ros-noetic-slam-gmapping- Clone the project into your workspace
git clone https://github.com/Ahmed-Magdi1/Nova_Robot.git
cd Nova_Robot- Build the project
catkin_make
source devel/setup.bash- Simulate Robot in Gazebo
roslaunch nova_gazebo gazebo.launch- SLAM gmapping to perform SLAM and generate a map:
roslaunch nova_nav gmapping.launch- Navigation
roslaunch nova_nav navigation.launchSet a 2D Nav Goal in RViz to command the robot to a target position.






