- Can the EPOS4 (or IDX) be used by ROS?
- Is EPOS4 ROS compatible and ready for ROS?
- What is maxon's recommended ROS system setup?
- Are there any recommended ROS application code samples present?
The EPOS4 offers a CAN and EtherCAT bus interface, i.e. the EPOS4 can be in use by any master system environment (and also ROS) which offers CANopen or EtherCAT interface libraries. Finally it will be based on an user's experience to implement a ROS application code commanding the EPOS4 based on such a interface library.
ROS + EPOS4: Typical challenges
Different users have already successfully implemented ROS applications commanding the EPOS4. Some solutions can be even found by google and the keywords "EPOS" and "ROS":
maxon cannot take any responsibility for such 3rd party solutions. Please find a ROS solution recommended by maxon further down below (-> maxon's recommended ROS / EPOS4 solution).
The feasibility of ROS for a certain applications depends on the system's requirements concerning real-time performance. Successful ROS application code development demands for some ROS, motion control, and programming experience finally.
- The ROS system setup and selection of libraries is typically already one initial demanding challenge for most ROS users.
- Knowledge in motion control commanding based on the "CiA402 - CANopen device profile for drives and motion control" standard is required for code implementation.
ROS = Ready to run solution for robotic systems?
One common misunderstanding is often that ROS is expected to be a ready-to-run system environment or even complete application code package. This misunderstanding might be already based on the term "ROS - Robotic Operating System". This sounds like a complete easy to use package for robotic systems.
-> ROS is no ready-to-run code package!
- ROS is an ecosystem of robots and modular software components written mostly in C++/Python.
- ROS can be seen like a huge box of different software tools based on specific Linux versions and lots of different 3rd party libraries.
- All of the ROS code and libraries are open source but often developed by students or temporary university researchers. This can result in the fact that some libraries are not regularly updated or the implemented functionality had been focused on a concrete application's demands.
- There is quite often a strong dependency in between a concrete library, Linux or even hardware versions which need to fit together. This results in the drawback that some knowledge and practical experience is required what ROS components and libraries fit together or have to be adapted, enhanced, or fixed to use it in a more general way.
ROS system setup and library selection?
ROS users sometimes already struggle to set up a ROS system environment (and software tools) and select required and matching libraries initially. This is not a specific problem linked to the usage of specific ROS devices (like the EPOS4) but ROS in general. Although there are lots of libraries for different interfaces and devices present by http://wiki.ros.org, some of these libraries are not up-to-date anymore, the code might be incomplete and just addressing specific device features. The compatibility of concrete ROS libraries as well as the feature set of a library has to be checked based on the system environment (e.g. Linux version) and application's requirements. This is an initial important step to set up a system targeting concrete motion control devices (like the EPOS4) the best possible way.
ROS1 versus ROS2:
There are two ROS versions present called ROS1 and ROS2. ROS1 is typically meant when ROS is requested or stated. ROS1 is the original ROS tool kit mainly in use by university and research projects but with some functional lack for industrial applications. ROS2 is a fully new code design for different kinds of industrial robots (e.g. AGVs in warehouses).
- ROS1 has the main drawback that its real-time capabilities are not as perfect as required by industrial robots demanding for a synchronized or coordinated multi-axis motion controlled by the ROS master. ROS1 also does offer any not address data safety and Therefore ROS1 is mainly in use by student's projects but not quite often seen by industrial solutions.
- ROS2 is based on a fully new code design overcoming the real-time lacks of ROS1 and also taking care of data security aspects and access rights. ROS2 is strongly pushed by industrial companies (e.g. Amazon). ROS2 seems to be a quite promising solution for future industrial applications but currently still has some lack of missing interface (communication) or specific device libraries. ROS1 libraries cannot be used because ROS2 is based on a complete new internal code. ROS2 applications often demand for more powerful hardware (e.g. expensive NVIDIA boards) and the most recent specific Linux version if multi-axis real-time topics are focused.
- ROS2 and ROS1 are not(!) compatible (due to a complete different new ROS2 code base). It is just possible to use ROS1 software components in a ROS2 system environment by a so-called ROS1/ROS2 software bridge. Such a bridge solution has the drawback that some of the ROS1 limitations are still present.
Getting into ROS
ROS is complex. It provides many useful features, but learning it will take a while. There is some Linux and programming base knowledge required but there will be still some effort present then to get into the ROS basics and understanding these properly. It starts already with the correct CAN bus wiring and configuration (-> CAN bus topology and bus termination) which is mandatory for any successful data exchange independent what master system is in use. Finally there are lots of different fields of experience (ROS, Linux, programming, CANopen, CiA402) required before the motors move based on the application's demand.
maxon's recommended ROS1 + EPOS4 solution:
maxon has started a project with an experienced 3rd party ROS partner in 2021. The intention has been to provide some guidance concerning the main challenges (like system setup, library selection, multi-axis control) faced by ROS users.
The initial result of this ROS project is a document about ROS1 installation and some sample code for multi-axis control based on a widely in use CANopen library (-> http://wiki.ros.org/ros_canopen) and a ROS profile generator (-> https://moveit.ros.org) if the EPOS4 has to be commanded in "CSP - Cyclic Synchronous Position" mode. These maxon recommended initial results of investigation are present by the following public links:
The package present by these links holds ...
- ... a document which describes how to setup a PC, Raspberry Pi, or NVIDIA based ROS1 system environment, what Linux version and libraries are required and what real-time performance can be expected.
- ... some code samples how to command the EPOS4 via a ROS1 master application by different EPOS4 operating modes and CAN.
Please also note the following wiki.ros.org tutorial pages about the EPOS4:
The documents and software had been developed by maxon's experienced ROS partner Cyril Jourdan of the company "www.roboprotos.com". Cyril Jourdan will also provide some limited(!) support for free by the mentioned wiki.org or github websites or his account (->https://answers.ros.org/users/4040/cyril-jourdan). He will be the first point of contact in case of specific ROS questions or problems by using the documents or sample code. Roboprotos (and Cyril) is an independent consulting and engineering company offering such services for 3rd parties too. If there is some additional need for ROS training, ROS application development, or consulting services, this can be offered by Cyril Jourdan and Roboprotos directly. Such services will be charged by Roboprotos and go far beyond maxon's possible product or ROS support.
ROS2 + EPOS4
If you are thinking about ROS2 already, please check the following link which holds a document plus some sample code how to use ROS2 by a ROS1 bridge:
Some information about the base ROS2 version in use by this package can be found by this 3rd party link:
Alternative 3rd party ROS solutions (without maxon support):
- ROS + CAN + EPOS Command Library + EPOS
There are also other 3rd party ROS solutions present based on the "EPOS Command Library", e.g.
These packages might not(!) be up-to-date and not(!) be based on the latest "EPOS Command Library" version or EPOS4. maxon has not tested these code packages and cannot provide support for that. Due to the fact that these packages are based on the "EPOS Command Library", this also means that there is only SDO data exchange supported and its not real-time capable. Such a solution will not be sufficient for applications which have to command multi-axis applications at a fast rate. maxon's (resp. Cyril Jourdan's) ROS / EPOS4 solution mentioned above offer a much better base for such applications.
- ROS + SOEM + EtherCAT + EPOS4
There is a quite new solution (dated 2021) called "maxon EPOS EtherCAT SDK" present by github:
This package had been developed by a master student of Swiss ETH Zuerich's Robotic System Lab. The package has not been tested by maxon up-to-now but might be interesting due to EtherCAT (instead of CAN). It is seems to be based on ROS Noetic. Therefore real-time performance of ROS1 and the "SOEM - Simple Open EtherCAT master" might be an interesting point of investigation based on application's demands. maxon cannot provide support for this code package and solution but Mr. Linghao Zhang who provided it on github might be open for feedback and questions (-> https://github.com/zoenglinghou or www.linkedin.com/in/linghao-zhang).
Next action steps?
We hope these hints help to provide some starting point for an intended ROS application development. Just keep in mind that ROS is no(!) ready-to-run solution but the documents and samples provided by http://wiki.ros.org/maxon_epos4_ros1 and https://github.com/Roboprotos/maxon_epos4_ros1 might be a good starting guide for adaptation according to a concrete system's and application's requirements.
If you are thinking about an industrial ROS project, please let us know more details by a support request (especially if you intend to use ROS2):
- Application type
- Number of axis in use (resp. to be controlled by the ROS master)?
- Is there a need for multi-axis control and real-time data exchange?
- ROS system environment in use?
(ROS1 or ROS2, Linux version, ROS libraries, ...?)
- ROS's master's hardware in use?
(e.g. PC, Raspberry Pi, NVIDIA, or ...?)
- Your ROS and ROS library experience level?
- Your company and contact details
Alternative master systems instead of ROS?
Most industrial applications are based on PLCs as real time masters. The PLC suppliers also offer so-called motion control or NC libraries (for CiA402 based motor controllers like the EPOS4) and CANopen or EtherCAT bus interfaces. In case of industrial multi-axis or robot application there are quite often one of the following (non ROS) master systems in use:
- Beckhoff's TwinCAT & NC library
- OMRON's Sysmac NJ
- maxon's MasterMACS