Agile Robotics for Industrial Automation Competition ARIAC is hosted by NIST (National Institute of Standard and Technology) and the objective of this competition is to improve the agility of industrial robot system, with the goal of enabling industrial robots on the shop floors to be more productive, more autonomous and be more responsive to the needs of shop floor workers. Gazebo provides the simulation infrastructure and the virtual environment. In order to test the agility of the task-level planner, despite picking and placing the desired part to a correct pose, it also may encounter various agility challenges developed based on input from industry representatives, like dropping the part, get higher priority order during the process, pick form conveyor belt etc.
This is a costumed package developed by our group which contains the task-level planning and control using MoveIt! to control the industrial robot (UR10 form Universal robot). Several scenarios may happened during the packing process include failing suction grippers, notification of faulty parts, and reception of high-priority orders.
- qual1.In the qualifier, our planner will deal with the Baseline Kit Building by reading the orders contains specif required parts and their desired place locations on the tray and finding the parts' pick locations (either on the bin or belt). Known the desire pick-place location. The arm be controlled with MoveIt, a state of art software for mobile manipulation, to do the grasping (here we use a vacuum) and placing, meanwhile avoiding the obstacles in the work cell.
- qual2. In this qualifier, our planner need to deal with problem of dropping part: One of the piston rod parts is picked up from the bin, it will be dropped back into the bin. We have to retrieve this part in order to complete the order. In addition, when one of the gear parts is placed over a tray, it will be dropped into the tray in an incorrect position. we need to re-position this part to complete the kit with the parts in the correct poses.
- qual3. In this qualifier, our planner need to deal with In-process Kit Change. A new order with higher priority will be announced part-way into the completion of the first order. To complete the second order, we can either choose to remove the parts already in the kit tray(s), switch to an available empty tray, or submit the first order partially complete to receive an empty tray when the AGV returns. After the second order is complete, the first order is to be resumed.
- qual4. In this qualifier, our planner need to deal with Faulty part. The quality control sensors above the tray will publish the pose of faulty parts that they see on the tray. The faulty part needs to be removed from the tray (AGV) and replaced by a new required part.
-
- Localize the part either on the stationary bins or on the conveyor belt. The arm need to know where to pick and place the part. The intelligent camera (a hacked camera in simulation) could detect the part location relative to its frame. However cost of each camera is high, we want to minimize the total cost for this system to keep it as low as possible.
-
- Kit order queue management. During the packing process, we may encounter the situation of dropping the part, picking the faulty part and replace it with a new one, the higher priority order interrupt the processing order etc.
-
- The arm control. How arm controlling and motion planning for the arm to gently grasp and place the parts from/to desired location and meanwhile avoid colliding with obstacles.
In order to overcome those challenges, a task-level task planner is needed handle every possible scenario. We first build a knowledge representation graph including task decompositions, agent modeling, world modeling, variable modeling etc using task analysois approach to derive detailed knowledge of various task activities. Then create the architecture of the system as showed in the following image. Finally, a task-level planner is designed for the pick-and-place action (initial state to goal state, which has complete specifications).
- We divide our work into three part: localization (perception on the bin/belt), order management, arm planning/control. And each of our team member take charge one part by creating its own ROS package. Necessary info will communicate between each package through topics and services. How the package communicate with each other is showed as figure below:
- Gazebo
- ROS (kinetic)
- ARIAC(2017) installation:ariac wiki
- MoveIt!
cd catkin_ws
source devel/setup.bash
catkin_make
rosrun osrf_gear gear.py -f `catkin_find --share osrf_gear`/config/qual3a.yaml ~/ENPM809_ws/src/move_arm/config/qual3_config.yaml
roslaunch ur10_moveit_config ur10_moveit_planning_execution.launch sim:=true
rosrun move_arm move_srv
rosrun part_perception detect_part
rosrun move_arm move_orderManager
To move the arm to pick up part, call service like the following, to place(release) the part, turn it to mode 2
rosservice call /move_arm/toPose "pose:
position:
x: -0.4
y: -0.635
z: 0.74
orientation:
x: 0.0
y: 0.0
z: 0.0
w: 0.0
mode: 1"
Our package successfully pass all the qualifiers and finish all the desired tasks during a reasonable time, which is the best team among the six teams. There are the video links of the result