# multi-robot_task_allocation **Repository Path**: jhon_tao/multi-robot_task_allocation ## Basic Information - **Project Name**: multi-robot_task_allocation - **Description**: Algorithm of a multi-robot task allocation for multi-target tracking - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2021-01-08 - **Last Updated**: 2023-12-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # multi-robot_task_allocation Algorithms of a multi-robot task allocation for multi-target tracking are provided, which have been developed in ROS Kinetic on Ubuntu 16.04. This package provides several features for a multi-robot task allocation when tracking multiple targets. A local algorithm plays a key role in this algorithm where it provides nice properties on communication limitation and was referred by Floréen, Patrik, et al. "Local approximability of max-min and min-max linear programs." Theory of Computing Systems 49.4 (2011): 672-697. ## Run a demo Demo is included in max_min_lp_demo. In max_min_lp_demo/data there are several instances that you can test. Local algorithm is implemented in a sequential way, not in a distributed since one machine is used to test the performance of the algorithm. ``` roslaunch max_min_lp_demo test_max_min_lp.launch ``` In case you want to visualize an original and layered graphs of instance that you are testing, run the following. ``` rosrun max_min_lp_visualization max_min_lp_plot.py ``` Then, the result of the graph will be in the max_min_lp_visualization/log folder. The following will activate the demo. ``` rostopic pub /robot_status std_msgs/String demo ``` ## Two main algorithms There are two versions of multi-robot multi-target tracking algorithms. The first algorithm is a local algorithm based one, which is explained in the beginning. The second algorithm is a greedy one where each robot greedily track targets without considering other robots. For both a central node exists to simulate sensing and communication graphs. Each robot has its own node for local computation and getting odometry information from the gazebo simulation. ### Local algorithm Run the gazebo simulation first. This will spawn five (turtlebot) robots with thirty stationary and moving targets. ``` roslaunch max_min_lp_simulation five_robot_twenty_target_case.launch ``` Then, run the main algorithm. ``` roslaunch max_min_lp_simulation simulation_server_to_robots.launch ``` To initiate the algorithm, ``` rostopic pub /robot_status std_msgs/String run ``` ### Greedy algorithm Again, run the gazebo simulation first. ``` roslaunch max_min_lp_simulation five_robot_twenty_target_case.launch ``` Then, run the main algorithm. ``` roslaunch max_min_lp_simulation greedy_server_to_robots.launch ``` To initiate the algorithm, ``` rostopic pub /robot_status std_msgs/String run ``` ## Generating and testing motion primitives of a robot In this package, which is max_min_lp_simulation, turtlebot is used as a mobile platform. This feature allows to generate and test different sets of motion primitives of a robot while changing `cmd_vel` values with different time intervals. In our setting time interval is defined by the number of publishers applied to. First, run the following command. ``` roslaunch max_min_lp_simulation single_robot_case.launch ``` This will run the gazebo simulator with a single robot. ``` rosrun max_min_lp_simulation motion_primitive_gerator ``` Now you can feed `/robot/status` rostopic in order to move the robot. In the following the first command moves the robot `x direction` and the second one rotates the robot in the counter-clockwise. In the gazebo simulator the positive values for `x` is the forward direction to the robot while the positive values for `z` rotates the robot in the counter-clockwise. ``` rostopic pub /robot_status std_msgs/String x rostopic pub /robot_status std_msgs/String z ``` You can also check the odometry information of the robot by using `rostopic echo /robot_1/odom`.