What are the actual Operating System Abstractions required by ROS 2?

asked 2022-10-26 06:00:49 -0500

giyij gravatar image

updated 2022-10-26 22:54:49 -0500

What are the actual Operating System (OS) abstractions/services that ROS 2 applications actually depend on? If this question is too hard to answer directly, what kind of work should I do to discover all the the OS abstractions/services that ROS 2 applications use?

Specifically, I'm interested in understanding the OS abstractions necessary to run ROS applications and not the OS abstractions required to develop ROS 2 applications.

Examples of OS abstractions I am referring to include:

  • File System (which to my knowledge ROS 2 requires).
  • Network Drivers (which to my knowledge ROS 2 also requires).

I'm hoping to understand ROS 2's OS abstractions to a level deep enough where I might be able to try and port it to a presently unsupported OS as an educational exercise and because it might be something useful to the ROS community.

Would really appreciate it if someone can point me in the right direction so I can do some further research and learning about this!

Thanks in advance.

edit retag flag offensive close merge delete

Comments

Just a quick note: I don't believe there is any documentation on this. In general a "fully" POSIX compliant OS is expected I believe.

One project that has done (some) work in this direction -- although implicitly -- would be micro-ROS. They've taken the packages in the "lowest layers" of the stack (such as rcl, rcutils and others) and investigated them to see which OS functionality is used by default. They've then made use of that functionality configurable at build time. This allows for configuration of micro-ROS which don't use any filesystem APIs fi, or prevent dynamic memory allocation.

You could start there.

There are also ports of ROS 2 to QNX and VxWorks, but both offer pretty OK POSIX interfaces these days, so may not be as informative any more.

gvdhoorn gravatar image gvdhoorn  ( 2022-10-27 01:15:33 -0500 )edit

Thanks so much for pointing me to micro-ROS - this looks very promising. The part about configuring micro-ROS to not use file system APIs or prevent dynamic memory allocation is most intriguing to me. I took a look at their repo and it was a great starting point!

giyij gravatar image giyij  ( 2022-10-27 05:14:45 -0500 )edit