Cyber RT 开发工具

在Cyber RT中还提供了一些工具,这些工具可以拓展Cyber RT功能、提高开发调试效率,本章主要介绍这些工具的使用。

本章内容:
1.cyber record工具的应用;
2.常用命令工具的使用;

学习收获:
1.可以通过cyber record将发布的话题消息序列化到磁盘,可以延时、反复使用数据,并可以对数据做二次处理;
2.可以通过Cyber RT内置的命令工具灵活的获取节点、话题、服务等相关信息,提高开发调试效率。

cyber record

在开发调试过程中,实车路测是必不可少的环节之一,但是实车路测的人力成本和时间成本都是比较高为了降低研发成本,在Cyber RT中提供了工具: cyber record,它可以订阅消息并将之序列化(写)到文件,也可以从磁盘文件反序列化(读)并重新发布消息,这意味着我们可以在实际路测时,将所需数据其保存,后面再调试时可以直接回放数据,从而实现数据的复用。

概念
cyber record是用于序列化或反序列化话题话题消息的一个工具集。

作用
可以实现数据复用,在开发调试车载软件时降低成本提高效率。

需求
通过 cyber record 将学生信息写入磁盘文件,并再通过 cyber record 读取文件中的学生信息。

大致步骤如下:
1.序列化;
2.反序列化;
3.编译并执行。

准备:
需要先准备protobuf 数据,可以直接复用 student.proto文件;
在demo_cc文件夹下新建tools目录,并在 tools目录中新建BUILD文件;

1.序列化
demo_cc/tools 目录下新建C++文件 demo01_record_write.cc,输入如下内容:

/*将话题消息写入磁盘文件
实现:1.初始化 cyber框架;2.创建recorder写对象;3.设置写出参数;4.打开文件流;5.写出消息类型以及消息数据;6.关闭文件流。
*/#include "cyber/cyber.h"
#include "cyber/record/record_writer.h"
#include "cyber/demo_base_proto/student.pb.h"using apollo::cyber::record::RecordWriter;
using apollo::cyber::demo_base_proto::Student;int main(int argc, char const *argv[])
{// 1.初始化 cyber框架;apollo::cyber::Init(argv[0]);// 2.创建recorder写对象;RecordWriter writer;// 3.设置写出参数;writer.SetSizeOfFileSegmentation(0);writer.SetIntervalOfFileSegmentation(0);// 4.打开文件流;writer.Open("/apollo/cyber/demo_cc/tools/mytest.record");// 5.写出消息类型以及消息数据;//5.1话题//param1: 话题名词  param2: 消息类型 param3: 描述writer.WriteChannel("chatter","apollo.cyber.demo_base_proto.Student","test...");//5.2 消息for(size_t i=0;i<100;i++){//创建消息对象auto stu = std::make_shared<Student>();stu->set_name("feng");stu->set_age(7);stu->set_height(1.3);stu->add_books("C++1");stu->add_books("C++2");stu->add_books("C++3");//将对象转化为字符串std::string content;stu->SerializeToString(& content);//写出字符串writer.WriteMessage("chatter",content,1000+i);}// 6.关闭文件流。writer.Close();return 0;
}

BUILD文件:

cc_binary(name = "demo01_record_write",deps = ["//cyber","//cyber/demo_base_proto:student_cc"],srcs = ["demo01_record_write.cc"],
)

编译执行:
在这里插入图片描述

2.反序列化
demo_cc/tools 目录下新建C++文件 demo02_record_read.cc,输入如下内容:

