#Apollo开发者#
学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往:
《自动驾驶新人之旅》免费课程—> 传送门
《Apollo Beta宣讲和线下沙龙》免费报名—>传送门
文章目录
前言
Cyber通信
本文以某Node想要一直获取车的速度为例,展示Cyber通信中的Listener-Talker通信方式。
编写代码
定义一个车的消息
//车的车牌号,车的型号,车主,已跑公里数,车速
message Car1{
optional string plate = 1;
optional string type = 2;
optional string owner = 3;
optional uint64 kilometers = 4;
optional uint64 speed = 5;
};
编写talker1.cc来实现主动对话
//头文件引用
#include "examples/proto/car1.pb.h"
#include "cyber/cyber.h"
#include "cyber/time/rate.h"
//car数据定义的引用
using apollo::cyber::examples::proto::Car1;
int main(int argc, char *argv[]) {
// 初始化一个cyber框架
apollo::cyber::Init(argv[0]);
// 创建talker节点
auto talker_node = apollo::cyber::CreateNode("talker");
// 从节点创建一个Topic,来实现对车速的查看
auto talker = talker_node->CreateWriter<Car1>("car_speed");
AINFO << "I'll start telling you the current speed of the car.";
//设置初始速度为0,然后速度每秒增加5km/h
uint64_t speed = 0;
while (apollo::cyber::OK()) {
auto msg = std::make_shared<Car1>();
msg->set_speed(speed);
//假设车速持续增加
speed += 5;
talker->Write(msg);
sleep(1);
}
return 0;
}
编写一个listener1.cc来实现对talker1发送过来的内容进行接收
#include "examples/proto/car1.pb.h"
#include "cyber/cyber.h"
using apollo::cyber::examples::proto::Car1;
//接收到消息后的响应函数
void message_callback(
const std::shared_ptr<Car1>& msg) {
AINFO << "now speed is: " << msg->speed();
}
int main(int argc, char* argv[]) {
//初始化cyber框架
apollo::cyber::Init(argv[0]);
//创建监听节点
auto listener_node = apollo::cyber::CreateNode("listener");
//创建监听响应进行消息读取
auto listener = listener_node->CreateReader<Car1>(
"car_speed", message_callback);
apollo::cyber::WaitForShutdown();
return 0;
}
编译程序
使用如下脚本命令对程序进行编译
bash scripts/apollo_neo.sh build --packages examples/communication
编译成功后如下图所示:
运行通信程序
使用如下命令执行talker1
cd /opt/apollo/neo/packages/examples-dev/local/bin
./talker1
执行成功后可以看到talker1持续发送速度信息,如下图所示:
使用如下命令执行listener1
cd /opt/apollo/neo/packages/examples-dev/local/bin
./listener1
执行成功后可以看到listener1接收的速度信息,如下图所示:
总结
以上就是本人在学习自动驾驶时,对所学课程的一些梳理和总结。后续还会分享另更多自动驾驶相关知识,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。
另外,如果有同在小伙伴,也正在学习或打算学习自动驾驶时,可以和我一同抱团学习,交流技术。
版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!
文中部分图片来源自网络,若有侵权,联系立删。