C#开发ROS的话题发布与订阅

一、前言

在写这篇文章之前,我花费了将近一周时间研究,终于发现了一个ROS的库,这是由小日子过得不错的日本人开发的

Github地址如下:

https://github.com/zoetrope/rossharp

这是在.NET Framework 4.0开发的,其实这并不是我想要的,我想在Linux平台下开发,并且发布在Linux平台下。

正好这段时间.NET5出来了,我就想着把这个库改成.NET Core或者.NET5

 

二、原理

花了两天时间,研究了原理,简单的说一下原理

下面这张图描述了话题的通信机制

在这里插入图片描述

 

 

从上图中可以看到,通信方式使用的是XmlRPC 以及 TCP

XmlRPC API参照下面网址

https://wiki.ros.org/ROS/Master_Slave_APIs

image

里面有三个API   MasterAPI、ParameterServerAPI、以及SlaveAPI

MasterAPI是节点管理器的接口,主要用于向节点管理器注册或者取消注册各种通信(发布者、订阅者、服务)

ParameterServerAPI是参数服务器,主要用于ROS中参数的存取

SlaveAPI是各个节点的回调服务,如果自己写个节点的话,需要创建这个服务供其他节点访问

 

 

1.话题订阅

1.1 话题订阅需要通过xmlRPC协议向ROS节点管理器注册Subscriber,然后开启回调服务

1.2 ROS Master会返回所有的发布该话题的 URL

1.3 根据URL,创建Slave客户端,向那些节点请求话题

1.4 然后会返回TCP通信的主机与通信端口号

1.5 根据通信端口号与主机建立TCP连接,然后向TCP服务端发送请求头

1.6 TCP服务端就会将发布的消息返回到客户端

2.消息发布就反推,需要开启TCP服务端,Slave服务端需要在RequestTopic中返回该端口号

 

3.TCP通信的消息头参考http://wiki.ros.org/ROS/TCPROS 

 

三、使用

RosSharp库我已放到gitee上

https://gitee.com/zjwno1/ros-sharp-net5

 

1.使用VS2019 最新版,支持.NET5

2.Ubuntu上安装.NET5环境,查看我上篇博客

3.编写测试代码

image

image

image

 

4.运行测试

4.1 开启roscore

image

4.2 发布话题

rostopic pub -r 1 /chatter std_msgs/String "data: 'AAABBBCCC'"

image

 

4.3 输出消息

rostopic echo /chatter

image

 

5.运行程序(VS要用管理员方式打开,否则会SlaveServer监听失败)

image

成功显示消息

 

 

6.再开一个VS    运行Publisher

  image

     成功发布话题

 

反过来再看看终端,也能显示消息

image

 

7.打开rqt_graph,查看一下节点关系

rqt_graph

image

OK,成功

 

四、发布到Ubuntu中使用

  1.修改代码中的HostName为localhost ,因为再ubuntu中,ROS节点管理器,跟我们写的都在同一台主机,所以可以用localhost

image

 

image

image

 

2.发布完上传到ubuntu中

image

在终端授权为可执行

chmod 777 RosPublisher
chmod 777 RosSubscriber

3.在ubuntu中运行

image

 

 

image

image

 

image

posted @ 2020-11-26 15:35  大师兄法号随缘  阅读(3107)  评论(1编辑  收藏  举报