/*需求:读取文件的Student数据。实现:1.包含头文件;2.初始化cyber框架;3.创建读取对象;4.读话题相关数据;5.读消息相关数据。
*///1.包含头文件;
#include "cyber/cyber.h"
#include "cyber/record/record_reader.h"
#include "cyber/record/record_message.h"using apollo::cyber::record::RecordReader;
using apollo::cyber::record::RecordMessage;int main(int argc, char const *argv[])
{// 2.初始化cyber框架;apollo::cyber::Init(argv[0]);// 3.创建读取对象;RecordReader reader("/apollo/cyber/demo_cc/tools/mytest.record");// 4.读话题相关数据;//声明读取的话题名称std::string channel = "chatter";//读取内容uint64_t count = reader.GetMessageNumber(channel);std::string msg_type = reader.GetMessageType(channel);std::string desc = reader.GetProtoDesc(channel);AINFO<<"消息数量: "<< count << ";";AINFO<<"消息类型: "<< msg_type<<";";AINFO<<"描述信息:" << desc;// 5.读消息相关数据。//创建 msg 对象,存储读到的消息RecordMessage msg;//编写循环读数据(解析消息)for(size_t i=0; i< count; i++){if(reader.ReadMessage(&msg)){//解析AINFO<<"话题名称:"<<msg.channel_name;AINFO<<"内容:"<<msg.content;AINFO<<"时间:"<<msg.time;AINFO<<"--------------------------------";}else{AINFO<<"读取失败";}}return 0;
}

BUILD 文件:

cc_binary(name = "demo02_record_read",deps = ["//cyber","//cyber/demo_base_proto:student_cc"],srcs = ["demo02_record_read.cc"],
)

在这里插入图片描述

常用命令

通信应用中可能会遇到的一些问题,比如:
调试时如何获取Cyber RT中运行的节点及其相关状态?
开发时编写完了发布节点,如何快速验证节点运行是否正常呢?如何判断消息发布的频率是否符合预期?
在Cyber RT中提供了一些命令工具,可以方便快捷的解决上述问题,常用的命令如下:
1.cyber_node;
2.cyber_channel;
3.cyber_service;
4.cyber_launch;
5.cyber_monitor;
6.cyber_record。

1.获取某个指令的使用说明,可以输入如下格式的命令

cyber_xxx -h

2.获取某个指令的某个参数的使用说明,可以输入如下格式的命令

cyber_xxx yyy -h

准备工作
启动多个节点,并在调用命令之前先加载环境变量

sourc cyber/setup.bash

1.cyber_node
用于获取Cyber RT中运行的节点的相关信息。

cyber_node list #列出所有运行中的节点
cyber_node info xxx	#输出某个节点或所有节点信息

在这里插入图片描述

2.cyber_channel
获取关于话题的相关信息。

cyber_channel list	#列出所有运行中的话题
cyber_channel info	#输出话题相关信息(发布者、订阅者、消息类型....)
cyber_channel echo	#输出话题消息
cyber_channel hz	#输出话题消息的发布频率
cyber_channel bw	#输出消息发布所占用带宽
cyber_channel type	#输出话题消息类型

在这里插入图片描述

3.cyber_service
获取关于服务的相关信息

cyber_service list	#列出所有运行中的服务
cyber_service info	#输出某个服务的相关信息

4.cyber_launch

用于 launch 文件的启动和关闭

cyber_launch start	#启动launch文件
cyber_launch stop	#关闭launch文件

5.cyber_monitor
cyber_monitor可以在一个单独的窗体中以一种更综合的方式显示话题相关内容。

用法:
cyter_monitor[option]
option:-h	输出提示信息-c	指定某个话题
通用命令:q | Q |Esc --退出Backspace --返回上一步h | H	--输出提示信息Common Commands for Topology and Channel Message:
常用命令PgOn| d --下一页PgUp | u--上一页w|W|up Arrow --上移一行s|S|Down Arrowe --下移一行d|D|Enter |Right Arrow --进入被选定的话题a|A|Left Arrow --返回上一层
消息显示相关命令:f|F -- 显示所有消息的频率t|T -- 显示消息类型Space -- 关闭或打开消息
进入某个话题后使用的命令:i|I -- 旦示话题的读写相关消息b|B -- 显示消息内容
显示消息重复字段的命令:n|N -- 重复字段的下一个元素m|M -- 重复字段的上一个元素, -- 关闭或打开重复显示字段的功能

在这里插入图片描述

6.cyber_recorder

