A middleware implementation for ROS 2 (humble) which can be cross-compiled to WebAssembly to run on the browser. The middleware is divided into three main packages:
-
rmw_wasm_cpp$\rightarrow$ this package acts as the adapter between ROS 2 and the middleware implementation. One of its main tasks is to convert ROS messages to YAML strings; this is accomplished with the help of the dynamic message introspection (dynmsg) packaged developed by Open Robotics. -
wasm_cpp$\rightarrow$ the role of this package is to implement the middleware in accordance to the DDS specification (work in progress); it also functions as the bridge to JavaScript modules. -
wasm_js$\rightarrow$ this package manages the participating entities and distributes the ROS message data accordingly. Given that processes on a browser run on a single main thread, this package uses web workers to run multiple ROS nodes simultaneously.
The figure below represents an overview of the middleware packages:
rmw_wasm is currently under development. Not all features are supported (yet).
| Feature | Support |
|---|---|
| Publishers | ✔️ |
| Subscribers | ✔️ |
| Service servers | ✔️ |
| Service clients | ✔️ |
| Actions | ❌ |
| Parameters | ❌ |
| QoS | ❌ |
If you would like to contribute, thank you!! We have some guidelines to help you along. If you have any questions, do not hesitate to ask 😁.
