Not to add further confusion, but another possibility could be to write C# wrappers for the partially-complete ROS-C library: http://wiki.ros.org/rosc Looks like no significant changes since last year, but you could get in touch with the devs and ask about contributing to it. On 20 July 2014 16:17, Zsolt Szabo wrote: > Dear ROS Community, > > First of all, let me say hello. I am Zsolt Szabo from Obuda University > (Budapest, Hungary). Our department has recently bought a Turtlebot2 robot > (and another department from the uni has a Nao, if I am correct) - both is > running ROS. > > However, students in our faculty mainly learn C# (with a little (very > little) java). Of course, you can say that they should use rosjava, or > learn a proper programming language instead. However, it is not for us to > question their choice. The fact is that most of the students know only C# > and I plan to make it possible for them to work with ROS using C#, somehow. > > I checked the official roscs, but it is very old and uses heavily some cpp > middleware. Also, the code is funny on some places. So instead I started > messing around, and managed to create a lightweight (~2K) cpp middleware > that allowes sending fixed-size text messages between c# ROS nodes. > However, sending complex (struct) messages, this poses a problem. > > Without a middleware, I do not think that it is possible, as the mono > documentation says This makes it nearly impossible to directly > invoke functions that are not C ABI compatible, such as C++ library > functions that are not extern "C". > > Another solution I tried is re-implementing the big ROS api itself, but to > be honest I did not put too much effort into this one. I checked the Master > API ( http://wiki.ros.org/ROS/Master_API ), I managed to execute the > getSystemState via XMLRPC, but I got stuck at the registerSubscriber call, > because the ROS documentation says "the subscriber will also receive > notifications of new publishers via the publisherUpdate API" , and I found > absolutely ZERO documentation about the publisherUpdate API ... > > So to access ROS from c#, I think we have the following three > possibilities; these pose three nice questions: > > 1) try to use and modify the old roscs ==> QUESTION: any > details/documentation about the current roscs implementation? Does anyone > have any clue about the code structure and about the reason behind the > quarks in the .cs code (e.g. MessageField.cs freaks me out A LOT) > > 2) implement a new roscs with this lightweight cpp middleware using > converters or something similar to support more complex messages. ==> > QUESTION: do you think this is doable? Right now, to pass non-text > messages, I managed to give the absolute pointer of the data from the cpp > middleware to the c# code. But I do not think that a cpp code and a c# code > sharing the same pointer is a wise idea... > > 3) implement a new roscs without a cpp middleware (just like rosjava), > with XMLRPC + TCPROS support. ==> QUESTION: do you think this is doable / > worthwhile? QUESTION: can anyone point me to the proper protocol > specifications? the ones I found at the ROS wiki seem kinda stripped down > and short. > > Sorry for the long mail, and thank you all for your help and suggestions. > > Yours, > Zsolt Szabo > _______________________________________________ > ros-users mailing list > ros-users@lists.ros.org > http://lists.ros.org/mailman/listinfo/ros-users >