cyber_recorder info		#显示已经存在的record文件信息
cyber_recorder play	# 回放record文件信息
cyber_recorder record 	#录制record文件
cyber_recorder split 分割	#record文件
cyber_recorder recover 	#复制record文件

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/270501.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

因果学习篇(2)-Causal Attention for Vision-Language Tasks(文献阅读)

Causal Attention for Vision-Language Tasks 引言 这篇论文是南洋理工大学和澳大利亚莫纳什大学联合发表自2021年的CVPR顶会上的一篇文献&#xff0c;在当前流行的注意力机制中增加了因果推理算法&#xff0c;提出了一种新的注意力机制&#xff1a;因果注意力(CATT)&#xff…

AI智商排名:Claude-3首次突破100

用挪威门萨&#xff08;智商测试题&#xff09;中 35 个问题对chatGPT等人工智能进行了测试&#xff1a; ChatGPT 对ChatGPT进行了两次挪威门萨测试&#xff0c;在 35 个问题中&#xff0c;它平均答对了 13 个&#xff0c;智商估计为 85。 测试方法 每个人工智能都接受了两次…

2023第十届GIAC全球互联网架构大会:洞察未来互联网架构的革新与突破(附大会核心PPT下载)

随着互联网的迅猛发展&#xff0c;其底层架构的演进与革新成为了推动全球数字化进程的关键力量。2023年第十届GIAC全球互联网架构大会如期而至&#xff0c;汇聚了全球互联网架构领域的顶尖专家、学者、企业领袖和创新者&#xff0c;共同探讨和展望互联网架构的未来发展趋势。本…

RabbitMQ 基本介绍

RabbitMQ 基本介绍 消息模型 所有 MQ 产品从模型抽象上来说都是一样的过程&#xff1a; 消费者&#xff08;consumer&#xff09;订阅某个队列。生产者&#xff08;producer&#xff09;创建消息&#xff0c;然后发布到队列&#xff08;queue&#xff09;中&#xff0c;最后…

centos7安装maven离线安装

1、从官方网站下载maven文件包 官方下载网站&#xff1a;https://maven.apache.org/download.cgi 2、创建文件夹解压文件 将下载好的安装包&#xff0c;放到创建的目录下&#xff0c;并解压 a、创建/app/maven文件 mkdir /app/mavenb、解压文件 tar -zxvf apache-maven-…

C#使用whisper.net实现语音识别(语音转文本)

目录 介绍 效果 输出信息 项目 代码 下载 介绍 github地址&#xff1a;https://github.com/sandrohanea/whisper.net Whisper.net. Speech to text made simple using Whisper Models 模型下载地址&#xff1a;https://huggingface.co/sandrohanea/whisper.net/tree…

32、Redis 7系列:Spring Boot集成Redis

32、Redis 7系列&#xff1a;Spring Boot集成Redis 一、前言二、集成 RedisTemplate1、单机&#xff08;1&#xff09;新建项目&#xff08;2&#xff09;修改pom文件&#xff08;3&#xff09;修改yml文件&#xff08;4&#xff09;启动类&#xff08;5&#xff09;配置类&…

1.初识python

1.初识python 编程语言是用来定义计算机程序的语言&#xff0c;用来向计算机发出指令。 1.python语言是一种面向对象的解释型高级编程语言。 解释型语言&#xff1a;使用专门的解释器对源码程序逐行解释成特定平台的机器并立即执行&#xff0c;是代码在执行时才被解释器一行行…

centos7 部署kibana

先决条件参考 虚拟机部署elasticsearch集群-CSDN博客 这里使用elk101服务器安装kibana 下载rpm包(这里添加了-c参数用到wget的断点续传功能) #下载kibana-rpm包以及校验文件 wget -c https://artifacts.elastic.co/downloads/kibana/kibana-7.17.18-x86_64.rpm wget -c htt…

尤雨溪:Vue 未来展望新的一轮

