Development space for the MARS Lab Quadcopter research project at Ontario Tech University, by Noor Khabbaz. All work was done in ROS1 Noetic.
This project had two main goals when it comes to UAV-UGV collaboration:
- Robot localization: Enable UAV to estimate UGV relative poses via their ArUco Markers.
- Obstalce mapping: Enable UAV to map obstacles using a pointcloud method to be shared with UGVs for avoidance.
- UGVs are marked with ArUco markers, each with a unique ID.
- UAV performs autonomous flight with downwards facing camera.
- Upon the detection of an ArUco marker, the pose of the UGV is estimated.
- A transform is published to this UGVs starting pose, and the map merging parameters are set.
- UAV autonomously surveys the environment for obstacles with downwards-facing depth camera which produces a pointcloud.
- pointcloud is processed to isolate obstacle points.
- obstacle pointcloud is published to ROS server.
- UGVs add obstacle pointcloud to costmap for avoidance.
For detailed information about both of these methods, please read my thesis
- UAV (this project used a custom-built quadcopter running PX4 autopilot)
- Downwards-facing depth camera able to produce a pointcloud (Intel Realsense D435i with corresponding ROS package)
- UGV(s) (Turtlebot3 Burgers were used)
- UGV 2D LiDAR
- Aruco_detect library
- Open3D library and open3d_conversions for ROS.
Download this package and add it to your catkin_ws/src folder. Perform catkin build (or catkin make).
- Roscore
- Get UAV running with position estimate
- Start UAV camera and ArUco detection topic
roslaunch mars-quadcopter turtle_tf_broadcaster.launch
Now when the UAV camera spots ArUco markers, it will create a pose estimate.
- Roscore
- Get UAV running with position estimate
- Publish UAV raw pointcloud topic
rosrun mars-quadcopter my_o3d_store_points
Now the isolated obstacles will be published to a topic called outlier_cloud
To get the UGVs to avoid the obstacles in this pointlcoud, their costmap parameter files must be updated. For the turtlebot this is under turtlebot3_navigation/param/costmap_common_params.yaml
. Here, the obstacles plugin should be used, and a new obstacle observation source should be added, using the outlier_cloud points.
- ArUco marker ID numbers in turtle_tf_broadcaster_1_avg.py line 106.
- Depending on how many UGVs you are using. Versions of the above codes with the suffix _3 and for 3 UGVs rather than 2.
- Input pointcloud topic name in my_o3d_store_points.py in subscriber line 190.