ROS2 on VxWorks RTOS

Hello everyone,

I have ported ROS2 crystal release to VxWorks. Results are posted to Wind River Labs - https://labs.windriver.com/ros2-for-vxworks/#read and GitHub.

VxWorks ROS2 port is tested on the UP Squared board and QEMU. It should also work on Raspberry Pi 3, however, I didn’t test it yet. It utilizes the latest VxWorks SR0610 release and those of you who have VxWorks license could follow the build instructions and try it out. We also plan to provide for everyone a freely downloadable VxWorks SDK which will allow people building ROS2 applications on top of VxWorks.

I’m currently porting ROS2 dashing release and plan to publish my changes on GitHub in July.

Looking forward to your feedback!

Kind Regards,
Andrei.

TL;DR
Here are more technical details. There are two repositories available on github
https://github.com/Wind-River/vxworks7-ros2-build contains build scripts to create a bootable VxWorks ROS2 image which can be flashed to the USB stick.
https://github.com/Wind-River/vxworks7-layer-for-ros2 contains patches to be applied on ROS2 source packages. Most of the changes are related to the C++ library we have and to the obvious fact that VxWorks is not Linux and some header files or functions are missing. I hope to submit all necessary patches to the ROS2 main development tree and drop this repository completely someday.
VxWorks ROS2 build works the same way as any other cross build. First, you need to setup a VxWorks development environment and then run colcon. Currently I built ROS2 with BUILD_TESTING=OFF


Here is an example of how to run timer_lambda from the VxWorks command line. All ROS2 binaries are built as user processes - they called Real Timer Processes (RTPs) in VxWorks.

5 Likes

Hello @razr, this is great for the community. We’d have couple of questions:

  1. How much did you need to change in ROS2 code? That is, is there any POSIX-compliance in VXWorks?
  2. Do you plan to support Python 3.5 such that one could then run colcon test and e.g. https://github.com/ApexAI/performance_test in VxWorks directly?
  3. Do you plan to support https://www.renesas.com/us/en/solutions/automotive/soc/r-car-h3.html or https://developer.nvidia.com/embedded/jetson-agx-xavier-developer-kit?
  4. Which compilers (gcc, clang, proprietary…) and libraries (libc,
    libc++ ) do you support? Which versions?
  5. What kind of development environment, tools, application level debuggers (e.g. gdb) do you provide?

We would then have lots of VxWorks specific questions (e.g. how do you do process and memory management) but let us know if we should post them here or in a separate thread or privately.

D.

Hi @Dejan_Pangercic,
I’m also very happy about it. Thanks much for your questions. Let me try to answer them as much as I can :

  1. How much did you need to change in ROS2 code?
    @razr - Surprisingly, very little. The reasons are different.
  1. Do you plan to support Python 3.5 such that one could then run colcon test
    @razr - It is python 3.8 - https://github.com/Wind-River/cpython

and e.g. https://github.com/ApexAI/performance_test in VxWorks directly?
@razr - Never try to run colcon in VxWorks, but yes, it should be possible. But I think all performance tests are written in C++?

  1. Do you plan to support https://www.renesas.com/us/en/solutions/automotive/soc/r-car-h3.html
    @razr - RCAR H3 is supported by VxWorks- https://marketplace.windriver.com/index.php?bsp&on=details&bsp=13325. I just need to build ROS2 for it.

  2. Which compilers (gcc, clang, proprietary…) and libraries (libc,
    libc++ ) do you support? Which versions?
    @razr - clang 7 cross toolchain, libc is proprietary, and we have Dinkum C++11/14

  3. What kind of development environment, tools, application level debuggers (e.g. gdb) do you provide?
    @razr - we provide an Eclipse-based IDE called Workbench - https://www.windriver.com/products/development-tools/#workbench and everything which allow building deploying and debugging on the embedded target.

Please shoot all your questions here. I would be glad to answer them.

Kind Regards,
Andrei

1 Like

Hello @razr ,

Does your port makes ROS2 deterministic ? If so on which VxWorks features are you relying for beeing ensure that it’s deterministic ? Because as far as I know, POSIX layer is not deterministic on VxWorks.

Thanks