/ARIAC_Group_1

Simulation-based control design and motion planning for a 2 arm gantry in a manufacturing environment using ROS services, subscriber-publisher.

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

ARIAC 2020

License

Agile Robotics for Industrial Automation (ARIAC) is a simulation based competition organized by the National Institute of Standards and Technology (NIST) in Collaboration with IEEE CASE, every year since 2017. The purpose of ARIAC is to investigate robot agility by utilizing the latest advances in artificial intelligence, robot planning and control. Specifically, ARIAC focuses on challenging robotic agility in manufacturing environments. This project is build around ARIAC 2020 competition, which is implemented in ROS Melodic and Gazebo 9.16 simulator.

Team Members

Goal of ARIAC 2020 Challenge

The premise of ARIAC 2020 is to build kits of different types of products based on received orders from the system. To build this kits, a gantry robot with two UR10 arms attached to its torso and vacuum grippers can be moved around a warehouse to retrieve the parts from each order. These parts can be found in shelves and bins. The robot picks up the parts and places them on a specified AGV. Once a kit is completed, the AGV is shipped to fulfill an order. ARIAC 2020 presents the following agility challenges include high priority order, faulty parts, faulty gripper, flipped parts, sensor blackout and moving obstacles. Some of the tools used for this competition include C++, ROS, Gazebo, MoveIt and ROS TF.

ARIAC Environment

The environment consists of a gantry robot, 2 AGV’s on either side of the shop floor, multiple shelves and bins, a conveyor belt and moving obstacles. The parts are located within the bins and shelves. However, some parts also can spawn in the conveyor belt. The parts in the conveyor are in continuous motion and disappear when they reach the end of the belt. The shelves are arranged in a way to create four aisles. In each trial there are two moving obstacles that can be found in any of the aisles.

ARIAC Environment Part Types

Knowledge Representation

There are different kinds of knowledge representations based on the information we have, ranging from ordinary glossaries to general logic. Following is the knowledge model of the objects and behaviors implemented in our project. For each object in the project, appropriate attributes and behaviors are identified. To learn more about the architecture implemented please read the final report or have a look at the presentation.

drawing

Agility Challenges

ARIAC 2020 has the following agility challenges

  1. Faulty Products : Certain parts in the environment are faulty but can only be identified once placed on the trays. Only the quality control sensors above the AGV's can detect faulty parts. Faulty parts are taken from the trays and thrown to the floor. Both arms are used to retrieve new parts from the bins and shelves. Faulty parts are substituted until no more faulty parts are detected in both trays.

animated

  1. Flipped products : Certain parts in an order need to be flipped before sending the AGV. The only part type which needs to be flipped are pulleys. The approach taken consists in placing the two parts from both arms in the trays, and then check which ones need to be flipped. Finally, pick those parts from the tray individually, flip them and place them again in the same position ready to send the order.

animated

  1. Dropped Products : The gripper becomes faulty at various instances. This leads to the part being placed on the trays at that time to have a different pose and orintation than the one desired. To tackle this challenge, the desired positions of the parts in both trays are double checked with the information retrieved from the logical cameras placed above the AGV's. If the desired pose of the part in the tray and the pose retrieved by the logical camera don't match, the arms pick again that part from the tray and correct its position.

animated

  1. In-process order interruption : In the middle of an order, another priority order is placed which needs to be delivered before to the initial order. This priority order can be build in a different AGV than the former one, or in the same. For the second case, the parts from in the AGV already placed from the former order are relocated in empty bins and the new priority order is build in the empty AGV tray. An example of priority order is shown in this video.
  2. Sensor Blackout : At a certain time, communications from the sensors will be lost, but the system needs to continue to process the orders. An example of sensor blackout is shown in this video.
  3. Moving Obstacles : Moving Obstacles (humans) are present in the environment floor and the robot should plan to avoid collision. To pick parts from the lower shelves the robot must avoid these obstacles and for that it takes advanage of the safe location created by the gaps between the shelves of each aisle.

animated

Build Instructions

Follow the build instructions to build on your local system.

  • Download the ARIAC 2020 package from the ARIAC github repo in the source folder of your workspace.
mkdir -p ~/ariac_ws/src
cd ~/ariac_ws/src/
git clone https://github.com/usnistgov/ARIAC.git
cd ~/ariac_ws/src/ARIAC/
git checkout ariac2020
cd ~/ariac_ws/src/
git clone https://github.com/osrf/ariac-gazebo_ros_pkgs -b ariac-network-melodic
  • Download this repo in the source directory Run the following commands in a terminal
cd ~/ariac_ws/src/

git clone https://github.com/sandeep-kota/ARIAC_Group_1.git

catkin build

Run Instructions

  • The launch directory of the package /ariac_group_1 has a launch file ariac.launch. All the necessary nodes will be launched within this node.
source ~/ariac_ws/devel/setup.bash

roslaunch ariac_group_1 ariac.launch load_moveit:=true
  • Run the ariac node
source ~/ariac_ws/devel/setup.bash

rosrun ariac_group_1 ariac_node

Output Videos

Config File Video
final_ariac_2021.yaml alt text
ariac-sample.yaml alt text

Final Score

Final score for the final_ariac_2021.yaml config file is shown below.

Score breakdown:
<game_score>
	Total game score: [36]
	Total process time: [843.816]
	Arms collision?: [0]
<order_score order_0>
	Total order score: [12]
	Completion score: [12]
	Time taken: [843.814]
	Complete: [true]
	Priority: [1]
<shipment_score >
	Completion score: [12]
	Complete: [true]
	Submitted: [true]
	Product type presence score: [3]
	Product color presence score: [3]
	All products bonus: [3]
	Product pose score: [3]
	Delivered to correct agv: [true]
</shipment_score>

</order_score>

<order_score order_1>
	Total order score: [24]
	Completion score: [8]
	Time taken: [452.568]
	Complete: [true]
	Priority: [3]
<shipment_score >
	Completion score: [8]
	Complete: [true]
	Submitted: [true]
	Product type presence score: [2]
	Product color presence score: [2]
	All products bonus: [2]
	Product pose score: [2]
	Delivered to correct agv: [true]
</shipment_score>

</order_score>

</game_score>

Doxygen Docs

Doxygen documentation is supported with this package. To generate the respective documentation please run the following commands in your terminal.

cd ~/ariac_ws/src/ARIAC_Group_1/ariac_group_1/docs/

doxygen Doxyfile