IFRA (Intelligent Flexible Robotics and Assembly) Group
Centre for Structures, Assembly and Intelligent Automation
Cranfield University
Table of Contents
The IFRA (Intelligent Flexible Robotics and Assembly) Group is part of the Centre for Structures, Assembly and Intelligent Automation at Cranfield University.
IFRA Group pushes technical boundaries. At IFRA we provide high tech automation & assembly solutions, and we support smart manufacturing with Smart Industry technologies and solutions. Flexible Manufacturing Systems (FMS) are a clear example. They can improve overall operations and throughput quality by adapting to real-time changes and situations, supporting and pushing the transition towards flexible, intelligent and responsive automation, which we continuously seek and support.
The implementation of IIoT and the use of computer numerical control equipment enable interconnectivity and the exchange of data across the shop floor, and the interconnected shop floor enables the automation of work machines to support FMS. In a nutshell, Automated Industrial Processes bring agility to production cycles and enable shop floor equipment to pivot facility operations when dealing with changing demand cycles.
The IFRA Group undertakes innovative research to design, create and improve Intelligent, Responsive and Flexible automation & assembly solutions, and this series of GitHub repositories provide background information and resources of how these developments are supported.
ROS (Robotics Operating System) is a great tool that, combined with Gazebo and MoveIt! frameworks, provides a great amount of resources and capabilities to develop different Robotics Applications with a huge range of Industrial and Collaborative Robots.
Nonetheless, developing new applications in ROS requires a huge previous work, which consists in developing ROS Packages that contain all the Robot data required for the Simulation and Control, including:
- Kinematics.
- Control parametres.
- CAD files.
- Physical parametres.
- Joint limits.
- Extra features.
As a common rule, the software stack needed to execute and test an Industrial Robot Simulation in ROS is:
- A "robot_gazebo" package, which simulates the behaviour of the Robot.
- A "robot_moveit" package, which controls the performance of the Robot. With both combined, different applications and implementations can be developed using the Robotics Operating System (ROS).
ROS is now undertaking a transformation process to ROS2, a newer and improved version of ROS1. Thus, this involves that all the developments, implementations and packages released for ROS1 have to be forked/translated to ROS2 or are directly unavailable in ROS2.
The IFRA Group in Cranfield University (Bedfordshire, UK) has identified a huge gap in the availability of "ready-to-use" ROS2 Industrial Robot Simulation packages, and that is why the ros2_RobotSimulation ROS2 repository has been developed and released. The repository consists of Gazebo (simulation) + MoveIt!2 (control) package combinations for each supported Industrial Robot (or Robot + Gripper combinations), and follows a common standard for a better understanding and further development.
All packages in this repository have been developed, executed and tested in an Ubuntu 20.04 machine with ROS2.0 Foxy. Please find below all the required steps to set-up a ROS2.0 Foxy environment in Ubuntu and install the Robot Simulation packages.
- Install Ubuntu 20.04: https://ubuntu.com/desktop
- Install Git:
- In terminal shell:
sudo apt install git
- Git account configuration:
git config --global user.name YourUsername git config --global user.email YourEmail git config --global color.ui true git config --global core.editor code --wait # Visual Studio Code is recommended. git config --global credential.helper store
- In terminal shell:
- Install ROS2.0 Foxy:
- Follow instructions in: ROS2 Foxy Tutorials - Installation
- Source the ROS2.0 Foxy installation in the .bashrc file (hidden file in /home):
source opt/ros/foxy/setup.bash
- Install some additional (required) packages:
- Colcon: ROS2 Foxy Tutorials - Colcon
- ROSdep: ROS Wiki - Installing ROSdep
- Turtlesim + rqt: ROS2 Foxy Tutorials - Turtlesim
- Configure the ROS2.0 Foxy ~/dev_ws environment/workspace:
- Follow instructions in: ROS2 Foxy Tutorials - Create a Workspace
- Source ~/dev_ws workspace in .bashrc file:
source ~/dev_ws/install/local_setup.bash
- Install ROS2.0 MoveIt!2 framework:
- Follow instructions in: Picnik Robotics - MoveIt!2
- Source MoveIt!2 workspace in .bashrc file:
source ~/ws_moveit2/install/setup.bash
- Install required packages for Gazebo + MoveIt!2 Robot Simulation:
- Catkin Tools:
sudo apt-get install python3-catkin-tools
- gazebo-ros-pkgs:
sudo apt install ros-foxy-gazebo-ros-pkgs
- ROSBridge:
cd ~/dev_ws/src git clone https://github.com/RobotWebTools/rosbridge_suite.git -b ros2 cd .. colcon build --symlink-install
- gazebo_ros2_control:
cd ~/dev_ws/src git clone https://github.com/ros-simulation/gazebo_ros2_control.git -b foxy cd .. colcon build --symlink-install
- gazebo_ros_demos:
cd ~/dev_ws/src git clone https://github.com/ros-simulation/gazebo_ros_demos.git -b ahcorde/port/ros2 cd .. colcon build --symlink-install
- ROS2.0 Control packages (download the packages, paste them into the [~/dev_ws/src] folder and colcon build):
- ros2_control: https://github.com/ros-controls/ros2_control/tree/foxy
- ros2_controllers: https://github.com/ros-controls/ros2_controllers/tree/foxy
- ros2_control_demos: https://github.com/ros-controls/ros2_control_demos/tree/foxy
- Catkin Tools:
A small improvement of the move_group_interface.h file has been developed in order to execute the Robot/Gripper triggers in this repository. Both the upgraded file and the instructions of how to implement it can be found here:
cd ~/dev_ws/src
git clone https://github.com/IFRA-Cranfield/ros2_RobotSimulation.git
cd ..
colcon build --symlink-install
The Simulation & Control packages of the following Robots are currently available:
- Panda Robot
- ABB IRB-120 Robot
- ABB IRB-120 Robot with Schunk EGP-64 Gripper
- ABB IRB-6640 Robot
- UR3 Robot
- UR5 Robot
- UR10 Robot
- Panda Robot:
ros2 launch panda_ros2_gazebo panda_simulation.launch.py
- ABB IRB-120:
ros2 launch irb120_ros2_gazebo irb120_simulation.launch.py
- ABB IRB-120 + Schunk EGP-64:
ros2 launch irb120egp64_ros2_gazebo irb120egp64_simulation.launch.py
- ABB IRB-6640:
ros2 launch irb6640_ros2_gazebo irb6640_simulation.launch.py
- UR3:
ros2 launch ur3_ros2_gazebo ur3_simulation.launch.py
- UR5:
ros2 launch ur5_ros2_gazebo ur5_simulation.launch.py
- UR10:
ros2 launch ur10_ros2_gazebo ur10_simulation.launch.py
- Panda Robot:
ros2 launch panda_ros2_moveit2 panda.launch.py
- ABB IRB-120:
ros2 launch irb120_ros2_moveit2 irb120.launch.py
- ABB IRB-120 + Schunk EGP-64:
ros2 launch irb120egp64_ros2_moveit2 irb120egp64.launch.py
- ABB IRB-6640:
ros2 launch irb6640_ros2_moveit2 irb6640.launch.py
- UR3:
ros2 launch ur3_ros2_moveit2 ur3.launch.py
- UR5:
ros2 launch ur5_ros2_moveit2 ur5.launch.py
- UR10:
ros2 launch ur10_ros2_moveit2 ur10.launch.py
- Panda Robot:
ros2 launch panda_ros2_moveit2 panda_interface.launch.py
- ABB IRB-120:
ros2 launch irb120_ros2_moveit2 irb120_interface.launch.py
- ABB IRB-120 + Schunk EGP-64:
ros2 launch irb120egp64_ros2_moveit2 irb120egp64_interface.launch.py
- ABB IRB-6640:
ros2 launch irb6640_ros2_moveit2 irb6640_interface.launch.py
- UR3:
ros2 launch ur3_ros2_moveit2 ur3_interface.launch.py
- UR5:
ros2 launch ur5_ros2_moveit2 ur5_interface.launch.py
- UR10:
ros2 launch ur10_ros2_moveit2 ur10_interface.launch.py
The list below contains all different Robot/Gripper Triggers that have been implemented in this repository, and how these are executed by making different ROS2.0 Action Calls from a terminal shell:
-
MoveJ: The Robot moves to the specific waypoint, which is specified by Joint Pose values.
ros2 action send_goal -f /MoveJ ros2_data/action/MoveJ "{goal: {joint1: 0.00, joint2: 0.00, joint3: 0.00, joint4: 0.00, joint5: 0.00, joint6: 0.00}}" ros2 action send_goal -f /MoveJpanda ros2_data/action/MoveJpanda "{goal: {joint1: 0.00, joint2: 0.00, joint3: 0.00, joint4: 0.00, joint5: 0.00, joint6: 0.00, joint7: 0.00}}" # For Panda Robot.
-
MoveG: The Gripper fingers move to the specific pose.
ros2 action send_goal -f /MoveG ros2_data/action/MoveG "{goal: 0.00}"
-
MoveL: The Robot executes a CARTESIAN/LINEAR path. The End-Effector orientation is kept constant, and the position changes by +-(x,y,z).
ros2 action send_goal -f /MoveL ros2_data/action/MoveL "{movex: 0.00, movey: 0.00, movez: 0.00}"
-
MoveR: The Robot rotates the selected joint a specific amount of degrees.
ros2 action send_goal -f /MoveR ros2_data/action/MoveR "{joint: '---', value: 0.00}"
-
MoveXYZW: The Robot moves to the specific waypoint, which is represented by the Position(x,y,z) + EulerAngles(yaw,pitch,roll) End-Effector coordinates.
ros2 action send_goal -f /MoveXYZW ros2_data/action/MoveXYZW "{positionx: 0.00, positiony: 0.00, positionz: 0.00, yaw: 0.00, pitch: 0.00, roll: 0.00}"
-
MoveXYZ: The Robot moves to the specific waypoint -> Position(x,y,z) maintaining the End-Effector orientation.
ros2 action send_goal -f /MoveXYZ ros2_data/action/MoveXYZ "{positionx: 0.00, positiony: 0.00, positionz: 0.00}"
-
MoveYPR: The Robot rotates/orientates the End-Effector frame according to the input: EulerAngles(yaw,pitch,roll).
ros2 action send_goal -f /MoveYPR ros2_data/action/MoveYPR "{yaw: 0.00, pitch: 0.00, roll: 0.00}"
-
NOTE: For the (Yaw - Pitch - Roll) Euler Angles rotation, the following coordinate system has been used as the reference frame for the rotations. In fact, all YPR action calls rotate the robot end-effector to the orientation specified by the (input) Euler Angles, relative to the reference frame.
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- 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
Intelligent Flexible Robotics and Assembly Group
Created on behalf of the IFRA Group at Cranfield University, United Kingdom
E-mail: IFRA@cranfield.ac.uk
Licensed under the Apache-2.0 License.
You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0
Cranfield University
School of Aerospace, Transport and Manufacturing
Centre for Structures, Assembly and Intelligent Automation
College Road, Cranfield
MK43 0AL, UK
You can cite our work with the following statement:
IFRA (2022) ROS2.0 ROBOT SIMULATION. URL: https://github.com/IFRA-Cranfield/ros2_RobotSimulation.
Mikel Bueno Viso - Research Assistant in Intelligent Automation at Cranfield University
E-mail: Mikel.Bueno-Viso@cranfield.ac.uk
LinkedIn: https://www.linkedin.com/in/mikel-bueno-viso/
Dr. Seemal Asif - Lecturer in Artificial Intelligence and Robotics at Cranfield University
E-mail: s.asif@cranfield.ac.uk
LinkedIn: https://www.linkedin.com/in/dr-seemal-asif-ceng-fhea-miet-9370515a/
Professor Phil Webb - Professor of Aero-Structure Design and Assembly at Cranfield University
E-mail: p.f.webb@cranfield.ac.uk
LinkedIn: https://www.linkedin.com/in/phil-webb-64283223/