GithubHelp home page GithubHelp logo

fros's Introduction

FRos is a node framework to integrate a Fieldbus into the Robot Operating System (ROS). This project depends on the use of an Ixxat FRC-EP170 or Ixxat FRC-EP190 gateway device, which to our knowledge are one of the few gateway devices on the market that can be easily integrated into a ROS environment. ROS is widely used for research and in commercial products in the field of robotics. It allows an easy integration of different sensor types into a common environment and due to its open source nature, many different software packages and drivers are already openly available.

In order to extend the ecosystem beyond the widely used CAN and Ethernet standard to include FlexRay in ROS, we provide this framework for the currently available Ixxat gateways Ixxat FRC-EP170/190. This node handles all the functionalities for interacting with the device and publishes the received messages as topics in ROS.

  • Gateway device
  • Fieldbus definition file (e.g. *.xml / *.dbc)
  • Ethernet port on your computer


The following section will give you a fundamentel overview of the project and its single modules. We will also provide you with information to get you own project running. In the area of research, oftentimes the necessary tools need to be developed and be available fast and the important role of tools is overshadowed by potential results. The requirements for a research project may change and the adaption and expansion of the previous research topic needs to happen fast. Thus, the here presented framework is built with auto code generation in mind. A provided *.dbc network description is used to automatically generate all the relevant code snippets and files.

[↑ to top ↑]


The module FRos currently consists of:

The framework itself (ros-node) for ROS that handles the connection to the device and the ROS publishers.

C-coderdbc (c-coderdbc) as a fork of the c-coderdbc by github.com user astand. This program was created to output C source code from a given *.dbc file. It has been modified for this use case to output:

  • a more elegant C code based on C structs and bitfields
  • copy-paste ready code snippets to handle the initialization of ROS publishers, to call the appropriate functions based on the message ID and also to generate the necessary *.msg files for ROS.

The FRos framework is setup as such, that the relevant code snippets can be easily integrated.

FRos framework schema

[↑ to top ↑]


To follow the process steps, we recommend the following setup:

  • Linux Ubuntu 20.04.5 LTS
  • IXXAT ACT 6 (on Windows)
  • ROS noetic

To integrate the Ixxat FRC into ROS, we will demonstrate the workflow in the following by using CAN as fieldbus. Therefore, we use the public available configuration file from commaai for demonstration purposes. We adapted this software project to work with two specific possible configurations. One configuration maps a selection of whole frames to GenEthernet, the other maps a selection of whole PDUs to GenEthernet. A third possible configuration, the mapping of all frames to GenEthernet, is not included in this release. This would require a different processing of the message ID.

Generally, the customer support and engineers at HMS will be able to assist you with your project plans. In the following paragraph, we can provide you with hints how to setup your environment so the outcome fits best for you.

Open Ixxat ACT and:

  1. Select New project and

  2. Select Gateway

  1. Select your device

  1. Add GenEthernet to your project

  1. Keep file description empty as for now and continue with OK

  1. Ensure the following settings:
  • Remote device: "FRC Device"
  • Role: Slave
  • Optimize for: Neutral
  • Interface: LAN
  • Port: 19227

  1. Add database file ( *.dbc, *.xml, ...) to e.g. CAN-1 (since we use CAN (vw_mqb_2010.dbc from commaai) as workflow example) or *.xml to FR-1 A / B. This depends on your use case and available fieldbus.

  1. Click "next" to continue

  2. Navigate to Tools > Options > Gateway and activate Adopt Source ID

Now the project is configured and we are able to map the data from Bus to Generic Ethernet (GenEthernet)

To apply the mapping, follow the following steps:

  1. Select GenEthernet [1]
  2. Select Messages [2]
  3. On the left column select Messages [3]

Hint: If FlexRay is your fieldbus, you have to generate a *.dbc file from *.xml by using Flx2CanDb, which will be provided to you by IXXAT on request.

Apply mapping:

  1. Drag & Drop the messages from left onto GenEthernet on right side (see image above how it could look like)

  2. Build configuration

  3. Inside the project folder, the file project_dir/DeviceConfig/0/GenEthernet-1.1.dbc will appear

  4. Mapped channels are inside the generated GenEthernet-1.1.dbc

  5. Download configuration to Device via IxAdmin (will be installed with ACT)

Switch to Linux OS and copy the created files

  1. Build c-coderdbc according to the instruction given in the readme.

  2. Create the folder you want to output the data in ./build, e.g. example

  3. Parse original database file (already used in 7.) to c-coderdbc CLI

./coderdbc -dbc ./example.dbc -out ./example -drvname example_gw

  1. Find the generated data in the folder you created, e.g. cd ./example/ros

  2. Copy the generated publisher into

./ros-node/src/FRos.cpp in line #269

  1. Copy the generated messages into

./ros-node/src/FRos.cpp in line #348

  1. Copy the content of the msg folder to ./ros-node/msg/

  2. Copy and replace the CMakeLists.txt into ./ros-node/

  3. Copy and replace the convert.h and decode.h into ./ros-node/include/

  4. Build ros node with

catkin_make

The CMakeList.txt will be automatically adopted to the messages, whilst generating the outcome of the c-dbcparser.

[↑ to top ↑]


After compilation the following steps are required to start the node:

  1. source devel/setup.bash
  2. roslaunch ixxat_gw ixxat_gw.launch

Now the node will start and establish the connection to the device. The topics will be published as soon as they are received by the gateway. Take a deeper look into the launchfile. There, you can change the IP to match your configuration etc.

[↑ to top ↑]


ISSUE #1: FlexRay allows for PDUs, and as such also its signals, to appear in more than one frame. This way, a specific PDU might be updated more frequently by, e.g. publishing it in two separate frames. Thus, with the analysis of only one of the two frames, there is data lost and the observed updaterate of the signals is halved.

SOLUTION #1.1:

  • Observe all frames that include this PDU, and with that the signal, and fuse them together in post-processing.
  • Note: We are currently working on supporting the wildcard mapping feature of the device. With this, we want to be able to decode all FlexRay frames and publish the contained PDU's as ROS topics. Stay tuned for that.

SOLUTION #1.2:

  • Change the configuration to map PDUs to GenEthernet, as such the signals will be updated by all the frames the PDU happens to be included.

[↑ to top ↑]

License: MIT

[ ↑ to top ↑ ]

@article{Schneider2024,
  title = {fROS: A Generic Fieldbus Framework for ROS},
  ISSN = {2379-8858},
  url = {http://dx.doi.org/10.1109/TIV.2024.3365849},
  DOI = {10.1109/tiv.2024.3365849},
  journal = {IEEE Transactions on Intelligent Vehicles},
  publisher = {Institute of Electrical and Electronics Engineers (IEEE)},
  author = {Schneider, Daniel and Kastner, Ludwig and Schick, Bernhard and Watzenig, Daniel},
  year = {2024},
  pages = {1–16}
}

[ [↑ to top ↑](#table-of-contents) ]

fros's People

Contributors

adrivelivinglab avatar ludwig-kastner avatar

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.