History-Aware Free Space Detection for Efficient Autonomous Exploration using Aerial Robots in ROS
This package is capable of proposing appropriate directions for exploration by utilizing a sliding-window history of the robot’s pose estimates and the depth measurements of the environment to identify the directions of probable unobservable free space in enclosed environments. More specifically, the method finds areas of sparse sensor returns near the end of the robot’s perception in the vicinity of areas with no sensor returns and determines the directions to these areas to be the probable directions of free space due to the consistency of the lack of sensor readings with the shape of the environment. In tunnel like environments, the probable direction of free space is likely to be the center of the tunnel, while in other cases it may be the center of an open room or closer to a wall that is more heavily observed by the robot’s sensors this is because we cannot assume that merely the lack of sensor readings is the same as free space. This method can be used to assist a path planner by determining the directions of probable free space for efficient exploration.
Depends on a full installation of ROS Kinetic.
- Install and initialize ROS Kinetic desktop full, additional ROS packages, catkin-tools:
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -sc` main" > /etc/apt/sources.list.d/ros-latest.list' $ wget http://packages.ros.org/ros.key -O - | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install ros-kinetic-desktop-full ros-kinetic-joy ros-kinetic-octomap-ros python-wstool python-catkin-tools $ sudo rosdep init $ rosdep update $ source /opt/ros/kinetic/setup.bash
- Initialize catkin workspace:
$ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws $ catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release $ catkin init # initialize your catkin workspace
- Get the Package
$ cd ~/catkin_ws/src $ git clone https://github.com/unr-arl/hfsd.git
- Build the workspace
$ cd ~/catkin_ws $ catkin build
- Open a terminal and type the following:
$ cd ~/catkin_ws $ source devel/setup.bash $ roslaunch hfsd hfsd_test.launch
- In a second terminal play the test bag file included in the test directory:
$ cd ~/catkin_ws/src/hfsd/test $ rosbag play test.bag
- In Rviz load the config file found in at
- Rviz should show something similar to this:
Launching the Package
To launch the program:
- Modify the launch file to the desired parameters.
- Run the following:
$ cd ~/catkin_ws $ source devel/setup.bash $ roslaunch hfsd hfsd.launch
sensor_msgs/PointCloud2. This should be remapped to a topic that publishes point clouds. It transforms
PCL::PointCloud<<PCL::PointXYZ>>data structures internally.
nav_msgs/Odometry. The odometry should be in the world frame. This is used to create the sliding window of
nav_msgs/Odometry. This simply shows the odometry being used by the algorithm.
sensor_msgs/ImageThis publishes a 2D image of color coded contours extracted by the algorithm. The contours also have dots on them representing their centroids.
sensor_msgs/Image. This publishes a 2D image of the grayscale matrix that is used to determine directions of free space.
visualization_msgs/MarkerArray. This publishes the visualization of the directions of free space produced by the algorithm.
sensor_msgs/PointCloud2. This publishes the sliding window of point clouds.
||The internal reference frame associated with the sensor|
||The chosen base_frame typically
||Number of frames before next publishing on
||Length of the visualization markers|
||Lifetime of the visualization markers|
||Diameter of the arrow head for the visualization markers|
||Diameter of the arrow shaft fot the visualization markers|
||Length of the arrow head for the visualization markers|
||The number of sectors that exist along the azimuth of the spherical matrix|
||The number of sectors that exist along the elevation of the spherical matrix|
||The number of consecutive point clouds aligned in the sliding window|
||The number of point cloud messages to skip before adding a message to the queue|
||Filters out all found contours below this number|
||If a contour has more height than this param it will be split into parts|
||Sets spherical sectors below this number to 0|
||Size of the initial voxel grid filter|
||Enables/Disables secondary voxel grid|
||Size of the secondary voxel grid|
||Enables/Disables the box filter|
||Changes the X value of the box filter size. Must be odd or 0|
||Changes the Y value of the box filter size. Must be odd or 0|
||Enables/Disables the gaussian blur|
||Changes the X value of the gaussian blur size. Must be odd or 0|
||Changes the Y value of the gaussian blur size. Must be odd or 0|
||Changes the X value of the gaussian blur sigma. Must be odd or 0|
||Changes the Y value of the gaussian blur sigma. Must be odd or 0|
||Enables/Disables the median blur|
||Changes the median blur size. Must be odd|
||The number that modifies intensity values for grayscale.|
||Number of dilations|
||Number of erosions|
||Enable/Disable timing messages|
||Enable/Disable debug messages|
* These parameters are typically disabled and may cause unknown effects when enabled.
You can contact us for any question or remark:
This work was supported by the National Science Foundation (Award#: IIS-1757929)