十年&#xff0c;一个既漫长又短暂的时光跨度&#xff0c;对于技术世界来说&#xff0c;更是沧海桑田的瞬间。在这十年里&#xff0c;Vue.js 从无到有&#xff0c;从默默无闻到蜚声全球&#xff0c;不仅改变了前端开发的面貌&#xff0c;更成为了无数开发者手中的得力工具。 在…

设计模式之策略模式实践

设计模式之策略模式实践 先了解一下策略模式的定义是什么&#xff1f;解决什么问题 策略模式是一种行为设计模式&#xff0c;它定义了一系列算法&#xff0c;将每个算法封装成一个类&#xff0c;并使它们可以互相替换。策略模式允许客户端在运行时从可互换的算法中选择一个&a…

【论文精读】TextDiffuser-2:释放语言模型用于文本渲染的力量

文章目录 一、前言二、摘要三、方法&#xff08;一&#xff09;TextDiffuser-2模型的整体架构&#xff08;二&#xff09;语言模型M1将用户提示转换为语言格式的布局&#xff08;三&#xff09;将提示和布局结合到扩散模型内的可训练语言模型M2中进行编码以生成图像 四、实验&a…

基于单片机的数字温度计设计

目 录 摘 要 I Abstract II 引 言 1 1 整体方案设计 3 1.1 主控芯片类型选择 3 1.2 测温电路选择 3 1.3 系统总体方案 4 2 系统的硬件电路设计 5 2.1 单片机系统设计 5 2.2 显示模块设计 8 2.3 温度读取电路的设计 10 3 系统软件设计 13 3.1 软件开发环境的介绍 13 3.2 系统重…

ubuntu_定制文件系统[2]-清理日志log

1.问题现象 系统长时间运行, 产生大量的系统日志 ubuntu/debian 系统日志如下 /var/log$ du -sh * 31M syslog # syslog日志 61M syslog.1 2.5G journal/ # systemd service日志 当日志文件过大, 硬盘空间占用100%时, 导致各种异常 命令按tab补全无响应服务/进程启动异常服务…

Docker之若依项目部署

目录 一、搭建项目的局域网 1.1搭建局域网 1.2查看局域网 1.3注意&#xff1a;要关闭防火墙&#xff0c;关闭后要重启docker 二、redis安装 2.1创建目录 2.2修改redis.conf文件 三、MySQL安装 3.1安装 3.2设置远程连接 3.3创建数据库 四、若依后端项目搭建 4.1创建…

挑战杯 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的植物识别算法 ** …

Xilinx高级调试方法--远程调试

Xilinx高级调试方法--远程调试 1 虚拟电缆调试2 FPGA设计2.1 扩展配置接口 3 PCIe-XVC驱动3.1 PCIe-XVC驱动3.2 XVC-Server 4 Vivado Design Suite4.1 同一台主机4.2 不同主机 本文主要介绍Xilinx的一些高级调试方法&#xff0c;以及如何使用Xilinx的相关IP。 1 虚拟电缆调试 …

Java基础知识点

Java基础知识点 1.方法重载和重写的区别 方法重载&#xff1a; 同一个类中的方法&#xff0c;方法名相同&#xff0c;返回值可以相同可以不同&#xff0c;参数列表必须不同发生在编译期&#xff0c;在编译期确定执行哪个方法 方法重写&#xff1a; 指的是子类重新定义父类…

探索c++——了解c++的魅力

前言&#xff1a;c是一门既面向对象又面向过程的语言。 不同于java纯粹的面向对象和c纯粹的面向过程。 造成c该特性的原因是c是由本贾尼大佬在c的基础上增添语法创建出来的一门新的语言。 它既兼容了c&#xff0c; 身具面向过程的特性。 又有本身的面向对象的特性。 面向对象和…

Wireshark_labs TCP

在本实验中&#xff0c;我们将详细研究著名的TCP协议的行为。我们将通过从您的电脑向远程服务器传输一份150KB 的文件(一份Lewis Carrol 的“爱丽丝梦游仙境”文本)&#xff0c; 并分析TCP传输内容的发送和接收过程来实现。我们将研究TCP对序列和确认号的使用&#xff0c;以提供…