Giter VIP home page Giter VIP logo

robotcomponents's Introduction

Light color mode

DOI


Robot Components is a plugin for intuitive robot programming for ABB robots inside Rhinoceros Grasshopper. Robot Components offers a wide set of tools to create toolpaths, simulate robotic motion and generate RAPID code within Grasshopper. Some of the main features include:

  • 40+ predefined ABB robot models
  • Possibility to add your own robot models
  • Support for external axes (both linear and rotational)
  • Possibility to define custom strategies for all external axis values
  • Support for work objects (including movable work objects)
  • Efficient forward and inverse kinematics
  • Possibility to add your own custom code lines
  • Real-time connection with IRC5 and OmniCore controllers
  • Robot Components API to develop your custom components using either Python or C#

Getting Started

If you use Rhino 7 or higher you can install Robot Components via the package manager. For other versions, you can download the latest release directly from this repository's releases page or Food4Rhino. Unzip the downloaded archive and copy all files in the Grasshopper Components folder (in GH, File > Special Folders > Components Folder). Make sure that all the files are unblocked (right-click on the file and select Properties from the menu. Click Unblock on the General tab). Restart Rhino and you are ready to go!

In case you want to use the components from the Controller Utility section you additionally have to install Robot Studio or the ABB Robot Communication Runtime (you can download it by clicking here). The latest release is built and tested against the ABB PC SDK version 2024.1 (ABB Robot Communication Runtime 2024.1). We do not guarantee that the Controller Utility components work with older versions of the ABB Robot Communication Runtime. Besides that, the components from the Controller Utility section are only supported on Windows operating systems. Please contact us if you have problems with establishing a real-time connection from Grasshopper.

You can find a collection of example files demonstrating the main features of Robot Components in this repository in the folder Example Files. You can find the Grasshopper documentation website here. The documentation website of the API here.

For easy sharing of the download link and the documentation (with e.g. students) you can also use our linktree.

Credits

Light color mode Light color mode

Robot Components is an open-source project that was initiated by the chair of Experimental and Digital Design and Construction of the University of Kassel. The plugin is currently further developed and maintained by Arjen Deetman. All developers and contributors are listed here.

Robot Components uses the ABB PC SDK for real-time connection to ABB Robots, you can find the SDK used in this project here.

Robot Components uses the OPW kinematics solver as described in the paper 'An Analytical Solution of the Inverse Kinematics Problem of Industrial Serial Manipulators with an Ortho-parallel Basis and a Spherical Wrist' by Mathias Brandstötter, Arthur Angerer, and Michael Hofbaur.

We would like to acknowledge Jose Luis Garcia del Castillo and Vicente Soler for making their Grasshopper plugins RobotExMachina and Robots available. Even our approach is different it was helpful for us to see how you implemented certain functionalities and approached certain issues.

Known Issues

Known issues are listed here. If you find a bug, please help us solve it by filing a report.

Roadmap

Please have a look at the open issues and projects to know what we are currently developing and what we want to add and change in the future.

Contribute

Bug reports: Please report bugs at our issue page.

Feature requests: Feature requests can be proposed on our issue page. Please include how this feature should work by explaining it in detail and if possible by adding relevant documentation (from e.g. ABB).

Code contributions: We accept code contributions through pull requests. For this you have to fork or clone this repository. To compile the code all necessary references are placed in the folder DLLs. We only accept code contributions if they are commented. We use XML comments to auto-generate our API documentation. You can read more about this topic here and here. If you want to make a significant contribution, please let us know what you want to add or change to avoid doing things twice. For questions or if you want to discuss your contribution you can reach out to one of the developers. Feel free to add your name to the list with contributors before you make a pull request.

Adding support for other brands: Robot Components is developed to intuitively program ABB robots inside Grasshopper. At the moment we have no plans to implement the support for other robot brands. However, we have a few ideas about how to implement this and since we want to keep Robot Components as intuitive as possible we kindly ask you to contact one of the developers first in case if you want to implement other robot brands. We are happy to contribute to and support this development.

Cite Robot Components

Robot Components is a free-to-use Grasshopper plugin and does not legally bind you to cite it. However, we have invested time and effort in creating Robot Components, and we would appreciate it if you would cite if you used it. Please use our DOI from Zenodo. To cite all versions of Robot Components in publications use:

Arjen Deetman, Gabriel Rumpf, Benedikt Wannemacher, Mohamed Dawod, Zuardin Akbar, & Andrea Rossi (2024). 
Robot Components: Intuitive Robot Programming for ABB Robots inside of Rhinoceros Grasshopper.
Zenodo. https://doi.org/10.5281/zenodo.5773814

Note that there are two reasons for citing the software used. One is giving recognition to the work done by others which we already addressed. The other is giving details on the system used so that experiments can be replicated. For this, you should cite the version of Robot Components that is used. On our Zenodo page you can find how to cite specific versions. See How to cite and describe software for more details and an in-depth discussion.

Version numbering

Robot Components uses the following Semantic Versioning scheme:

0.x.x ---> MAJOR version when you make incompatible API changes
x.0.x ---> MINOR version when you add functionality in a backward-compatible manner
x.x.0 ---> PATCH version when you make backward-compatible bug fixes

Versions that were not released on Food4Rhino are marked as pre-release.

Used by

