• Apollo 应用与源码分析:CyberRT-话题通信


    话题通信

    目录

    话题通信

    创建node

    API

    参数

    创建写端

    API

    参数:

    创建读端

    API

    参数

    代码样例

    Talker

    Listener

    BUILD



    创建node


    API

    std::unique_ptr apollo::cyber::CreateNode(const std::string& node_name, const std::string& name_space = "");


    参数


    Node_name: 节点名,全局唯一标识符
    Name_space:节点所在的空间名称
    Name_space 默认为空。是与node_name连在一起的空间名。格式为/namespace/node_name
    返回值-指向Node的独占智能指针
    错误条件—当cyber::Init()未被调用时,系统处于未初始化状态,无法创建节点,返回nullptr

    创建写端


    API

    1. template <typename MessageT>
    2. auto CreateWriter(const std::string& channel_name)
    3. -> std::shared_ptr>;
    4. template <typename MessageT>
    5. auto CreateWriter(const proto::RoleAttributes& role_attr)
    6. -> std::shared_ptr>;


    参数:


    Channel_name:要写入的通道名
    MessageT:要写入的消息类型
    返回值- Writer对象的共享指针


    创建读端


    API

    1. template <typename MessageT>
    2. auto CreateReader(const std::string& channel_name, const std::function<void(const std::shared_ptr&)>& reader_func)
    3. -> std::shared_ptr>;
    4. template <typename MessageT>
    5. auto CreateReader(const ReaderConfig& config,
    6. const CallbackFunc& reader_func = nullptr)
    7. -> std::shared_ptr>;
    8. template <typename MessageT>
    9. auto CreateReader(const proto::RoleAttributes& role_attr,
    10. const CallbackFunc& reader_func = nullptr)
    11. -> std::shared_ptr>;


    参数


    MessageT:要读取的消息类型
    Channel_name:要接收的通道的名称
    Reader_func:处理消息的回调函数
    返回值—Reader对象的共享指针



    代码样例

    Talker

    1. #include "cyber/cyber.h"
    2. #include "cyber/proto/chatter.pb.h"
    3. #include "cyber/time/rate.h"
    4. #include "cyber/time/time.h"
    5. using apollo::cyber::Rate;
    6. using apollo::cyber::Time;
    7. using apollo::cyber::proto::Chatter;
    8. int main(int argc, char *argv[]) {
    9. // init cyber framework
    10. apollo::cyber::Init(argv[0]);
    11. // create talker node
    12. std::shared_ptr talker_node(
    13. apollo::cyber::CreateNode("talker"));
    14. // create talker
    15. auto talker = talker_node->CreateWriter("channel/chatter");
    16. Rate rate(1.0);
    17. while (apollo::cyber::OK()) {
    18. static uint64_t seq = 0;
    19. auto msg = std::make_shared();
    20. msg->set_timestamp(Time::Now().ToNanosecond());
    21. msg->set_lidar_timestamp(Time::Now().ToNanosecond());
    22. msg->set_seq(seq++);
    23. msg->set_content("Hello, apollo!");
    24. talker->Write(msg);
    25. AINFO << "talker sent a message!";
    26. rate.Sleep();
    27. }
    28. return 0;
    29. }

    Listener

    1. #include "cyber/cyber.h"
    2. #include "cyber/proto/chatter.pb.h"
    3. void MessageCallback(
    4. const std::shared_ptr& msg) {
    5. AINFO << "Received message seq-> " << msg->seq();
    6. AINFO << "msgcontent->" << msg->content();
    7. }
    8. int main(int argc, char *argv[]) {
    9. // init cyber framework
    10. apollo::cyber::Init(argv[0]);
    11. // create listener node
    12. auto listener_node = apollo::cyber::CreateNode("listener");
    13. // create listener
    14. auto listener =
    15. listener_node->CreateReader(
    16. "channel/chatter", MessageCallback);
    17. apollo::cyber::WaitForShutdown();
    18. return 0;
    19. }

    BUILD

    1. cc_binary(
    2. name = "talker",
    3. srcs = [ "talker.cc", ],
    4. deps = [
    5. "//cyber",
    6. "//cyber/examples/proto:examples_cc_proto",
    7. ],
    8. )
    9. cc_binary(
    10. name = "listener",
    11. srcs = [ "listener.cc", ],
    12. deps = [
    13. "//cyber",
    14. "//cyber/examples/proto:examples_cc_proto",
    15. ],
    16. )

  • 相关阅读:
    AdaBoost:自适应提升算法(Numpy手写代码实战)
    20220802NOI模拟赛--考后总结
    性能测试 —— 生成html测试报告、参数化、jvm监控
    千亿流量并发治理!Alibaba实战Sentinel笔记,为微服务保驾护航
    全局引入的js如何只让部分页面有效
    SpringCloud Alibaba系列 Gateway(四)
    Android 播放mp3文件
    【C语言进阶】---- 自定义类型详解
    c - ar 中的 “rcs“选项有什么作用?
    Flink学习第十天——玩转Flink Core Api常用Transformation算子 多案例实战
  • 原文地址:https://blog.csdn.net/qq_32378713/article/details/127958226