Skip to content

ScalABLE40/robin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ROBIN

ROBIN project Build status

A ROS-CODESYS shared memory bridge to map CODESYS variables to ROS topics.

This bridge is the result of the ROBIN project, a Focused Technical Project (FTP) of the ROSIN European project.

Getting started

The bridge is made up of two components:

  • A ROS package that doesn't require any manual configuration other than the installation of its dependencies. The package contains a ROS node that reads/writes data from/to shared memory spaces and publishes/receives messages to/from ROS topics.
  • A CODESYS library to be used in a CODESYS project created by the user. An example project is provided in robin_updater/src/robin_updater/cfg/codesys_project.xml. The library contains a Robin function block that reads/writes data from/to shared memory spaces and writes/reads it to CODESYS user-defined variables.

The following IEC 61131-3 data types are currently supported:

  • BOOL
  • BYTE
  • SINT, INT, DINT, LINT, USINT, UINT, UDINT, ULINT
  • REAL, LREAL
  • CHAR, STRING

As well as arrays and custom structs. The following standard ROS message packages are already defined as CODESYS structs and available on the Robin CODESYS library:

These variables have to be defined on both the CODESYS project and the ROS package. For arrays or for structs with string or array members, because these data types are handled as non-POD (Plain Old Data) objects in C++, the mapping between the C++ variables and the ROS messages has to be explicitly defined. However, an updater application was developed to automate most of this process. The user simply needs to define its desired variables on the CODESYS project and run the updater.

Prerequisites

Installation

  1. Install CODESYS library:

    1. Open CODESYS Development System V3
    2. Go to Tools->Library Repository->Install
    3. Find and select robin_bridge/src/robin.library
    4. Close the Library Repository dialog
  2. Create catkin workspace (if non-existent):

    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws
    catkin_make  # or 'catkin build'
    source ~/catkin_ws/devel/setup.bash
  3. Clone repository into catkin workspace (eg. ~/catkin_ws):

    cd ~/catkin_ws/src
    git clone https://github.com/ScalABLE40/robin
  4. Install updater package dependencies:

    rosdep install robin_updater
  5. Compile bridge package:

    cd ~/catkin_ws
    catkin_make robin  # or 'catkin build robin'

Usage

  1. Create CODESYS project. You can either:

    • Create your own project and add the Robin library to it.

      1. In the Devices tree, double click Library Manager and open the Add Library dialog
      2. Find and select the previously installed Robin library and click OK
      3. You can now use the Robin function block as shown in the Examples section
    • Create a new empty project and import the example project from codesys_project.xml.

      1. Go to Project->Import PLCopenXML...
      2. Find and select the XML file
      3. Select all items and click OK

    Variable length arrays are only partially supported in CODESYS. To make the updater interpret a regular fixed length array as a ROS variable length array, preceed its declaration with the line: {attribute 'robin_var_len'}.

  2. Make sure you can establish connection with the PLC. Go to the Devices tree, double click the Device and then:

    • Scan Network... for your PLC device.

    • Or add it manually Device->Options->Manage Favourite Devices...

  3. Go to Windows Search Bar->Services and make sure Windows OpenSSH Authentication Agent service is running (Startup type: Automatic).

  4. Run the updater application:

    1. Go to Tools->Scripting->Execute Script File...
    2. Open the script file robin_updater/src/robin_updater/src/robin_updater/start_update.py
      • If you don't have access to it from CODESYS, first copy it to your Windows system
    3. Input the requested information (target address and password) and follow the script's execution
      • NOTE: Password will be asked again during the script
  5. Launch the robin ROS node. Will restart codesyscontrol service and then launch the node:

    To avoid having to manually restart codesyscontrol after each update run:

    echo "$USER ALL=(ALL:ALL) NOPASSWD: /bin/systemctl * codesyscontrol" | sudo EDITOR="tee" visudo -f /etc/sudoers.d/allow_restart_codesyscontrol

    This will allow the command systemctl start/stop codesyscontrol to be run with sudo without having to input a password. The user must be in the sudo group.

    If your system does not have systemctl:

    echo "$USER ALL=(ALL:ALL) NOPASSWD: /usr/sbin/service codesyscontrol *" | sudo EDITOR="tee" visudo -f /etc/sudoers.d/allow_restart_codesyscontrol

    This will allow the command service codesyscontrol start/stop to be run with sudo without having to input a password. The user must be in the sudo group.

    roslaunch robin_bridge_generated run.launch

    If you prefer not to give those permissions run the node manually:

    rosrun robin_bridge_generated robin_node_generated

Examples

Example 1 Example 2 Example 3

License

License


rosin_logo

Supported by ROSIN - ROS-Industrial Quality-Assured Robot Software Components.
More information: rosin-project.eu

eu_flag

This project has received funding from the European Union’s Horizon 2020
research and innovation programme under grant agreement no. 732287.