An overview of the projects wherein the software is used can be found here.

License

Copyright (c) 2018-2020 EDEK Uni Kassel
Copyright (c) 2020-2024 Arjen Deetman

Robot Components is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.0 as published by the Free Software Foundation.

Robot Components is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Robot Components; If not, see http://www.gnu.org/licenses/.

@license GPL-3.0 https://www.gnu.org/licenses/gpl-3.0.html

robotcomponents's People

Contributors

ar0551 avatar arjendeetman avatar benediktwannemacher avatar gabrielrumpf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

robotcomponents's Issues

Mod: Make controller utility base class

Make a controller utility base class and all functionality we have to this base class.

Everything is now written in the component classes. We should centralize this to avoid duplicate codes, and to make it accessible through the API of the base class.

Add: Path Generator option to output current target instead of only current end plane

It would be useful to add an option on the Path Generator to output the current target and not only the current end plane. This would be very helpful when debugging issues with position mismatches between the RC simulation and RobotStudio or the controller itself.
If the robot is in an interpolated position which is not a target, this output would be null, but when being exactly on a target position it would return the target object itself.

Mod: Change code generation interface, abstract classes and RAPID generator

The 'Action' abstract class has no default behavior so this can be an interface:

  • Change the Action abstract class to an IAction interface.

Changing the Action abstract class to an interface allows for the implementation of different abstract classes. This can be changed to (for discussion):

  • Change the IDeclaration interface to a Declaration abstract class.
    • Helper methods for Parse and TryParse can be part of the abstract class.
    • The Scope, VariableType and Datatype properties can be default properties. Also allowing for partially standard methods to create the RAPID code lines.
  • Change the IInstruction interface to an Instruction abstract class.
  • Change the IDynamic interface to a Dynamic abstract class.

RAPID generator:

  • The methods ToRAPIDDeclaration(RAPIDGenerator) and ToRAPIDInstruction(RAPIDGenerator) can be replaced with a single ToRAPIDGenerator method.

This will break the API, therefore, this will be changed/optimized in version 3.

Add: Joint Target component

Input:

  • Name
  • Robot Joint Position
  • External Joint Position

Output:

  • Joint Target

Also add the Joint Target goo class, parameter and deconstructor.

Add: Ext Joint Position component

Ext Joint position component. Replaces the external axis values input of the Target component.

Input:

  • external axis value 1
  • external axis value 2
  • external axis value 3 (variable input parameter)
  • external axis value 4 (variable input parameter)
  • external axis value 5 (variable input parameter)
  • external axis value 6 (variable input parameter)

Output:

  • Ext Joint Position

Also add the Ext Joint Position goo class, parameter and deconstructor.

Add: Implement ABB CRB15000

Implementing the new ABB CRB15000. This requires a modification in the kinematics engine to account for the offset on axis 5.
Test implementation with custom robot:
CRB15000.zip

Mod: Change List type to IList interface in constructors and methods

This change will make the core library compatible with Iron Python inside Grasshopper since the Python list can be cast to the IList interface.

Iron Python implemented the following interfaces: IList, ICollection, IList<object>, ICollection<object>, IEnumerable<object>, IEnumerable

Add: Rob Joint Position component

Construct a Rob Joint Position based on six fixed number inputs. Needed for constructing a Joint Target component.

Input:

  • rob axis value 1
  • rob axis value 2
  • rob axis value 3
  • rob axis value 4
  • rob axis value 5
  • rob axis value 6

Output:

  • Rob Joint Position

Also add the Rob Joint Position goo class, parameter and deconstructor.

Mod: Pick Task in Remote Connection component

Since we do not support multi move, we always upload to the first task. The same as for the "Pick controller" functionallity we can make a window wherein the user can select the task to which the modules should be uploaded in case multiple tasks are available.

We can use the label message of the component to show the task name.

1520ID and robot tool attachment problem

Dear RobotComponents Team,

Firstly, thank you for this awesome ABB tool for grasshopper. I'm trying to implement 1520ID welding robot to your plug-in (uploaded the files). As you can see from the screenshot image, tool is not attached to robot while following the path. Maybe you can show me where im missing. Thank you a lot. Best Regards.

Gani Melik Onder (https://www.linkedin.com/in/ganimelikonder/)
R&D Engineer from AlloyAdditive

[1520ID.zip](https://github.com/RobotComponents/RobotComponents/files/7763294/1520ID.zip
1520ID

Mod: Program checks for multi move programming

  • Check zone data of movements before sync points
  • Check the amount of synchronized movements between two sync points in tasks that need to be synced
  • Check if a Sync Move On instruction is followed by a Sync Move Off instruction (and if movements are defined in between)
  • ..
  • .

@ar0551: Is there more to check for?

Mod: User logon to controller

Now we always logon with a default user:
_controller.Logon(UserInfo.DefaultUser);

We should make it possible to logon with a custom username and password.

Add: Add MoveExtJ to the possible movement types

Can be implemetend after the integration of joint targets.

MoveExtJ examples codes:

CONST jointtarget j2 := [[9E9,9E9,9E9,9E9,9E9,9E9], [30,9E9,9E9,9E9,9E9,9E9]];
MoveExtJ j2, rot_ax_speed, z50;

Should set the rob joint values automatically to 9E9.

This an addition to the existing Movement component and baseclass.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.