Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ROS2 Multi robot discussion #9

Open
pankhurivanjani opened this issue Jul 9, 2020 · 3 comments
Open

ROS2 Multi robot discussion #9

pankhurivanjani opened this issue Jul 9, 2020 · 3 comments

Comments

@pankhurivanjani
Copy link
Collaborator

pankhurivanjani commented Jul 9, 2020

ros2/design#261

Multi-Agent path planning in python

@shreyasgokhale
Copy link
Collaborator

shreyasgokhale commented Jul 26, 2020

Proposal for Multi-Robot exercise

The purpose of the multi robot exercise is to give student a platform to implement different strategies for task and path planning and subsequently, learn about the new Navigation2 structure. Thus, on the backend, the infrastructure must be set up so that the student has to code only the relevant logic / algorithm in a python function. There are 2 main responsibilities to be performed by the exercise backend:

  1. Issuing task goals. For example "Transfer pallets no: 2,5,8 from their current location to the pallet storage area"
  2. Mechanism to monitor overall state of the exercise. i.e. timely record of tasks completed by each robot.

We will be using Navigation2, which uses behaviour trees. We can use it's planner for path planning and controller for path following. However, we must also define our own task server which issues task goals.

The above mentioned repos can be used for the reference solution. In the beginning only 2 robots will be defined.

@shreyasgokhale
Copy link
Collaborator

Update

The task planning BT node will supersede the existing navigation behaviour tree. On the robot side, we will have a node plugin, for example GetTask which correlates to a node in behavior tree ( for example, get next task, where task is represented as a pose). This will be something similar to the ComputePathToPose which will return the Nav Goal (x,y,z) and if it is a pickup or dropoff. Then then robot can continue with its regular behaviour tree, to plan a path to this goal and navigate, check if it reached and then lift/drop the platform.

But to give the task, a task planning server will be separate and the robot has to query for it. And this server must have already decided which robot has to do which task based on the algorithm. We can give a demo implementation but students can program the server in more elaborate way. The demo implementation can be as simple as picking a random pose out of pallet poses and drop locations.

Nav2 already has planner, controller, recovery servers. We will add a task server. If we launch multiple robots, it already launches multiple instances of Nav2 task. So each robot has his own nav stack. And our server will have the similar structure that of other nav2 servers, for example using Ros actions etc.

Also this is my impression from reading this and I might be wrong.

@naxvm
Copy link
Collaborator

naxvm commented Aug 6, 2020

Deliverables of the project

The Amazon Warehouse exercise will transition to ROS2 Foxy, resulting in two exercises. These exercises are focused in programming navigation and planning algorithms using ROS2, and they can be addressed in a sequential manner:

1.- Implement the navigation stack on an Amazon Warehouse Robot

ROS2 brings a neat evolution of the Navigation Stack, namely Navigation2. This navigation system works as a stack which is deployed on a robot. It is composed by several action servers (Planner, Controller and Recovery), tied together by means of a customizable Behavior Tree. Depending on the current pose, environment, goal and programmed behavior, the Navigation2 system will provide the suitable trajectory towards the desired destination.

The student will have to implement a Navigation2 BT in the simulated robot, as well as integrate it with the rest of the behavior (lift/drop a pallet).

2.- Multirobot coordination

Once the navigation system has been implemented in a robot, the previous exercise can be extended to a multi-robot scenario, where several robots with independent navigation configuration (they might even implement different algorithms and/or plugins in the Navigation2 stack), a central planner will be responsible of assigning the tasks (i.e., move pallet X to zone Y) to different robots. This central planner can leverage on the enhanced asynchronous infrastructure in ROS2 by means of an action server, on a similar approach that for Navigation2 servers. This assignment can be determined by many parameters, implementing approaches such as distance-based assignments, FIFO queues, random assignments, etc.

The task of the student will be to program the assignment strategy in the central planner, determining the criteria for assigning the tasks among the available robots.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants