A Lightweight Pipeline for landing obstacles avoidance and safe landing zone extraction
In this repository you can find our proposed pipeline for safe landing areas. It is implemented in ROS.
The pipeline is consisted of three submodules:
- Point Cloud Generator
- Temporal Octomap
- Landing Commander
The backbone of this submodule is the object detector. In that case we use the YOLO v7. A pair of stereo images is collected and then feeded to the object detector. The centers of the detections' bounding boxes are matched and then triangulated to produce a point cloud (ROS pointcloud2 msg) consisting only of the network's detections.
/stereo/left/image_raw
/stereo/left/camera_info
/stereo/right/image_raw
/stereo/left/camera_info
/PointCloud
/detector/detected_objects
/detector/detection_image
/detector_debug
~weigths
Path to the network's weights.
~matching_distance_coefficient
Distance coefficient of two points, in image pairs, to match them.
~confidence
Confidence threshold. Detections with conf. less than this value are ignored.
~max_detections
Maximum number of detections in each frame.
~device
Device that the network in loaded on.
~camera0_topic
~camera0_info_topic
~camera1_topic
~camera1_info_topic
This submodule has as its input the pointcloud2
msg from the Point Cloud Generator. The point cloud is inserted into an Octomap for its efficient manipulation. This module is very similar to octomap_mapping package. One key difference is the deletion of every octree node after a predefined time frame. The outoput of this module comprises of an occupancy grid projected on the ground plane that represents occupied space by landing obstacles.
/PointCloud
/occupied_cells_vis_array
/projected_map
/temporal_octomap_debug
~frame_id
~min_x_size
~min_y_size
~max_range
~resolution
~sensor_model/hit
~sensor_model/miss
~sensor_model/min
~sensor_model/max
~Occupancy_Thres
~sensor_model/min
~decaytime/sec
~decaytime/nsec
This is the last module of the pipeline and it handles the safe landing points extraction and the landing procedure itself. The latter is base on the PX4 Autopilot software.
/projected_map
/mavros/state
/mavros/extended_state
/occupancy_output
/landing_commander_debug
/debug_landing_targets
/mavros/setpoint_position/local
~safety_dist
Safety radius drawn from each occupied cell in the occupancy grid
~target_proc_time
The processing time target for the dynamic stride
~safety_area
Land point searching begins after x meters.
~minimum_stirde
The minimum searching stride
~stride_coef
Coef for stride change intensity
~robot_frame/hit
The UAV's frame name
~land_to_base
Taget is to land to the base
~debug
Publish debug msgs
~show_occupancy_map
Display occupancy map