[ros-users] communicating with windows

Aaron Solochek aarons-ros at aberrant.org
Tue Jun 15 18:19:49 UTC 2010


Sounds like everyone agrees ICE is the best bet.  I'm going to start
playing with that.  I appreciate all the code examples I can see.

Thanks everyone.

-Aaron



On 6/15/2010 12:56 PM, Klaus Petersen wrote:
> I found the ros / ice combination quite ideal. ice works on a very broad 
> range of operating systems (windows, linux, osx etc.) and languages 
> (c++, c#, java etc.). It shares with ros the feature, that it is very 
> easy to use and very quickly to setup (especially if you want to do 
> something simple). As long as ros is not natively cross-platform to 
> windows, this seems a very nice solution to reach from a ros node to 
> windows pcs on the network. I didnt check to many other middlewares 
> though, only ACE, OpenRTM and Yarp (and these are all quite different 
> pairs of shoes as well). Compared to these ice was definitely the 
> easiest and performance-wise strongest choice. At least from my perspective.
> 
> I will see that I post some example code from my application tomorrow.
> 
> Klaus
> 
> 
> Ken Conley さんは書きました:
>> I would second what Klaus recommends (i.e. find some glue and use it).
>>
>> To answer your C# question, you can implement the communication layer of 
>> ROS. It will probably take a couple of weeks, though I imagine C# is 
>> harder. Of the other clients, only rospy and roscpp were implemented 
>> from scratch. The rest were implemented on top of roscpp. The hard part 
>> is that you'll have to write a message generator. Our format is simple, 
>> but serializers take time to get right, and the lack of a ROS build 
>> toolchain on Windows will probably make your workflow painful. The wire 
>> protocol itself is very simple and couple be done in a day or so if 
>> you're trying to do something simple.
>>
>> However, there are a lot of middlewares out there, like ICE, and you 
>> just figure out what can bridge between C# on Windows and C++/Python on 
>> Linux. It will probably save you a lot of time and effort. ROS is more 
>> about the integration of a packaging system, online tools, and coding 
>> community -- not middleware. Until we get a more complete toolchain 
>> running on Windows, you might as well take a shortcut.
>>
>>  - Ken
>>
>>
>> On Tue, Jun 15, 2010 at 9:15 AM, Klaus Petersen <petersen at vftb.com 
>> <mailto:petersen at vftb.com>> wrote:
>>
>>     Hi Aaron,
>>
>>     I have done both, using the python framework to communicate from windows
>>     c++ with ros nodes on linux, and checked proprietary solutions. I will
>>     re-post what I think the easiest way is to communicate in the python way
>>     below. However, in the end I came to prefer to communicate between
>>     windows and ros using ice (www.zeroc.com <http://www.zeroc.com>) If
>>     you just need to pass some
>>     data, this is very easy to set up. Check the documentation, they have
>>     some examples for basic remote message calling for c# as well. Ice has
>>     of course a different scope than ros and can not substitute its
>>     functionality (except if you build your own framework around it), but as
>>     I said for quickly passing data it is excellent.
>>
>>     Klaus
>>
>>
>>     The former post regarding windows / python / vc++ (not c# anyway):
>>
>>     To receive ros standard messages (Float32 in this example) in vc++
>>     (thats what I checked it with) I did something like this:
>>
>>     #undef _DEBUG
>>     #include <Python.h>
>>
>>     // the method that gets embedded into python
>>     static PyObject* ros_indirect_callback(PyObject *self, PyObject *args)
>>     {
>>            double double_data;
>>
>>            if (!PyArg_ParseTuple(args, "d", &double_data))
>>                    return NULL;
>>
>>            printf("Do something with the data %f here.\n", double_data);
>>
>>            return Py_BuildValue("i", 0);
>>     }
>>
>>     // some data in order to register the method
>>     static PyMethodDef embedded_methods[] =
>>     {
>>            {
>>                    "ros_indirect_callback",
>>                    ros_indirect_callback,
>>                    METH_VARARGS,
>>                    ""
>>            },
>>            {
>>                    NULL,
>>                    NULL,
>>                    0,
>>                    NULL
>>            }
>>     };
>>
>>     // thread that runs the ros node (gets locked after calling spin())
>>     void ros_thread::run(void)
>>     {
>>            Py_Initialize();
>>            Py_InitModule("ros_win", embedded_methods);
>>
>>            PySys_SetArgv(0, argv);
>>
>>            PyRun_SimpleString("import ros_win\n"
>>                    "import roslib\n"
>>                    "import rospy\n"
>>                    "from std_msgs.msg import Float32" );
>>
>>            PyRun_SimpleString("def callback(data):\n"
>>                    "       ros_win.ros_indirect_callback(data.data)\n" );
>>
>>            PyRun_SimpleString("rospy.init_node('listener',
>>     anonymous=True)\n"
>>                    "rospy.Subscriber('chatter', Float32, callback)\n"
>>                    "rospy.spin()\n" );
>>     }
>>
>>
>>     To send messages:
>>
>>     #undef _DEBUG
>>     #include <Python.h>
>>
>>     #include <string>
>>     #include <boost/lexical_cast.hpp>
>>
>>     using namespace std;
>>
>>     void send_double_data(double v)
>>     {
>>            Py_Initialize();
>>            PySys_SetArgv(0, argv);
>>
>>            string s_str = "str = " + boost::lexical_cast<std::string>(v);
>>            PyRun_SimpleString(s_str.c_str());
>>
>>            PyRun_SimpleString("rospy.loginfo(str)\n"
>>                    "pub.publish(Float32(str))\n");
>>     }
>>
>>
>>     For reference:
>>     http://www.ros.org/wiki/Windows
>>     http://docs.python.org/extending/index.html
>>     http://www.boost.org/doc/libs/1_42_0/libs/python/doc/index.html
>>
>>
>>     Aaron Solochek さんは書きました:
>>      > Yeah, I've read that.  It addresses getting ROS running on windows,
>>      > which is not what I want to do.  I don't need a complete ROS
>>     environment
>>      > on windows.  All I need is to communicate with a ROS network.
>>      >
>>      > My question is whether it will be fairly straight forward to
>>     emulate a a
>>      > very simple ROS node on windows (capable of sending joystick
>>     commands),
>>      > or if that will be complicated enough that I'm better off doing
>>      > something proprietary for the windows<->ROS communication link.
>>      >
>>      > To be clear, I'm talking about trying to implement the bare minimum
>>      > required to appear as a ROS node to roscore (running on another
>>     machine)
>>      > from scratch in C#.
>>      >
>>      > -Aaron
>>      >
>>      >
>>      >
>>      > On 6/14/2010 5:18 PM, Ken Conley wrote:
>>      >> This wiki page has all the currently known ways of getting
>>     running on
>>      >> Windows:
>>      >>
>>      >> http://www.ros.org/wiki/Windows
>>      >>
>>      >>  - Ken
>>      >>
>>      >> On Mon, Jun 14, 2010 at 11:18 AM, Aaron Solochek
>>      >> <aarons-ros at aberrant.org <mailto:aarons-ros at aberrant.org>
>>     <mailto:aarons-ros at aberrant.org <mailto:aarons-ros at aberrant.org>>>
>>     wrote:
>>      >>
>>      >>     The system I'm working on uses ROS on the backend for a
>>     variety of
>>      >>     control stuff, but has a user interface that is going to be
>>     written
>>      >>     in C#.
>>      >>
>>      >>     What is the recommended way to get some 2-way communication
>>     going
>>      >>     between this windows program and ROS?  Should I make a node
>>     on the linux
>>      >>     box that speaks some proprietary thing with the windows
>>     program, or
>>      >>     should I try to implement a ROS node in C#?
>>      >>
>>      >>     Better yet, has anyone already done something I can use for
>>     this? :)
>>      >>
>>      >>     Any advice would be appreciated, and please copy me on
>>     replies since I'm
>>      >>     only getting the daily digest of this list.
>>      >>
>>      >>     Thanks,
>>      >>
>>      >>     -Aaron
>>      >>     _______________________________________________
>>      >>     ros-users mailing list
>>      >>     ros-users at code.ros.org <mailto:ros-users at code.ros.org>
>>     <mailto:ros-users at code.ros.org <mailto:ros-users at code.ros.org>>
>>      >>     https://code.ros.org/mailman/listinfo/ros-users
>>      >>
>>      >>
>>      >> 
>>      >
>>      > _______________________________________________
>>      > ros-users mailing list
>>      > ros-users at code.ros.org <mailto:ros-users at code.ros.org>
>>      > https://code.ros.org/mailman/listinfo/ros-users
>>      >
>>
>>     _______________________________________________
>>     ros-users mailing list
>>     ros-users at code.ros.org <mailto:ros-users at code.ros.org>
>>     https://code.ros.org/mailman/listinfo/ros-users
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> ros-users mailing list
>> ros-users at code.ros.org
>> https://code.ros.org/mailman/listinfo/ros-users
> 
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users
> 
> !DSPAM:4c17b0d393991906920951!
> 




More information about the ros-users mailing list