Git Product home page Git Product logo

tm-rrt_exploration's Introduction

Temporal Memory-based RRT (TM-RRT) Exploration (ROS-Melodic)

This is a temporal memory-based rapidly-exploring random tree (TM-RRT) algorithm, which is based on the original RRT exploration by Hassan Umari.

For simulation, please refer to TM-RRT Exploration Simulation.

credit to Hasauino for creating the RRT exploration packages. RRT Exploration package. RRT Exploration Tutorial package.

There are a few modifications done to improve the efficiency of exploration, which are mainly focused on the assigner module.

  • memory-based assigner, where the assigner keeps track of the goal history and prevents other robots from exploring the same location
  • time limit imposed on the goal based on the expected velocity to prevent the robot from spending time on an unreachable goal.

Requirements

The following code is executed in ROS Melodic in Ubuntu 18.04 LTS, Python 2.7

The following libraries are required to be installed before proceeding to run the code

$ sudo apt-get install ros-melodic-gmapping
$ sudo apt-get install ros-melodic-navigation
$ sudo apt-get install python-opencv
$ sudo apt-get install python-numpy
$ sudo apt-get install python-scikits-learn
$ sudo apt-get install ros-melodic-multirobot-map-merge

Installation Process

Create a new folder called "catkin_explore/src" by executing the following comment:

$ sudo mkdir -p ~/catkin_explore/src
$ cd ~/catkin_explore/src/
$ git clone -b main-Melodic https://github.com/hikashi/TM-RRT_exploration.git
$ cd ~/catkin_explore
$ catkin_make

TF Tree Requirement

TF_tree_example

Demonstration of TM-RRT in Clearpath's Jackal

