With Project VIMAN, we aim to build a quadcopter capable of maneuvering in autonomous mode with the ability to detect people having high body temperature in a crowded area. This capability could be used to churn out potential CoVID-19 infected people from a crowd.
In order to incorporate autonomy into our UAV, the following milestones are to be achieved:
-
- Control via keyboard (Stage 0)
-
- SLAM Z (Stage 1)
-
- Hover at a set height (Stage 1.1)
-
- Hover with a set heading (Stage 1.2)
-
- Linear-Z mapping (Stage 1.3)
-
- Camera calibration (1.3.0)
-
- Color thresholding (1.3.1)
-
- Color identification (1.3.2)
-
- Rotation-Z mapping (Stage 1.4)
-
- Z mapping (Stage 1.5)
-
- SLAM X (Stage 2)
-
- Detect motion in X direction using camera (Stage 2.1)
-
- SLAM Y (Stage 3)
-
- Complete SLAM (Stage 4)
Note: Addition/deletion of sub-stages is dependent on the complexity of implementation of a stage.
- Altimeter
- IMU
- Camera
This repository contains two ROS packages:
- viman_control: Contains plugins to simulate the quadcopter, sensors, and ROS nodes to test and process vision and implement control algorithms.
- viman_visualize: Contains 3D models that build a Gazebo environment and the model of the quadcopter itself.
- viman_utility: Contains utility nodes and custom messages to ease the development and control of VIMAN.
Note: Make sure you have ROS'
cv_bridge
because OpenCV 3.2 with Python2.7 has been used for vision processing.
Step 1: Execute the following command in terminal to launch the Gazebo world with viman.
roslaunch viman_visualize gazebo-disp.launch on_rviz:=true
Step 2: Open another terminal and execute the following command to use keyboard keys to control the quadcopter.
rosrun viman_control viman_key_ctrl
Step 3: Play the simulation in Gazebo, place the focus of the terminal opened in step 2 and read the instructions provided by the ROS node.
Step 1: Execute the following command in terminal to launch the Gazebo world with viman.
roslaunch viman_visualize gazebo-disp.launch on_rviz:=true
Step 2: Open another terminal and execute the following command to use keyboard keys to control the quadcopter.
rosrun viman_control viman_sa
Step 3: Play the simulation in Gazebo, place the focus of the terminal opened in step 2 and read the instructions provided by the ROS node.
Step 1: Execute the following command in terminal to launch the Gazebo world with viman.
roslaunch viman_visualize gazebo-disp.launch nav:=1
Step 2: Open another terminal and then execute the following command
rosrun viman_control vm_z_linear_nav
Follow the instructions preseted by the ROS node.
Perform step 1 from 1.3 and then execute the following command in another terminal.
rosrun viman_control vm_z
Follow the instructions preseted by the ROS node.
The following is an image of the stack of cylinders that the UAV must map. The shown stack is used to complete stage 1.3.
The following GIF shows the partial cylinder stack (spawned via nav:=2
. The environment shown is used for SLAM Z)
rosrun viman_control vm_sensor_data
rosrun viman_control z_vision.py
rostopic echo /viman/color_id
rosrun viman_control visualize_map
Once the ROS node is run, it shows two plots:
Make use the following changes in frnt_vision.py
...
from vision_process import DisplayImg, Output # For HSV thresholding
...
...
...
th_processing = DisplayImg() # For HSV thresholding
...
...
Note: Parameter values in bold correspond to default value.
gazebo-disp.launch
:
on_rviz
: false/true | To show or not to show RViz displaying the front camera output.nav
: 0/1/2 | Choose type of navigation:- 0 - Empty world
- 1 - Additional stacked cylinders for only z linear navigation
- 2 - Parital cylinders stacked for SLAM Z navigation
- viman_vo : Repo containing python code related to visual odometry.
- Viman-Dead_Reckoning : Repo containing cpp code to obtain odometry via IMU.
- sjtu-drone repository for simulation base.
- This answer from stack-overflow for
getch
equivalent in Ubuntu. - dbscan-cpp repository for implementing DBSCAN algorithm to optimize map.
- matplotlib-cpp repository for
visualize_map
ROS node. - Google search