美文网首页
FAST-RTPS的idl文件使用教程

FAST-RTPS的idl文件使用教程

作者: prophet__ | 来源:发表于2019-12-19 17:41 被阅读0次

    FAST-RTPS

    之前就有提到过FAST-RTPS是使用在多机通讯上的一种中间件,可以在同一个局域网之内进行UDP转发和相同话题之间的通讯。
    FAST-RTPS的安装有很多版本,我选择的是eProsima的eProsima rtps下载


    在每个participant(参与机器)的程序当中,最基础的事情是要定义一个消息格式(.idl文件)。

    idl文件

    idl文件在通讯系统的当中的作用类似于定义一个C++的结构体,这个结构体里可以放置各种各样的变量。

    //hello.idl
    struct hello
    {
       string hello_msg;
       short num;
    };
    

    一个普通的idl文件大概就是长上面这样,在struct当中定义的变量类型与C++有所不同,不同的RTPS版本对idl文件的要求也不一样。我所使用的是eProsima出的rtps版本,关于变量类型的定义可以查询下面这个网站。idl撰写文档

    撰写好了idl之后,我们先将安装好的fastrtpsgen加入到环境变量当中。
    在ubuntu下打开~/.bashrc,在最低下加入

    export PATH=(你的fastrtpsgen路径):$PATH
    

    然后打开终端,通过使用下面的代码通过fastrtpsgen帮你生成通讯所需要的一些函数和代码。

    fastrtpsgen -example CMake hello.idl
    

    这一步之后会在文件夹下生成一堆的.cxx和.h文件,同时会生成一个CMakeList.txt。
    主要我们可以调用的东西都写在xxxPubSubmain.cxx/xxxPublisher.cxx/xxxSubscriber.cxx当中了,首先更改一下Publisher里的run,在函数当中对两个变量进行赋值。然后可以看一眼Subscriber的OnNewMessage函数,通过打印st.num()来观察消息是否发送成功。

    注意事项

    在对基础的应用有了一些了解之后,在我使用过程当中有一些注意事项提醒一下大家。由于在使用过程当中,是多机通讯,不同的机器上有一个自己的消息文件夹。

    当某些时候发现这个idl文件有需要增删改查的变量的时候,就会对这个idl文件进行修改。
    1.改完了idl文件之后,需要重新使用fastrtpsgen进行代码的生成,因为变量名变了,如果不重新生成会失败。

    2.改完了一个机器上的代码之后,要使两个机器上的idl包括生成的代码保持一致。idl变量在代码当中的储存形式类似于一个vector,如果你两边的idl不一样,那么即使你对某些代码赋值了,可能会赋值到它的上一个顺序变量当中,结果本体没有赋值,最后程序出现错误。(血泪教训)。

    3.idl文件可以调用我们在idl当中编写的其他结构体,就像是一个嵌套的结构体一样。代码如下所示。

    //MSG_hello.idl
    struct detect
    {
       boolean yesorno;
       short guid;
    }
    struct hello
    {
       detect detection;
       string hello_msg;
       short num;
    };
    

    那么如何在程序当中给detect当中的yesorno赋值呢?

        bool a = true;
        hello.detection().yesorno() = a ;
    

    关于简化idl文件生成的有关事宜

    idl文件里加入-example会生成很多类似于样例的文件,但是其实在后期使用当中,我们是需要自己写这些文件的,所以我们只要生成一些核心的文件,其他的文件是要放在别的地方,然后调用这些核心函数的。

    生成简化的fastrtps文件的命令是:

    fastrtpsgen Helloworld.idl
    

    不加任何的参数。关于参数的部分,可以参考官方库。


    关于idl的介绍大概就是这么多了,有什么疑问可以留言讨论。

    相关文章

      网友评论

          本文标题:FAST-RTPS的idl文件使用教程

          本文链接:https://www.haomeiwen.com/subject/thqvnctx.html