Kindly refer to the video below for a demonstration of TM-RRT Exploration:

  • three robots (Clear Path's Jackal)

TM-RRT Exploration for Three Jackals

  • two different ground robots (Jackal and Ghost Vision 60)

TM-RRT Exploration for two different robots

Execution Commands

Comments for running/executing the TM-RRT exploration after sourcing devel/setup.bash

        $ roslaunch tmrrt_exploration trio_exploration.launch

ROS PARAMETER

ros parameters for setting up the robot

  • boundary.py
    • map frame >> map frame for the boundary points to be published
    • n_point >> number of clicked_points to be used to draw the boundary
    • start_Topic >> topic input for accepting the input of the boolean start signal
    • reset_Topic >> topic input for accepting the input of the boolean reset signal
    • controlOutput >> topic used to publish control signal for the start of the data
    • restartOutput >> topic used to publish reset signal for resetting the exploration
    • topicOutput >> topic for deciding the boundary drawn
    • frequency >> frequency for publishing the boundary geometry
    • timeInterval >> time interval for displaying the message
    • mapTopic >> map topic to subscribe on for performing auto boundary setting
    • initialPoint >> initial point for the RRT tree to grow
    • odom_topic >> odom topic for subscribing (just in case not using the initial point)
    • robot_frame >> robot frame where it publishes the Odom topic
  • filter.py
    • map_topic >> map topic for subscribing to (merged map in the multi-robot scenario)
    • threshold >> the threshold for defining clearance for filtering frontier with high possibility near to an obstacle
    • info_radius >> information radius used to calculate the revenue
    • goals_topic >> topic for receiving the detected points of the RRT
    • robot_namelist >> robot name list changed to the format of string (robot name separated by comma delimiter)
    • inv_frontier_topic >> topic for receiving the invalid frontier topic
    • startSignalTopic >> topic for controlling the start signal
    • rateHz >> the frequency for determining the rate of computing the filter module node
    • global_costmap_topic >> topic of the global cost map for each robot
    • local_map_topic >> local map of each robot if requires a subscription
    • bandwith_cluster >> the clustering parameter for each detected point
    • robot_frame >> the frame of the robot for performing TF conversion
    • localMapSub >> subscribing to the local map of each robot
    • computeCycle >> the compute cycle for performing each cycle just in case the frequency doesn't work as intended
    • startSignalTopic >> the topic for determining whether to start the filter module or pause
    • resetSignalTopic >> reset the filter module to start from scratch
    • debug1 >> debugs message view for type 1
    • debug2 >> debugs message view for type 2
  • assigner.py
    • map_topic >> the map topic for determining the revenue/information gain for a given frontier
    • info_radius >> radius to determine the information value of a given frontier
    • info_multiplier >> multiplier for determining the base value of the information
    • hysteresis_radius >> radius for inflating the value if the robot is within the designated radius
    • hysteresis_gain >> the multiplier for the revenue if the robot is within the
    • frontiers_topic >> topic for subscribing to from filter module
    • message_time_interval >> interval for controlling the displaying of the message
    • delay_after_assignment >> delay after each assignment of the frontier
    • start_delay >> delay before starting assignment - just in case the filter module is a bit slow
    • rateHz >> frequency for controlling the module publishing speed
    • inv_points_topic >> topic for publishing invalid points
    • inv_frontier_topic >> topic for publishing invalid centroids
    • time_per_meter >> anticipated time needed for robot per meter usage, else the goal will be cancelled
    • robot_namelist >> robot name list changed to the format of string (robot name separated by comma delimiter
    • invalid_distance >> If the goal is assigned too far away, it will be cancelled based on this distance threshold
    • rp_metric_distance >> the relative metric distance for calculating the relative distance between robots for adjusting the revenue for each goal
    • non_interrupt_time >> the minimum time the robot can travel before interruption can be done
    • start_delay >> the time to hold before starting the exploration
    • startSignalTopic >> topic for controlling the start signal
    • resetSignalTopic >> topic for controlling the reset signal
    • debugFlag1 >> debugs message view for type 1
    • debugFlag2 >> debugs message view for type 2
    • global_frame >> frame for sending the goal in the robot class
    • plan_service >> plan services for planning the trajectory of the current robot to the designated goal
    • base_link >> base link frame for sending the goal (for TF transformation)
    • move_base_service >> move base services for checking move bases statuses.

Setting up Simulation for testing

An example of the simulation can be shown in the following video:

TM-RRT Exploration for Ubuntu 18.04 ROS Melodic

For this work, we only compare against conventional RRT. All are welcome to contribute more to adding more benchmarking algorithms. The link for accessing the simulation and the source files are found in the link below: TM-RRT Exploration Simulation.

Paper / Publication

Please cite the paper if you are using/comparing our work.

    @article{lau2022multi,
      title={Multi-AGV's Temporal Memory-Based RRT Exploration in Unknown Environment},
      author={Lau, Billy Pik Lik and Ong, Brandon Jin Yang and Loh, Leonard Kin Yung and Liu, Ran and Yuen, Chau and Soh, Gim Song and Tan, U-Xuan},
      journal={IEEE Robotics and Automation Letters},
      volume={7},
      number={4},
      pages={9256--9263},
      year={2022},
      publisher={IEEE}
    }

Issues

  • Optimization of the goal assignment - Since the goal assignment of each AGV is based on the revenue calculation for a given frontier, hence, the goal assignment is quite limited and requires a lot of calculations. This can be slow and sub-optimal if the environment being explored is complex.
  • Optimization of rp_dist - Currently, the rp_dist need to be chosen manually for a given environment. The study for adaptive value to optimize the rp_dist is yet another issue to address.
  • Limitation of centralized paradigm - The centralized paradigm requires a server to allocate tasks to each AGV, which can be challenging in an infrastructure-free environment. To address this issue is not an easy task and the ideal solution would be a distributed approach, which is one of our next research milestones.
  • Heterogeneous robots- The current experiment robot for the TM-RRT experiment only consists of three robots with the same specifications, the collaboration between different robots with different moving capabilities is something that we want to further study.
  • 3D environment - Currently, our approach is only able to support 2D environments, where 3D environments with rough terrain remain a challenge.

tm-rrt_exploration's People

Contributors

hikashi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

tm-rrt_exploration's Issues

Question after launch

When I start "roslaunch tmrrt_exploration trio_exploration.launch", no exploration screen appears, only the following information is repeated, I wander is there any error?
[INFO] [1710161258.812695]: waiting for tb3_1
[INFO] [1710161258.815026]: waiting for tb3_2
[INFO] [1710161258.816216]: waiting for tb3_0
[INFO] [1710161258.817273]: Waiting for the map
[INFO] [1710161258.917964]: Waiting for the map
[INFO] [1710161259.019250]: Waiting for the map
[INFO] [1710161259.120321]: Waiting for the map
[INFO] [1710161259.221631]: Waiting for the map
[INFO] [1710161259.322827]: Waiting for the map
[INFO] [1710161259.423866]: Waiting for the map
[INFO] [1710161259.524943]: Waiting for the map
[]
waiting for the boundary points to be calculated
[INFO] [1710161259.626148]: Waiting for the map
[INFO] [1710161259.727381]: Waiting for the map
[INFO] [1710161259.828663]: Waiting for the map
[INFO] [1710161259.929902]: Waiting for the map
[INFO] [1710161260.031277]: Waiting for the map
[INFO] [1710161260.132392]: Waiting for the map
[INFO] [1710161260.233544]: Waiting for the map
[INFO] [1710161260.334608]: Waiting for the map
[INFO] [1710161260.435835]: Waiting for the map
[INFO] [1710161260.536919]: Waiting for the map
[]
waiting for the boundary points to be calculated
[INFO] [1710161260.638239]: Waiting for the map
[INFO] [1710161260.739713]: Waiting for the map
[INFO] [1710161260.841206]: Waiting for the map
[INFO] [1710161260.942511]: Waiting for the map
[INFO] [1710161261.043817]: Waiting for the map
[INFO] [1710161261.145153]: Waiting for the map
[INFO] [1710161261.252443]: Waiting for the map
[INFO] [1710161261.353614]: Waiting for the map
[INFO] [1710161261.454893]: Waiting for the map
[INFO] [1710161261.556354]: Waiting for the map
[]
waiting for the boundary points to be calculated
[INFO] [1710161261.657848]: Waiting for the map
[INFO] [1710161261.759592]: Waiting for the map
[INFO] [1710161261.861269]: Waiting for the map
[INFO] [1710161261.962656]: Waiting for the map
[INFO] [1710161262.064126]: Waiting for the map
[INFO] [1710161262.165549]: Waiting for the map
[INFO] [1710161262.267157]: Waiting for the map
[INFO] [1710161262.368693]: Waiting for the map
[INFO] [1710161262.470001]: Waiting for the map
[]
waiting for the boundary points to be calculated
[INFO] [1710161262.571318]: Waiting for the map
[INFO] [1710161262.672677]: Waiting for the map
[INFO] [1710161262.774082]: Waiting for the map
[INFO] [1710161262.875561]: Waiting for the map
[INFO] [1710161262.976867]: Waiting for the map
[INFO] [1710161263.078132]: Waiting for the map
[INFO] [1710161263.179429]: Waiting for the map
[INFO] [1710161263.280741]: Waiting for the map
[INFO] [1710161263.382042]: Waiting for the map
[INFO] [1710161263.483229]: Waiting for the map
[]
waiting for the boundary points to be calculated
[INFO] [1710161263.584384]: Waiting for the map
[INFO] [1710161263.685488]: Waiting for the map
[INFO] [1710161263.786626]: Waiting for the map
[INFO] [1710161263.887806]: Waiting for the map
[INFO] [1710161263.989249]: Waiting for the map
[INFO] [1710161264.090558]: Waiting for the map
[INFO] [1710161264.191807]: Waiting for the map
[INFO] [1710161264.292886]: Waiting for the map
[INFO] [1710161264.394048]: Waiting for the map
[INFO] [1710161264.495298]: Waiting for the map
[]
waiting for the boundary points to be calculated
[INFO] [1710161264.596532]: Waiting for the map
[INFO] [1710161264.697671]: Waiting for the map
[INFO] [1710161264.798843]: Waiting for the map
[INFO] [1710161264.900247]: Waiting for the map
[INFO] [1710161265.001530]: Waiting for the map
[INFO] [1710161265.102932]: Waiting for the map
[INFO] [1710161265.204368]: Waiting for the map
[INFO] [1710161265.305678]: Waiting for the map
[INFO] [1710161265.406979]: Waiting for the map
[INFO] [1710161265.508351]: Waiting for the map
[]
waiting for the boundary points to be calculated
[INFO] [1710161265.609677]: Waiting for the map
[INFO] [1710161265.710910]: Waiting for the map
[INFO] [1710161265.812306]: Waiting for the map
[INFO] [1710161265.913754]: Waiting for the map
[INFO] [1710161266.015110]: Waiting for the map
[INFO] [1710161266.116642]: Waiting for the map
[INFO] [1710161266.218190]: Waiting for the map
[INFO] [1710161266.319547]: Waiting for the map
[INFO] [1710161266.421383]: Waiting for the map
[INFO] [1710161266.528593]: Waiting for the map
[]
waiting for the boundary points to be calculated
[INFO] [1710161266.630220]: Waiting for the map
[INFO] [1710161266.731778]: Waiting for the map
[INFO] [1710161266.833210]: Waiting for the map
[INFO] [1710161266.934684]: Waiting for the map
[INFO] [1710161267.036261]: Waiting for the map
[INFO] [1710161267.137801]: Waiting for the map
[INFO] [1710161267.239322]: Waiting for the map
[INFO] [1710161267.340819]: Waiting for the map
[INFO] [1710161267.442239]: Waiting for the map
[INFO] [1710161267.543644]: Waiting for the map
[]

Some puzzle about avoidance between robots

Hi,excuse me for a moment.I wonder how this algorithm ensure avoidance bewteen robots,i mean how to ensure that path planning does not collide each other after assigning target points?. Do i need to put this robots away from each other?

Use with RGB-D SLAM

Hi,

Thank you for sharing your work. I am trying this package with RGB-D SLAM however the computed frontier number is small and sparse (see the picture below).

Screenshot from 2023-04-03 12-22-02

Have you tried this before? What do you think is the reason?

Many thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.