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

话题通信

目录

话题通信

创建node

API

参数

创建写端

API

参数:

创建读端

API

参数

代码样例

Talker

Listener

BUILD



创建node


API

std::unique_ptr<Node> 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

template <typename MessageT>
   auto CreateWriter(const std::string& channel_name)
       -> std::shared_ptr<Writer<MessageT>>;
template <typename MessageT>
   auto CreateWriter(const proto::RoleAttributes& role_attr)
       -> std::shared_ptr<Writer<MessageT>>;


参数:


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


创建读端


API

template <typename MessageT>
auto CreateReader(const std::string& channel_name, const std::function<void(const std::shared_ptr<MessageT>&)>& reader_func)
    -> std::shared_ptr<Reader<MessageT>>;

template <typename MessageT>
auto CreateReader(const ReaderConfig& config,
                  const CallbackFunc<MessageT>& reader_func = nullptr)
    -> std::shared_ptr<cyber::Reader<MessageT>>;

template <typename MessageT>
auto CreateReader(const proto::RoleAttributes& role_attr,
                  const CallbackFunc<MessageT>& reader_func = nullptr)
-> std::shared_ptr<cyber::Reader<MessageT>>;


参数


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



代码样例

Talker

#include "cyber/cyber.h"

#include "cyber/proto/chatter.pb.h"

#include "cyber/time/rate.h"

#include "cyber/time/time.h"

using apollo::cyber::Rate;

using apollo::cyber::Time;

using apollo::cyber::proto::Chatter;

int main(int argc, char *argv[]) {

// init cyber framework

apollo::cyber::Init(argv[0]);

// create talker node

std::shared_ptr<apollo::cyber::Node> talker_node(

apollo::cyber::CreateNode("talker"));

// create talker

auto talker = talker_node->CreateWriter<Chatter>("channel/chatter");

Rate rate(1.0);

while (apollo::cyber::OK()) {

static uint64_t seq = 0;

auto msg = std::make_shared<apollo::cyber::proto::Chatter>();

msg->set_timestamp(Time::Now().ToNanosecond());

msg->set_lidar_timestamp(Time::Now().ToNanosecond());

msg->set_seq(seq++);

msg->set_content("Hello, apollo!");

talker->Write(msg);

AINFO << "talker sent a message!";

rate.Sleep();

}

return 0;

}

Listener

#include "cyber/cyber.h"

#include "cyber/proto/chatter.pb.h"

void MessageCallback(

const std::shared_ptr<apollo::cyber::proto::Chatter>& msg) {

AINFO << "Received message seq-> " << msg->seq();

AINFO << "msgcontent->" << msg->content();

}

int main(int argc, char *argv[]) {

// init cyber framework

apollo::cyber::Init(argv[0]);

// create listener node

auto listener_node = apollo::cyber::CreateNode("listener");

// create listener

auto listener =

listener_node->CreateReader<apollo::cyber::proto::Chatter>(

"channel/chatter", MessageCallback);

apollo::cyber::WaitForShutdown();

return 0;

}

BUILD

cc_binary(

name = "talker",

srcs = [ "talker.cc", ],

deps = [

"//cyber",

"//cyber/examples/proto:examples_cc_proto",

],

)



cc_binary(

name = "listener",

srcs = [ "listener.cc", ],

deps = [

"//cyber",

"//cyber/examples/proto:examples_cc_proto",

],

)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ym影子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值