Hello
. I’m highly interested in working on this project from GSoC and it perfectly aligns with my skill set and experience. I understand what the project entails and am starting to draw up my proposal.
My understanding of the project is that I’m to use the existing rmw_zenoh’s conversion from Ros middleware API to Zenoh protocol (I checked out its DOCs) to make Zephyr module able to create a ros controller inside the microcontroller directly, no agent in-between.
For the serialisation aspect since most of the RMW implementations use CDR format I thought it could still be used. Especially that its in little-endian format and that “msgs” could easily be reconstructed.
On the microcontroller instead of building a CDR framework I can use the already made MicroCDR framework for serialisation and de-serialisation. As it already highly optimised for embedded devices like ESP32 and can work on static buffers avoiding dynamic allocation in control loops.
In regards to “msgs” types, I thought that if I am to make a module for handling types and each having their de-serialisation/serialisation method it will be hectic and I also don’t want to shift the responsibility to the user. So I thought of using the ROSIDL framework though the one for microROS.
I assume that the project won’t want the full use of microROS, but it has to support default types like geometry_msgs, sensor_msgs, std_msgs etc. I can just use the ros_idl_generate_c ros package on the msgs then add the header files to the zephyr module also add the ros_idl_runtime_c module as dependency.
The microROS’s ros_idl_typesupport_microxcredds project already allows for conversions from CDR to struct and vice versa using the static memory. Using this will make me finish the project faster and usage of types even custom .msg files easier for the users (similar to normal ROS methods).
In regards to the benchmarking, Two topics will be created so that the microcontroller will just echo back msgs having unique ID. Then I can make a benchmarking ROS node that will use the time it takes to come back to know the latency then other values like jittering (I could use Watford algorithm for variance), throughput etc can be evaluated. This style I think will be convenient since to contrast with DDS I just need to do similar Node with microROS on the microcontroller. And the same benchmarking node works fine with no modifications
Please guys, I just need your input if open robotics will not want dependence on the microROS project or the module has to be from scratch. Also those dependencies are very lightweight because I’m not using the full microROS infrastructure and I have experience with c++ memory management, Zenoh and Zephyr.