[ros-users] [Discourse.ros.org] [General] Why don't we use ROS?

Bas de Bruijn ros.discourse at gmail.com
Mon Nov 13 18:24:21 UTC 2017

Hi, long time lurker here :)

I think this remark of Chris Albertson about low level hardware control is spot on. 

Allow me to shamelessly plug a project which addresses this issue :)
Ive been participating in another Open Source project called Machinekit, which is fills the gap of low level hardware control.
Machinekit is a real-time motion/io control stack. Forked from LinuxCNC a few years ago. It can be used in more applications than CNC control though.

The gem in Machinekit and LinuxCNC is the HAL layer, the Hardware Abstraction layer. Developing a system is done by configuring it, instead of programming/compiling. One basically wires components together and puts these functions on an execution thread. 
The realtime thread typically has a cycle time of 1ms, but can be faster/slower depending on hardware.
This means that interfacing with a DC motor, or a stepper motor does not change the system other than choosing a different component and hardware.
One can change the running realtime system on the fly by adding/removing components and (re)wiring them.
Theres also are C/C++/Python API so one can interface from a (userland) application with the realtime HAL.

Machinekit runs on linux platforms, typically Debian, with ARM/x86/x64 hardware, an example would be a Beaglebone Black where the PRUs do the realtime tasks, a PC with Mesanet PCI FPGA card and daughterboard, or a De0 nano SOC which includes the PFGA. The Mesanet firmware (which is very stable) also runs on this. Making re-use of the industrial Mesanet daughterboards possible.

So instead of doing path planning in realtime, we can do off line" planning with ROS (ROS does the path planning) and we take this trajectory as input.
An example (prototype, proof of concept) is here: The trajectory is put into a HAL ringbuffer by a ROS node written in Python. Machinekit HAL components then read from the ringbuffer, interpolates the segments and gets the motors moving.
video: https://youtu.be/6Mzok9r9k88

We would love to one day have a generic ros_control node to interface with the HAL layer.

[Visit Topic](https://discourse.ros.org/t/why-dont-we-use-ros/3161/12) or reply to this email to respond.

More information about the ros-users mailing list