Table of Contents
The aim of the project is to design a realistic solution to a pick a box from a mountain of arranged boxes and place the box onto its corresponding container. Each container has a different visual marker (bar-code, QR Code, etc.), and each box has he same marker as the container it should go to. The distance between the mountain of boxes and the containers is 10m. The boxes weight between 10 and 15kg and their size between 30x30x30 cm and 50x50x50cm, but they are not necessarily equilateral. The mountain of boxes is not higher than 1.5m.
The project involve three deliverable :
- Description of the solution and summary of its workflow
- Details of the components and plan for the implementation of the solution
- Source code of one of the components
The relevant README files for the above two deliverables are :
The project is made using the following framework and hardware:
To get started with the project, you need to have the following prerequisites installed in your system.
- ROS
The ROS (Robot Operating System) is a free software, sourced and maintained by
Open Robotics. You must have ROS in order to run this project on your system Follow all
the instructions to install ROS Melodic, including calls to rosdep
.
- MoveIt
MoveIt is an open source project that is the result of the combined efforts of a large international community and multiple organizations. To Install on Ubuntu 18.04:
sudo apt install ros-melodic-moveit
You can also follow the official MoveIt website to know more about it.
- Clone the repo
git clone https://shahwazk@bitbucket.org/telexistence/dev-shahwaz-khan.git
Once you have all the necessary files and hardware arranged, you can build your project.
cd your_project_directory
catkin_make
In order to save processing power, you can also use:
catkin_make -j7
Here, 7 denotes the number of cores you want to assign during make process. You can assign however amount of cores.
The two important components involved in this project.
Mobile base and ABB IRB2400 Industrial robot. The mobile base is a carrier for the ABB robot is the primary mode of transportation of Robot from pick place to place position. The base has a payload capacity of 3000lbs and can easily lift the robot, accompanying power source and weight of the boxes.
The mobile is a four wheel differential drive system and uses a custom package made of SolidWorks designs, URDFs and differential controllers for left and right back wheels.
To launch the robot on RVIZ and Gazebo,
source your catkin directory
roslaunch mobilebot_launch diff_drive.launch
The corresponding windows that open on RViz and Gazebo along with rqt_steering can be seen in the images below.The working of the differential wheel drive can also be seen in the video.
The working of the differential wheel drive can be visualized on both RViz and Gazebo from the video below:
The ABB robot is a 6 DOF Industrial arm its main task to pick the boxes that can range from 10 -15 kg and place it onto the corresponding containers. This robot has a payload capacity of 20kg and thus can easily lift the boxes.
After building the project, the project can be run for the pick and place operation performed on RViz using MoveIt visualization
roslaunch pick_n_place robot_planning.launch
Check out the video to visualize the complete pick and place operation performed by ABB IRB2600 robot mounted over a mobile base. In the video, it can observed that the robot will successfully complete the pick and place operation for three robots and then will move to the home position.
The following are the assumptions that were taken into account when designing the pick and place operation for the ABB IRB2400 robot and mobile base:
-
The shape of the boxes is assumed to be cube with a dimension of 50cm.
-
The pick and place are at equal distance from the chassis link of the mobile base.
The code is designed in such a way that it can handle few error that can be thrown during the execution of the actual pick and place operation by the robot.
-
System gracefully handles the case when QRCodeScanner fails to read the QR. In such scenarios,System retries it for x (which is 3 right now) times. This is implemented using Custom exception handling.
-
System has been configured to retry planning x (which is 3 right now) times using built in planning attempt provided by RRTConnect library.
-
System immediately exists if two containers with the same QR code were found.
-
System immediately exists if a container with matching box QR code is not found.
While designing the system and visualizing the pick and place operation, following issues were faced:
-
Although, the differential wheel drive of the mobile base works independently as evident from the video above, the integration of differential drive with the robot planning doesn't seem to work. Because of this issue, the problem has been designed for limited containers(3) due to the reachability issue faced by the robot.
-
The visualization of the pick and place operation in the MoveIt seem to show only the planning path and the actual robot do not follow the planning path or sometime it does and stops in halfway through. One solution to that is to manufally update the planning scene topic regularly between two available topics on RViz:
-/abb_robot/move_group/monitored_planning_scene -/abb_robot/planning_scene
To check the memory usage - for HEAP MEMORY
and LEAK MEMORY
, following command can be added to the roslaunch
of the launching node - launch-prefix="valgrind ."
If your system do not have valgrind
installed, you can do so by
running the following command on terminal -
a. Make sure to install valgrind
sudo apt-get install valgrind
b. Remove any old Valgrind logs:
rm valgrind.log*
c. Start the program under control of memcheck:
G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind -v --tool=memcheck --leak-check=full --num-callers=40 --log-file=valgrind.log $(which <program>) <arguments>
After successfully installing the Valgrind, modify the node logistic_pick_place
under src/pick_n_place/launch/robot_planning.launch
to the following:
<node name="abb_robot_planning" pkg="pick_n_place" type="logistic_case_pick_place" output="screen" launch-prefix="valgrind "/>
The output of the following changes will results in the following result of the pick and place operation :
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Your Name - Shahwaz Khan
Project Link: Logistic Case Picking