ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

ROS user interface for non-ROS machine

asked 2021-10-15 19:39:57 -0500

zuy gravatar image

Hi, I want to build a application which runs on a non-ROS machine (Windows computer for example) and can communicate directly with ROS so that I can monitor and control my robot remotely. I found that ros-bridge is a usual way to do such applications but I don't really similar to web-based. Is there any other way to so? I would prefer solutions in C++ language. Both ROS1 and ROS2 solutions will be considered since my robot is currently running on ROS1 and I have a plan to switch to ROS2 in the future. Please give me some advice. Thank you!

edit retag flag offensive close merge delete


I would still recommend to use rosbridge, unless you have very big messages and high rates.

For coordination type UIs, there are C++ clients available, see #q385152 fi (which is almost the first result if you search for rosbridge c++). For other languages there are other options (roslibpy fi).

gvdhoorn gravatar image gvdhoorn  ( 2021-10-16 03:07:00 -0500 )edit

1 Answer

Sort by » oldest newest most voted

answered 2021-10-15 21:05:43 -0500

tfoote gravatar image

In general this seems to be getting into an XY problem. aka you're asking how to run a ROS interface on a "non-ROS" machine. But as soon as you run a ROS interface on the non-ROS machine it's not non-ROS.

What I think you want to do is run a c++ gui on a windows machine that can interact with the ROS network. You can build applications with ROS libraries inside them that include all the necessary libraries to be distributed as a standard Windows C++ executable to install on a Windows system.

Compiling into a self contained executable allows you to run on a standard windows installation without setting anything else up such as the developer toolchains etc. And this is actually possible on any platform but is particularly useful on Windows where self contained binaries are more expected.

edit flag offensive delete link more


Yes, that is exactly what I meant. But then how can I interact with ROS network as well as read ROS msgs? It seems like this contains a lot of work.

zuy gravatar image zuy  ( 2021-10-15 22:07:50 -0500 )edit

If you've compiled the ROS client libraries into your application it can talk with the ROS network via ROS messages.

tfoote gravatar image tfoote  ( 2021-10-18 02:49:41 -0500 )edit

But it requires TCPROS/UDPROS to communicate be able to communicate with ROS nodes, doesn't it? And also how can my application present in the ROS network? On ROS machine we easily do that by export ROS_MASTER_URI and ROS_HOSTNAME but what about non-ROS machine? Does it require to include anything else?

zuy gravatar image zuy  ( 2021-10-18 03:10:08 -0500 )edit

TCPROS and UDPROS are implemented in the client libraries. Those environment variables are read and used by the client library. Thus if you compile in the client libraries your application, the application can talk with the ROS network.

tfoote gravatar image tfoote  ( 2021-10-18 12:41:33 -0500 )edit

Question Tools



Asked: 2021-10-15 19:39:57 -0500

Seen: 212 times

Last updated: Oct 15 '21