zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java基础之在窗口中绘图——移动曲线的控制点(CurveApplet 3 moving the control points)
    【javascript】BOM介绍
    【javascript】Web Storage机制
    【javascript】50. Pow(x, n)
    【java】6. ZigZag Conversion
    【java】最长回文字符串(源码)
    【javascript】js实现单例模式
    【js注入】js注入
    【bootstrap】bootstrap可关闭警告框
    【h5】h5数据跨域交换postMessage用法
  • 原文地址:https://www.cnblogs.com/zjwno1/p/14042595.html
Copyright © 2011-2022 走看看