DISCLAIMER: This repository has been set to public for the project deadline, once graded it will be set back to private.
Welcome to the PDM Project Group 38
Contributors: Chiel de Dood (4915607), Alexandre Ferreira (6282598), Martijn Habers (5064767), and Jason Kim (6163246)
This project focuses on designing a motion planning framework for drone navigation in static environments for warehouse sites. The goal is to ensure collision-free path planning for surveillance and infrastructure inspection. The Probabilistic Roadmap (PRM) algorithm is selected due to its scalability and efficiency in multi-query and high-dimensional spaces given the scenario. By extracting a top-view 2D and 3D occupancy map from a 3D Gazebo simulation environment and computing on 2D and 3D digital twin, our method provides offline collision-free path planning system.
By clicking on the image below, you can watch a video of the project in action.
This Project is structured to provide a framework for simulating and controlling drones within a 3D environment. It includes modules for path planning using Probabilistic Roadmaps (PRM), drone control logic, environment description, and world creation.
This package is responsible for path planning using the Probabilistic Roadmap (PRM) algorithm with Dijkstra path finding. It takes an occupancy map as input and computes an optimal path for the drone to navigate through the environment.
This package contains the necessary configurations and launch files to initialize the drone model within the Gazebo simulation environment. It sets up the simulation parameters and ensures the drone is ready for operation.
This package implements the control algorithms required for drone operation. It manages the drone's flight dynamics for stable and responsive control during simulation.
This package provides the Unified Robot Description Format (URDF) files that define the drone's physical and visual properties. It also includes the world description, detailing the simulated environment in which the drone operates.
This package is designed to convert 3D world models into occupancy maps. These maps are essential for path planning algorithms like PRM, as they represent the navigable and obstructed areas within the environment.
This is the 3D world environment file used in the simulation. It defines the layout, obstacles, and other elements present in the simulated environment for a realistic scenario for drone operation.
You must have the following installed on your system to run the simulation:
- ROS Humble
- Gazebo
- Python 3.8 or higher
To run the simulation, follow these steps:
git clone git@github.com:martijnhabers/PDM-project.git
cd PDM-project
colcon build
source install/setup.bash
Before running the simulation you must first generate the world's environment for gazebo. To do this, run the following command:
ros2 run world_creator creator
Next, generate an occupancy map from the world file:
python3 src/world_creator/test/WorldListExport.py
Next, generate the PRM path planning graph (offline):
python3 src/prm_navigation/prm_navigation/prm.py
First launch RViz:
rviz2 -d src/prm_navigation/prm_navigation/prm.rviz
Running the following command starts the prm_navigation node, and the visualization node which converts types for visualization in RViz:
ros2 launch prm_navigation prm.launch.py
Run the following command to start the drone simulation:
ros2 launch sjtu_drone_control drone_control_launch.py
Now you must give the drone a goal in 3D space to navigate to based on its current position. You can do this by publishing a Pose message to the 'goal_position' topic. For example:
ros2 topic pub -1 /goal_position geometry_msgs/msg/Pose "{position: {x: 0.0, y: 0.0, z: 0.0}}"